96 lines
1.8 KiB
NASM
96 lines
1.8 KiB
NASM
; button widget routines
|
|
|
|
; button widget struct:
|
|
; data.32 next_ptr - pointer to next widget, or 0 for none
|
|
; data.32 id - the ID number of this widget
|
|
; data.32 type - the type of this widget
|
|
; data.32 text_ptr - pointer to null-terminated text string
|
|
; data.32 foreground_color - text foreground color
|
|
; data.32 background_color - button background color
|
|
; data.16 width - width of this button
|
|
; data.16 reserved
|
|
; data.16 x_pos - X coordinate of this widget
|
|
; data.16 y_pos - Y coordinate of this widget
|
|
|
|
const BUTTON_WIDGET_STRUCT_SIZE: 32 ; 8 words = 32 bytes
|
|
|
|
; draw a button widget to a window
|
|
; FIXME: this needs some major cleanup, this is like register soup
|
|
; inputs:
|
|
; r0: pointer to window struct
|
|
; r1: pointer to a null-terminated string
|
|
; r2: foreground color
|
|
; r3: background color
|
|
; r4: button width
|
|
; r5: X coordinate
|
|
; r6: Y coordinate
|
|
draw_button_widget:
|
|
push r0
|
|
push r1
|
|
push r2
|
|
push r3
|
|
push r4
|
|
push r5
|
|
push r10
|
|
push r20
|
|
push r30
|
|
push r31
|
|
|
|
push r1
|
|
mov r20, 0
|
|
draw_button_widget_strlen_loop:
|
|
inc r1
|
|
inc r20
|
|
cmp.8 [r1], 0
|
|
ifnz jmp draw_button_widget_strlen_loop
|
|
pop r1
|
|
|
|
mov r30, r5
|
|
mov r31, r4
|
|
div r4, 2
|
|
mul r20, 8
|
|
div r20, 2
|
|
sub r4, r20
|
|
add r5, r4
|
|
|
|
call get_window_overlay_number
|
|
mov r10, r0
|
|
|
|
push r1
|
|
push r2
|
|
push r3
|
|
push r4
|
|
push r5
|
|
mov r5, r0
|
|
mov r2, r31
|
|
mov r4, r3
|
|
mov r3, 16
|
|
mov r0, r30
|
|
mov r1, r6
|
|
call draw_filled_rectangle_to_overlay
|
|
pop r5
|
|
pop r4
|
|
pop r3
|
|
pop r2
|
|
pop r1
|
|
|
|
mov r0, r1
|
|
mov r4, r3
|
|
mov r3, r2
|
|
mov r1, r5
|
|
mov r2, r6
|
|
mov r5, r10
|
|
call draw_str_to_overlay
|
|
|
|
pop r31
|
|
pop r30
|
|
pop r20
|
|
pop r10
|
|
pop r5
|
|
pop r4
|
|
pop r3
|
|
pop r2
|
|
pop r1
|
|
pop r0
|
|
ret
|