documentation
This commit is contained in:
parent
9cd9d175e9
commit
bcc53c4bec
3 changed files with 62 additions and 11 deletions
49
doc/assets/API_GUI.md
Normal file
49
doc/assets/API_GUI.md
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Documentation de l'API GUI (Custom BIOS / ROM)
|
||||||
|
|
||||||
|
Cette documentation décrit le fonctionnement, les constantes et les fonctions de la bibliothèque d'interface graphique (GUI) en mode réel. Le système repose sur une table de dispatch (macro `GUI`) et une boucle d'événements pour gérer jusqu'à 32 widgets simultanément.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Constantes et Énumérations
|
||||||
|
|
||||||
|
Les définitions globales utilisées pour paramétrer les widgets.
|
||||||
|
|
||||||
|
### Limites du système
|
||||||
|
| Constante | Valeur | Description |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `GUI_MAX_WIDGETS` | `32` | Nombre maximum de widgets simultanés. |
|
||||||
|
| `GUI_CHECKBOX_SIZE` | `10` | Taille en pixels du carré d'une case à cocher. |
|
||||||
|
|
||||||
|
### États des Widgets (`GUI_STATE_*`)
|
||||||
|
| Constante | Valeur | Description |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `GUI_STATE_FREE` | `0` | Slot vide, mémoire disponible. |
|
||||||
|
| `GUI_STATE_NORMAL` | `1` | Affiché, au repos. |
|
||||||
|
| `GUI_STATE_HOVER` | `2` | La souris survole le widget. |
|
||||||
|
| `GUI_STATE_PRESSED`| `3` | Le clic de la souris est maintenu enfoncé sur le widget. |
|
||||||
|
| `GUI_STATE_DISABLED`| `4` | Grisé, aucune interaction possible. |
|
||||||
|
|
||||||
|
### Types d'Objets (`OBJ_TYPE_*`)
|
||||||
|
| Constante | Valeur | Description |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `OBJ_TYPE_LABEL` | `0` | Texte simple (non interactif). |
|
||||||
|
| `OBJ_TYPE_BUTTON` | `1` | Bouton rectangulaire classique. |
|
||||||
|
| `OBJ_TYPE_SLIDER` | `2` | Curseur / jauge de valeur. |
|
||||||
|
| `OBJ_TYPE_BUTTON_ROUNDED` | `3` | Bouton avec bords arrondis. |
|
||||||
|
| `OBJ_TYPE_CHECKBOX` | `4` | Case à cocher (Toggle). |
|
||||||
|
|
||||||
|
### Attributs de Modes (`SLIDER_*`)
|
||||||
|
| Constante | Valeur | Description |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `SLIDER_HORIZONTAL` | `1` | Le slider se déplace sur l'axe X. |
|
||||||
|
| `SLIDER_VERTICAL` | `2` | Le slider se déplace sur l'axe Y. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Appel de l'API : La Macro `GUI`
|
||||||
|
|
||||||
|
L'interaction avec les widgets doit se faire via la macro `GUI`. Elle empile les arguments dans le bon ordre et appelle la fonction correspondante via la table `gui_api_table`.
|
||||||
|
|
||||||
|
**Syntaxe NASM :**
|
||||||
|
```nasm
|
||||||
|
GUI ACTION_ID, arg1, arg2, ...
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
%define GUI_MAX_WIDGETS 32 ; Nombre max de widgets simultanés
|
%define GUI_MAX_WIDGETS 32 ; Nombre max de widgets simultanés
|
||||||
|
|
||||||
; Dimensions
|
; Dimensions
|
||||||
%define GUI_CHECKBOX_SIZE 10 ;
|
%define GUI_CHECKBOX_SIZE 10 ; 10x10 pixels
|
||||||
|
|
||||||
; --- Drapeaux & États ---
|
; --- Drapeaux & États ---
|
||||||
%define GUI_STATE_FREE 0 ; Le slot est vide (mémoire dispo)
|
%define GUI_STATE_FREE 0 ; Le slot est vide (mémoire dispo)
|
||||||
|
|
|
||||||
|
|
@ -392,18 +392,17 @@ draw_checkbox:
|
||||||
add ax, 4
|
add ax, 4
|
||||||
mov bx, [gs:si + widget.y]
|
mov bx, [gs:si + widget.y]
|
||||||
|
|
||||||
|
; centrage vertical
|
||||||
mov cx, [gs:si + widget.h]
|
mov cx, [gs:si + widget.h]
|
||||||
mov dx, [gs:si + widget.w]
|
|
||||||
|
|
||||||
sub cx, GUI_CHECKBOX_SIZE
|
sub cx, GUI_CHECKBOX_SIZE
|
||||||
shr cx, 1
|
shr cx, 1
|
||||||
add bx, cx ; Y1
|
add bx, cx ; bx = Y1 + (h/2)
|
||||||
|
|
||||||
mov cx, ax
|
mov cx, ax ; x
|
||||||
add cx, GUI_CHECKBOX_SIZE ; X2
|
add cx, GUI_CHECKBOX_SIZE ; cx = X2
|
||||||
|
|
||||||
mov dx, bx
|
mov dx, bx
|
||||||
add dx, GUI_CHECKBOX_SIZE ; Y2
|
add dx, GUI_CHECKBOX_SIZE ; Y2
|
||||||
|
|
||||||
; Sauvegarde coords pour le X
|
; Sauvegarde coords pour le X
|
||||||
push ax
|
push ax
|
||||||
|
|
@ -415,10 +414,16 @@ draw_checkbox:
|
||||||
GFX RECTANGLE_FILL, ax, bx, cx, dx, PATTERN_WHITE, 15, 0
|
GFX RECTANGLE_FILL, ax, bx, cx, dx, PATTERN_WHITE, 15, 0
|
||||||
GFX RECTANGLE, ax, bx, cx, dx, 0
|
GFX RECTANGLE, ax, bx, cx, dx, 0
|
||||||
|
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
|
||||||
; Check if checked
|
; Check if checked
|
||||||
cmp word [gs:si + widget.thumb_pos], 0
|
cmp word [gs:si + widget.thumb_pos], 0
|
||||||
je .draw_label
|
je .draw_label
|
||||||
|
|
||||||
|
|
||||||
; Dessin du X (Diagonales)
|
; Dessin du X (Diagonales)
|
||||||
add ax, 2
|
add ax, 2
|
||||||
add bx, 2
|
add bx, 2
|
||||||
|
|
@ -433,10 +438,7 @@ draw_checkbox:
|
||||||
GFX LINE, ax, dx, cx, bx, 0
|
GFX LINE, ax, dx, cx, bx, 0
|
||||||
|
|
||||||
.draw_label:
|
.draw_label:
|
||||||
pop dx
|
|
||||||
pop cx
|
|
||||||
pop bx
|
|
||||||
pop ax
|
|
||||||
|
|
||||||
; Dessin du texte à droite (BoxX2 + 6)
|
; Dessin du texte à droite (BoxX2 + 6)
|
||||||
add cx, 6
|
add cx, 6
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue