[KERNEL] Fix resizing cursors for window borders

git-svn-id: svn://kolibrios.org@9850 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Rustem Gimadutdinov (rgimad) 2022-06-26 18:03:03 +00:00
parent 33ec897c11
commit f717a55cc1
2 changed files with 27 additions and 10 deletions

View File

@ -343,6 +343,12 @@ mouse._.move_handler:
call mouse._.find_sys_window_under_cursor call mouse._.find_sys_window_under_cursor
call mouse._.check_sys_window_actions call mouse._.check_sys_window_actions
; if now we are resizing the window, dont change the cursor
mov bl, [mouse.active_sys_window.action]
and bl, mouse.WINDOW_RESIZE_S_FLAG or mouse.WINDOW_RESIZE_W_FLAG or mouse.WINDOW_RESIZE_E_FLAG
test bl, bl
jnz .end1
cmp al, mouse.WINDOW_RESIZE_SW_FLAG cmp al, mouse.WINDOW_RESIZE_SW_FLAG
jne .not_sw jne .not_sw
; DEBUGF 1, "RESIZE SOUTH-WEST\n" ; DEBUGF 1, "RESIZE SOUTH-WEST\n"
@ -382,6 +388,7 @@ mouse._.move_handler:
mov eax, [def_cursor_hresize] mov eax, [def_cursor_hresize]
.set_resizing_cursor: .set_resizing_cursor:
; DEBUGF 1, ".set_resizing_cursor eax = %x\n", eax
; change cursor to resizing cursor ; change cursor to resizing cursor
shl esi, BSF sizeof.APPDATA shl esi, BSF sizeof.APPDATA
add esi, SLOT_BASE add esi, SLOT_BASE
@ -390,6 +397,7 @@ mouse._.move_handler:
cmp eax, [esi + APPDATA.cursor] cmp eax, [esi + APPDATA.cursor]
je @f je @f
; DEBUGF 1, "changing cursor to resizing\n"
xchg eax, [esi + APPDATA.cursor] ; set resizing cursor, prev cursor goes to eax xchg eax, [esi + APPDATA.cursor] ; set resizing cursor, prev cursor goes to eax
; save previous cursor (will be restored when we'll get out of the resizing area) ; save previous cursor (will be restored when we'll get out of the resizing area)
; if we change resizing cursor to resizing cursor then dont update previous cursor ; if we change resizing cursor to resizing cursor then dont update previous cursor
@ -407,6 +415,8 @@ mouse._.move_handler:
@@: @@:
jmp .end1 jmp .end1
.not_in_resize_area: .not_in_resize_area:
; DEBUGF 1, ".not_in_resize_area\n"
shl esi, BSF sizeof.APPDATA shl esi, BSF sizeof.APPDATA
add esi, SLOT_BASE add esi, SLOT_BASE
mov eax, [esi + APPDATA.temp_cursor] mov eax, [esi + APPDATA.temp_cursor]

View File

@ -109,9 +109,6 @@ save_draw_mouse:
push eax push eax
push ebx push ebx
; mov ecx, [Screen_Max_X]
; inc ecx
; mul ecx
mov eax, [d_width_calc_area + eax*4] mov eax, [d_width_calc_area + eax*4]
add eax, [_display.win_map] add eax, [_display.win_map]
@ -132,19 +129,29 @@ save_draw_mouse:
; window under cursor == active window ? ; window under cursor == active window ?
cmp eax, edx cmp eax, edx
je @F ; if yes then just draw cursor of app je @f
; check whether active window is being resized now:
mov bl, [mouse.active_sys_window.action] mov bl, [mouse.active_sys_window.action]
and bl, mouse.WINDOW_RESIZE_S_FLAG or mouse.WINDOW_RESIZE_W_FLAG or mouse.WINDOW_RESIZE_E_FLAG and bl, mouse.WINDOW_RESIZE_S_FLAG or mouse.WINDOW_RESIZE_W_FLAG or mouse.WINDOW_RESIZE_E_FLAG
test bl, bl test bl, bl
jz .set_def_cursor ; if active window is not being resized now jz .active_isnt_resizing
mov esi, [SLOT_BASE + eax + APPDATA.cursor] ; esi = cursor of active window, it is resizing cursor
jmp @f
.active_isnt_resizing:
; esi = cursor of active window: ; if cursor of window under the cursor is resizing cursor then draw it.
mov esi, [SLOT_BASE + eax + APPDATA.cursor] cmp esi, [def_cursor_hresize]
jmp .draw je @f
cmp esi, [def_cursor_vresize]
je @f
cmp esi, [def_cursor_dresize1]
je @f
cmp esi, [def_cursor_dresize2]
je @f
.set_def_cursor: ; set cursor of window under cursor
mov esi, [def_cursor] mov esi, [SLOT_BASE + edx + APPDATA.cursor]
cmp esi, [current_cursor] cmp esi, [current_cursor]
je .draw je .draw