kernel: Window manager now manages the menu bar per-window
This commit is contained in:
parent
b71d10ab63
commit
3b813afa72
|
@ -27,17 +27,17 @@ start_event_manager_task:
|
||||||
event_manager_task_loop:
|
event_manager_task_loop:
|
||||||
call get_next_event
|
call get_next_event
|
||||||
|
|
||||||
; HACK: put menu bar events back into the system event queue
|
|
||||||
cmp r0, EVENT_TYPE_MENU_BAR_CLICK
|
|
||||||
ifz call new_event
|
|
||||||
cmp r0, EVENT_TYPE_MENU_CLICK
|
|
||||||
ifz call new_event
|
|
||||||
cmp r0, EVENT_TYPE_MENU_UPDATE
|
|
||||||
ifz call new_event
|
|
||||||
|
|
||||||
cmp.8 [active_window_offset], 0xFF
|
cmp.8 [active_window_offset], 0xFF
|
||||||
ifz rjmp event_manager_task_loop_end
|
ifz rjmp event_manager_task_loop_end
|
||||||
|
|
||||||
|
; menu bar
|
||||||
|
cmp r0, EVENT_TYPE_MENU_BAR_CLICK
|
||||||
|
ifz call add_event_to_active_window
|
||||||
|
cmp r0, EVENT_TYPE_MENU_CLICK
|
||||||
|
ifz call add_event_to_active_window
|
||||||
|
cmp r0, EVENT_TYPE_MENU_UPDATE
|
||||||
|
ifz call add_event_to_active_window
|
||||||
|
|
||||||
; mouse
|
; mouse
|
||||||
cmp r0, EVENT_TYPE_MOUSE_CLICK
|
cmp r0, EVENT_TYPE_MOUSE_CLICK
|
||||||
ifz call event_manager_task_mouse_event
|
ifz call event_manager_task_mouse_event
|
||||||
|
@ -120,6 +120,17 @@ event_manager_task_mouse_event_inactive_window_was_clicked:
|
||||||
call search_for_window_list_entry
|
call search_for_window_list_entry
|
||||||
mov.8 [active_window_offset], r0
|
mov.8 [active_window_offset], r0
|
||||||
|
|
||||||
|
; set the menu bar for the newly active window
|
||||||
|
call window_list_offset_to_struct
|
||||||
|
call get_window_menu_bar_root_struct
|
||||||
|
call enable_menu_bar
|
||||||
|
cmp r0, 0
|
||||||
|
ifz call disable_menu_bar
|
||||||
|
call clear_menu_bar
|
||||||
|
mov r1, 0xFFFFFFFF
|
||||||
|
cmp r0, 0
|
||||||
|
ifnz call draw_menu_bar_root_items
|
||||||
|
|
||||||
pop r2
|
pop r2
|
||||||
pop r1
|
pop r1
|
||||||
pop r0
|
pop r0
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
; data.8 overlay - overlay number of this window
|
; data.8 overlay - overlay number of this window
|
||||||
; data.8 reserved_1
|
; data.8 reserved_1
|
||||||
; data.16 reserved_2
|
; data.16 reserved_2
|
||||||
; data.32 reserved_3
|
; data.32 menu_bar_ptr - pointer to this window's menu bar root struct, or 0 for none
|
||||||
|
|
||||||
const WINDOW_STRUCT_SIZE: 32 ; 8 words = 32 bytes
|
const WINDOW_STRUCT_SIZE: 32 ; 8 words = 32 bytes
|
||||||
const TITLE_BAR_HEIGHT: 16
|
const TITLE_BAR_HEIGHT: 16
|
||||||
|
@ -25,6 +25,7 @@ const TITLE_BAR_HEIGHT: 16
|
||||||
; r3: window height, not including the title bar
|
; r3: window height, not including the title bar
|
||||||
; r4: initial X coordinate (top left corner of title bar)
|
; r4: initial X coordinate (top left corner of title bar)
|
||||||
; r5: initial Y coordinate (top left corner of title bar)
|
; r5: initial Y coordinate (top left corner of title bar)
|
||||||
|
; r6: pointer to menu bar root struct, or 0x00000000 for no menu bar
|
||||||
; outputs:
|
; outputs:
|
||||||
; none
|
; none
|
||||||
new_window:
|
new_window:
|
||||||
|
@ -53,6 +54,9 @@ new_window:
|
||||||
mov.16 [r10], r4
|
mov.16 [r10], r4
|
||||||
add r10, 2
|
add r10, 2
|
||||||
mov.16 [r10], r5
|
mov.16 [r10], r5
|
||||||
|
; menu bar root struct pointer
|
||||||
|
add r10, 6
|
||||||
|
mov [r10], r6
|
||||||
|
|
||||||
; then, allocate memory for the framebuffer
|
; then, allocate memory for the framebuffer
|
||||||
; the space required is width * (height + TITLE_BAR_HEIGHT) * 4
|
; the space required is width * (height + TITLE_BAR_HEIGHT) * 4
|
||||||
|
@ -123,6 +127,18 @@ new_window:
|
||||||
; then, draw the title bar
|
; then, draw the title bar
|
||||||
call draw_title_bar_to_window
|
call draw_title_bar_to_window
|
||||||
|
|
||||||
|
; then, draw the menu bar
|
||||||
|
push r0
|
||||||
|
call enable_menu_bar
|
||||||
|
mov r0, r6
|
||||||
|
cmp r0, 0
|
||||||
|
ifz call disable_menu_bar
|
||||||
|
call clear_menu_bar
|
||||||
|
mov r1, 0xFFFFFFFF
|
||||||
|
cmp r0, 0
|
||||||
|
ifnz call draw_menu_bar_root_items
|
||||||
|
pop r0
|
||||||
|
|
||||||
; finally, add this window to the window list
|
; finally, add this window to the window list
|
||||||
push r0
|
push r0
|
||||||
mov r0, 0x00000000
|
mov r0, 0x00000000
|
||||||
|
@ -182,6 +198,17 @@ destroy_window:
|
||||||
call search_for_nonempty_window_list_entry
|
call search_for_nonempty_window_list_entry
|
||||||
mov.8 [active_window_offset], r0
|
mov.8 [active_window_offset], r0
|
||||||
|
|
||||||
|
; set the menu bar for the newly active window
|
||||||
|
call window_list_offset_to_struct
|
||||||
|
call get_window_menu_bar_root_struct
|
||||||
|
call enable_menu_bar
|
||||||
|
cmp r0, 0
|
||||||
|
ifz call disable_menu_bar
|
||||||
|
call clear_menu_bar
|
||||||
|
mov r1, 0xFFFFFFFF
|
||||||
|
cmp r0, 0
|
||||||
|
ifnz call draw_menu_bar_root_items
|
||||||
|
|
||||||
pop r1
|
pop r1
|
||||||
pop r0
|
pop r0
|
||||||
ret
|
ret
|
||||||
|
@ -333,6 +360,17 @@ get_window_overlay_number:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; get the menu bar root struct used by a window
|
||||||
|
; inputs:
|
||||||
|
; r0: pointer to window struct
|
||||||
|
; outputs:
|
||||||
|
; r0: pointer to menu bar root struct, or 0x00000000 for no menu bar
|
||||||
|
get_window_menu_bar_root_struct:
|
||||||
|
add r0, 28
|
||||||
|
mov r0, [r0]
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
; draw a window's title bar
|
; draw a window's title bar
|
||||||
; inputs:
|
; inputs:
|
||||||
; r0: pointer to window struct
|
; r0: pointer to window struct
|
||||||
|
|
|
@ -17,6 +17,7 @@ about_dialog:
|
||||||
mov r3, 128
|
mov r3, 128
|
||||||
mov r4, 64
|
mov r4, 64
|
||||||
mov r5, 64
|
mov r5, 64
|
||||||
|
mov r6, 0
|
||||||
call new_window
|
call new_window
|
||||||
|
|
||||||
; fill the window with the fox32 purple color
|
; fill the window with the fox32 purple color
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
mov r3, 400
|
mov r3, 400
|
||||||
mov r4, 32
|
mov r4, 32
|
||||||
mov r5, 32
|
mov r5, 32
|
||||||
|
mov r6, 0
|
||||||
call new_window
|
call new_window
|
||||||
|
|
||||||
call get_unused_task_id
|
call get_unused_task_id
|
||||||
|
|
Loading…
Reference in New Issue
Block a user