This commit is contained in:
Frater 2026-02-11 20:08:46 +01:00
commit 8bed7747d9
2 changed files with 48 additions and 56 deletions

View file

@ -103,13 +103,6 @@ entrycode:
GFX MOUSE_MOVE
GFX MOUSE_SHOW
push cs
pop ds
; Init du système GUI
call gui_init_system
call build_interface
call main_loop
; --- Callbacks (Fonctions appelées par le moteur) ---
@ -119,34 +112,19 @@ on_click_quit:
ret
%define .oldval word [bp-2]
%define .slider word [bp-4]
main_loop:
push bp
push bx
mov bp, sp
sub sp, 2
sub sp, 4
mov .oldval, -1
push cs
pop ds
.loop:
call gui_process_all
GUI OBJ_GET_VAL, 6 ; slider
; Init du système GUI
call gui_init_system
cmp ax,.oldval
je .loop
mov .oldval, ax
GFX RECTANGLE_FILL,0,148,50,166, PATTERN_WHITE
GFX GOTOXY, 8, 150
call print_word_hex
jmp .loop
build_interface:
; --- CRÉATION DYNAMIQUE DES BOUTONS ---
; On reste dans CS pour lire les arguments,
; mais on configure DS=GUI_RAM_SEG pour l'allocation
; Créer Bouton 1 "QUITTER"
GUI OBJ_CREATE, OBJ_TYPE_BUTTON_ROUNDED, 10, 10, 80, 16
@ -170,10 +148,28 @@ build_interface:
GUI OBJ_SLIDER_SET_ATTR, ax, 10, 140, 10, 15
GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 400, 10, 16, 150
GUI OBJ_SET_MODE, ax, SLIDER_VERTICAL
GUI OBJ_SLIDER_SET_ATTR, ax, 0, 15, 15, 20
mov .slider, ax
GUI OBJ_SET_MODE, .slider, SLIDER_VERTICAL
GUI OBJ_SLIDER_SET_ATTR, .slider, 0, 15, 15, 20
mov .oldval, -1
.mem_full:
.loop:
call gui_process_all
GUI OBJ_GET_VAL, .slider ; slider
cmp ax,.oldval
je .loop
; debug
mov .oldval, ax
GFX RECTANGLE_FILL,0,148,50,166, PATTERN_WHITE
GFX GOTOXY, 8, 150
call print_word_hex
; end debug
jmp .loop
leave
ret
; --- Données ROM ---

View file

@ -136,8 +136,6 @@ gui_api_slider_attr:
call gui_get_widget_ptr
jc .err
mov ax, .mode
mov byte [gs:si + widget.attr_min], al
mov ax, .min
mov word [gs:si + widget.attr_min], ax
mov ax, .max
@ -319,7 +317,6 @@ gui_api_get_val:
push bp
mov bp, sp
mov ax, .id ; ID
call gui_get_widget_ptr
jc .err
@ -335,9 +332,9 @@ gui_api_get_val:
%undef .id
; -----------------------------------------------------------------------------
; gui_api_get_val
; gui_api_set_val
; Arg1: ID
; Out: AX = Attr Val
; Arg2: Value
; -----------------------------------------------------------------------------
%define .id word [bp+4]
%define .val word [bp+6]
@ -349,16 +346,14 @@ gui_api_set_val:
call gui_get_widget_ptr
jc .err
mov ax, [gs:si + widget.attr_val]
jmp .done
mov ax, .val
mov [gs:si + widget.attr_val], ax
.err:
mov ax, -1
.done:
leave
ret
%undef .id
%undef .val
; -----------------------------------------------------------------------------
; gui_api_destroy
@ -793,10 +788,6 @@ gui_logic_slider:
.do_drag:
; --- LOGIQUE DE DÉPLACEMENT ---
; On calcule les limites dynamiquement pour éviter que le curseur ne sorte
push ax
push bx
push dx
xor ax, ax
xor bx, bx
@ -806,9 +797,6 @@ gui_logic_slider:
cmp byte [gs:si + widget.attr_mode], 2
je .drag_v
pop dx
pop bx
pop ax
xor ax, ax
ret
@ -816,6 +804,7 @@ gui_logic_slider:
; 1. Thumb Width -> AX
mov ax, [gs:si + widget.w]
mov bl, [gs:si + widget.thumb_pct]
xor bh, bh ; Sécurité
mul bx
mov bx, 100
div bx ; AX = Thumb Width
@ -829,7 +818,13 @@ gui_logic_slider:
mov dx, [gs:si + widget.x] ; DX = Min Pos
; 4. Target Pos = MouseX - Anchor
mov ax, cx
; On recharge MouseX depuis la BDA pour être sûr
push ds
mov ax, BDA_DATA_SEG
mov ds, ax
mov ax, [BDA_MOUSE + mouse.x]
pop ds
sub ax, [gs:si + widget.attr_anchor]
jmp .apply_clamp
@ -837,6 +832,7 @@ gui_logic_slider:
; 1. Thumb Height -> AX
mov ax, [gs:si + widget.h]
mov bl, [gs:si + widget.thumb_pct]
xor bh, bh ; Sécurité
mul bx
mov bx, 100
div bx ; AX = Thumb Height
@ -850,9 +846,13 @@ gui_logic_slider:
mov dx, [gs:si + widget.y] ; DX = Min Pos
; 4. Target Pos = MouseY - Anchor
; MouseY est sur la pile (push dx initial), on le recupere via SP
mov bp, sp
mov ax, [bp] ; [bp] = Saved DX (MouseY)
; On recharge MouseY depuis la BDA pour être sûr
push ds
mov ax, BDA_DATA_SEG
mov ds, ax
mov ax, [BDA_MOUSE + mouse.y]
pop ds
sub ax, [gs:si + widget.attr_anchor]
.apply_clamp:
@ -867,10 +867,6 @@ gui_logic_slider:
mov ax, bx
.apply_pos:
pop dx
pop bx
add sp, 2 ; Clean AX from stack
cmp ax, [gs:si + widget.attr_val]
je .no_change
mov [gs:si + widget.attr_val], ax