fix val
This commit is contained in:
parent
a976416822
commit
8bed7747d9
2 changed files with 48 additions and 56 deletions
58
src/boot.asm
58
src/boot.asm
|
|
@ -103,13 +103,6 @@ entrycode:
|
||||||
GFX MOUSE_MOVE
|
GFX MOUSE_MOVE
|
||||||
GFX MOUSE_SHOW
|
GFX MOUSE_SHOW
|
||||||
|
|
||||||
push cs
|
|
||||||
pop ds
|
|
||||||
|
|
||||||
; Init du système GUI
|
|
||||||
call gui_init_system
|
|
||||||
call build_interface
|
|
||||||
|
|
||||||
call main_loop
|
call main_loop
|
||||||
|
|
||||||
; --- Callbacks (Fonctions appelées par le moteur) ---
|
; --- Callbacks (Fonctions appelées par le moteur) ---
|
||||||
|
|
@ -119,34 +112,19 @@ on_click_quit:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%define .oldval word [bp-2]
|
%define .oldval word [bp-2]
|
||||||
|
%define .slider word [bp-4]
|
||||||
main_loop:
|
main_loop:
|
||||||
push bp
|
push bp
|
||||||
push bx
|
|
||||||
mov bp, sp
|
mov bp, sp
|
||||||
sub sp, 2
|
sub sp, 4
|
||||||
|
|
||||||
mov .oldval, -1
|
push cs
|
||||||
|
pop ds
|
||||||
|
|
||||||
.loop:
|
; Init du système GUI
|
||||||
call gui_process_all
|
call gui_init_system
|
||||||
GUI OBJ_GET_VAL, 6 ; slider
|
|
||||||
|
|
||||||
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 ---
|
; --- 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"
|
; Créer Bouton 1 "QUITTER"
|
||||||
GUI OBJ_CREATE, OBJ_TYPE_BUTTON_ROUNDED, 10, 10, 80, 16
|
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_SLIDER_SET_ATTR, ax, 10, 140, 10, 15
|
||||||
|
|
||||||
GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 400, 10, 16, 150
|
GUI OBJ_CREATE, OBJ_TYPE_SLIDER, 400, 10, 16, 150
|
||||||
GUI OBJ_SET_MODE, ax, SLIDER_VERTICAL
|
mov .slider, ax
|
||||||
GUI OBJ_SLIDER_SET_ATTR, ax, 0, 15, 15, 20
|
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
|
ret
|
||||||
|
|
||||||
; --- Données ROM ---
|
; --- Données ROM ---
|
||||||
|
|
|
||||||
|
|
@ -136,8 +136,6 @@ gui_api_slider_attr:
|
||||||
call gui_get_widget_ptr
|
call gui_get_widget_ptr
|
||||||
jc .err
|
jc .err
|
||||||
|
|
||||||
mov ax, .mode
|
|
||||||
mov byte [gs:si + widget.attr_min], al
|
|
||||||
mov ax, .min
|
mov ax, .min
|
||||||
mov word [gs:si + widget.attr_min], ax
|
mov word [gs:si + widget.attr_min], ax
|
||||||
mov ax, .max
|
mov ax, .max
|
||||||
|
|
@ -319,7 +317,6 @@ gui_api_get_val:
|
||||||
push bp
|
push bp
|
||||||
mov bp, sp
|
mov bp, sp
|
||||||
|
|
||||||
|
|
||||||
mov ax, .id ; ID
|
mov ax, .id ; ID
|
||||||
call gui_get_widget_ptr
|
call gui_get_widget_ptr
|
||||||
jc .err
|
jc .err
|
||||||
|
|
@ -335,9 +332,9 @@ gui_api_get_val:
|
||||||
%undef .id
|
%undef .id
|
||||||
|
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
; gui_api_get_val
|
; gui_api_set_val
|
||||||
; Arg1: ID
|
; Arg1: ID
|
||||||
; Out: AX = Attr Val
|
; Arg2: Value
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
%define .id word [bp+4]
|
%define .id word [bp+4]
|
||||||
%define .val word [bp+6]
|
%define .val word [bp+6]
|
||||||
|
|
@ -349,16 +346,14 @@ gui_api_set_val:
|
||||||
call gui_get_widget_ptr
|
call gui_get_widget_ptr
|
||||||
jc .err
|
jc .err
|
||||||
|
|
||||||
mov ax, [gs:si + widget.attr_val]
|
mov ax, .val
|
||||||
jmp .done
|
mov [gs:si + widget.attr_val], ax
|
||||||
|
|
||||||
.err:
|
.err:
|
||||||
mov ax, -1
|
|
||||||
.done:
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
%undef .id
|
%undef .id
|
||||||
|
%undef .val
|
||||||
|
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
; gui_api_destroy
|
; gui_api_destroy
|
||||||
|
|
@ -793,10 +788,6 @@ gui_logic_slider:
|
||||||
|
|
||||||
.do_drag:
|
.do_drag:
|
||||||
; --- LOGIQUE DE DÉPLACEMENT ---
|
; --- 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 ax, ax
|
||||||
xor bx, bx
|
xor bx, bx
|
||||||
|
|
@ -806,9 +797,6 @@ gui_logic_slider:
|
||||||
cmp byte [gs:si + widget.attr_mode], 2
|
cmp byte [gs:si + widget.attr_mode], 2
|
||||||
je .drag_v
|
je .drag_v
|
||||||
|
|
||||||
pop dx
|
|
||||||
pop bx
|
|
||||||
pop ax
|
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
@ -816,6 +804,7 @@ gui_logic_slider:
|
||||||
; 1. Thumb Width -> AX
|
; 1. Thumb Width -> AX
|
||||||
mov ax, [gs:si + widget.w]
|
mov ax, [gs:si + widget.w]
|
||||||
mov bl, [gs:si + widget.thumb_pct]
|
mov bl, [gs:si + widget.thumb_pct]
|
||||||
|
xor bh, bh ; Sécurité
|
||||||
mul bx
|
mul bx
|
||||||
mov bx, 100
|
mov bx, 100
|
||||||
div bx ; AX = Thumb Width
|
div bx ; AX = Thumb Width
|
||||||
|
|
@ -829,7 +818,13 @@ gui_logic_slider:
|
||||||
mov dx, [gs:si + widget.x] ; DX = Min Pos
|
mov dx, [gs:si + widget.x] ; DX = Min Pos
|
||||||
|
|
||||||
; 4. Target Pos = MouseX - Anchor
|
; 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]
|
sub ax, [gs:si + widget.attr_anchor]
|
||||||
jmp .apply_clamp
|
jmp .apply_clamp
|
||||||
|
|
||||||
|
|
@ -837,6 +832,7 @@ gui_logic_slider:
|
||||||
; 1. Thumb Height -> AX
|
; 1. Thumb Height -> AX
|
||||||
mov ax, [gs:si + widget.h]
|
mov ax, [gs:si + widget.h]
|
||||||
mov bl, [gs:si + widget.thumb_pct]
|
mov bl, [gs:si + widget.thumb_pct]
|
||||||
|
xor bh, bh ; Sécurité
|
||||||
mul bx
|
mul bx
|
||||||
mov bx, 100
|
mov bx, 100
|
||||||
div bx ; AX = Thumb Height
|
div bx ; AX = Thumb Height
|
||||||
|
|
@ -850,9 +846,13 @@ gui_logic_slider:
|
||||||
mov dx, [gs:si + widget.y] ; DX = Min Pos
|
mov dx, [gs:si + widget.y] ; DX = Min Pos
|
||||||
|
|
||||||
; 4. Target Pos = MouseY - Anchor
|
; 4. Target Pos = MouseY - Anchor
|
||||||
; MouseY est sur la pile (push dx initial), on le recupere via SP
|
; On recharge MouseY depuis la BDA pour être sûr
|
||||||
mov bp, sp
|
push ds
|
||||||
mov ax, [bp] ; [bp] = Saved DX (MouseY)
|
mov ax, BDA_DATA_SEG
|
||||||
|
mov ds, ax
|
||||||
|
mov ax, [BDA_MOUSE + mouse.y]
|
||||||
|
pop ds
|
||||||
|
|
||||||
sub ax, [gs:si + widget.attr_anchor]
|
sub ax, [gs:si + widget.attr_anchor]
|
||||||
|
|
||||||
.apply_clamp:
|
.apply_clamp:
|
||||||
|
|
@ -867,10 +867,6 @@ gui_logic_slider:
|
||||||
mov ax, bx
|
mov ax, bx
|
||||||
|
|
||||||
.apply_pos:
|
.apply_pos:
|
||||||
pop dx
|
|
||||||
pop bx
|
|
||||||
add sp, 2 ; Clean AX from stack
|
|
||||||
|
|
||||||
cmp ax, [gs:si + widget.attr_val]
|
cmp ax, [gs:si + widget.attr_val]
|
||||||
je .no_change
|
je .no_change
|
||||||
mov [gs:si + widget.attr_val], ax
|
mov [gs:si + widget.attr_val], ax
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue