[KERNEL] Graphics subsystem has been redesigned:

- removed the old cursor and the code for its operation
 - minor fixes in other kernel modules
 - new fields have been added to the display_t structure for further refactoring of the graphics subsystem.

git-svn-id: svn://kolibrios.org@9941 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Doczom 2023-09-22 16:31:40 +00:00
parent d9820a5748
commit 69f5ec5ac7
15 changed files with 408 additions and 1171 deletions

View File

@ -731,7 +731,7 @@ disk_scan_partitions:
; [ecx+0x40] is shorter than [ebx+0x1fe]: one-byte offset vs 4-bytes offset. ; [ecx+0x40] is shorter than [ebx+0x1fe]: one-byte offset vs 4-bytes offset.
lea ecx, [ebx+0x1be] ; ecx -> partition table lea ecx, [ebx+0x1be] ; ecx -> partition table
cmp word [ecx+0x40], 0xaa55 cmp word [ecx+0x40], 0xaa55
jnz .mbr_failed jnz .notmbr
; 8. The MBR is treated differently from EBRs. For MBR we additionally need to ; 8. The MBR is treated differently from EBRs. For MBR we additionally need to
; execute step 10 and possibly step 11. ; execute step 10 and possibly step 11.
test ebp, ebp test ebp, ebp

View File

@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -789,6 +789,15 @@ struct display_t
check_m_pixel dd ? check_m_pixel dd ?
bytes_per_pixel dd ? bytes_per_pixel dd ?
put_pixel dd ?
put_rect dd ?
put_image dd ?
put_line dd ?
get_pixel dd ?
get_rect dd ?
get_image dd ?
get_line dd ?
ends ends
struct DISPMODE struct DISPMODE

View File

@ -709,16 +709,16 @@ proc new_sys_threads
mov [slot], eax mov [slot], eax
mov esi, [current_slot] mov esi, [current_slot]
mov ebx, esi ;ebx=esi - pointer to extended information about current thread mov ebx, esi ;ebx=esi - pointer to information about current thread
mov edi, eax mov edi, eax
shl edi, BSF sizeof.APPDATA shl edi, BSF sizeof.APPDATA
add edi, SLOT_BASE add edi, SLOT_BASE
mov edx, edi ;edx=edi - pointer to extended infomation about new thread mov edx, edi ;edx=edi - pointer to infomation about new thread
mov ecx, sizeof.APPDATA/4 mov ecx, sizeof.APPDATA/4
xor eax, eax xor eax, eax
cld cld
rep stosd ;clean extended information about new thread rep stosd ;clean information about new thread
mov esi, ebx mov esi, ebx
mov edi, edx mov edi, edx
mov ecx, 11 mov ecx, 11

View File

@ -353,7 +353,6 @@ fpu_data_size = $ - fpu_data
BPSLine_calc_area rd MAX_SCREEN_HEIGHT BPSLine_calc_area rd MAX_SCREEN_HEIGHT
d_width_calc_area rd MAX_SCREEN_HEIGHT d_width_calc_area rd MAX_SCREEN_HEIGHT
mouseunder rd 16*24
mem_block_list rd 64*2 mem_block_list rd 64*2
mem_used_list rd 64*2 mem_used_list rd 64*2
@ -395,8 +394,6 @@ BANK_SWITCH dd ? ; reserved for vesa 1.2
BANK_RW dd ? BANK_RW dd ?
end if end if
MOUSE_PICTURE dd ?
def_cursor dd ? def_cursor dd ?
def_cursor_clock dd ? def_cursor_clock dd ?
def_cursor_hresize dd ? def_cursor_hresize dd ?
@ -404,7 +401,6 @@ def_cursor_vresize dd ?
def_cursor_dresize1 dd ? def_cursor_dresize1 dd ?
def_cursor_dresize2 dd ? def_cursor_dresize2 dd ?
current_cursor dd ? current_cursor dd ?
hw_cursor dd ?
cur_saved_base dd ? cur_saved_base dd ?
cur.lock dd ? ; 1 - lock update, 2- hide cur.lock dd ? ; 1 - lock update, 2- hide

View File

@ -95,13 +95,13 @@ syscall_button:
; make coordinates clientbox-relative ; make coordinates clientbox-relative
push eax push eax
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
rol ebx, 16 rol ebx, 16
add bx, word[window_data + eax + WDATA.clientbox.left] add bx, word[eax + WDATA.clientbox.left]
rol ebx, 16 rol ebx, 16
rol ecx, 16 rol ecx, 16
add cx, word[window_data + eax + WDATA.clientbox.top] add cx, word[eax + WDATA.clientbox.top]
rol ecx, 16 rol ecx, 16
pop eax pop eax
@ -173,10 +173,10 @@ syscall_button:
dec ebp dec ebp
shr ebx, 16 shr ebx, 16
shr ecx, 16 shr ecx, 16
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
add ebx, [eax + window_data + WDATA.box.left] add ebx, [eax + WDATA.box.left]
add ecx, [eax + window_data + WDATA.box.top] add ecx, [eax + WDATA.box.top]
mov eax, ebx mov eax, ebx
inc eax inc eax
mov edx, ebx mov edx, ebx

View File

@ -1,14 +1,12 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2010-2023. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision$ $Revision$
include 'mousepointer.inc'
;================================ ;================================
;/////// public functions /////// ;/////// public functions ///////
;================================ ;================================

View File

@ -1,250 +0,0 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision$
iglobal
align 4
mousepointer:
db 0x00,0x00,0x00,0x74,0x74,0x74,0x6e,0x6e,0x6e,0x6f
db 0x6f,0x6f,0x71,0x71,0x71,0x75,0x75,0x75,0x79,0x79
db 0x79,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
db 0xc0,0xc0,0x00,0x00,0x00,0x54,0x54,0x54,0x57,0x57
db 0x57,0x5f,0x5f,0x5f,0x68,0x68,0x68,0x71,0x71,0x71
db 0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x47,0x47,0x47,0x50
db 0x50,0x50,0x5b,0x5b,0x5b,0x67,0x67,0x67,0x70,0x70
db 0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3f,0x3f,0x3f
db 0x4b,0x4b,0x4b,0x59,0x59,0x59,0x66,0x66,0x66,0x70
db 0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e
db 0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3a,0x3a
db 0x3a,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66,0x66
db 0x70,0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e
db 0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x39
db 0x39,0x39,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66
db 0x66,0x71,0x71,0x71,0x78,0x78,0x78,0x7c,0x7c,0x7c
db 0x7e,0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0xff
db 0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00
db 0x39,0x39,0x39,0x4a,0x4a,0x4a,0x5a,0x5a,0x5a,0x68
db 0x68,0x68,0x72,0x72,0x72,0x79,0x79,0x79,0x7d,0x7d
db 0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00
db 0x00,0x3c,0x3c,0x3c,0x4e,0x4e,0x4e,0x5e,0x5e,0x5e
db 0x6b,0x6b,0x6b,0x75,0x75,0x75,0x7a,0x7a,0x7a,0x7e
db 0x7e,0x7e,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00
db 0x00,0x00,0x43,0x43,0x43,0x55,0x55,0x55,0x64,0x64
db 0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d
db 0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0
db 0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x4e,0x4e,0x4e,0x5f,0x5f,0x5f,0x6d
db 0x6d,0x6d,0x76,0x76,0x76,0x7c,0x7c,0x7c,0x80,0x80
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x14
db 0x14,0x14,0x1b,0x1b,0x1b,0x29,0x29,0x29,0x3a,0x3a
db 0x3a,0x4c,0x4c,0x4c,0x5d,0x5d,0x5d,0x6c,0x6c,0x6c
db 0x75,0x75,0x75,0x7b,0x7b,0x7b,0x80,0x80,0x80,0xc0
db 0xc0,0xc0,0x00,0x00,0x00,0x2f,0x2f,0x2f,0x80,0x80
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
db 0x21,0x21,0x21,0x2e,0x2e,0x2e,0x40,0x40,0x40,0x52
db 0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f,0x77,0x77
db 0x77,0x7c,0x7c,0x7c,0x80,0x80,0x80,0x00,0x00,0x00
db 0x47,0x47,0x47,0x3b,0x3b,0x3b,0x80,0x80,0x80,0xff
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x25,0x25
db 0x25,0x30,0x30,0x30,0x42,0x42,0x42,0x54,0x54,0x54
db 0x64,0x64,0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
db 0x7d,0x7d,0x00,0x00,0x00,0x62,0x62,0x62,0x52,0x52
db 0x52,0x4a,0x4a,0x4a,0x43,0x43,0x43,0x80,0x80,0x80
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x33
db 0x33,0x33,0x42,0x42,0x42,0x54,0x54,0x54,0x64,0x64
db 0x64,0x71,0x71,0x71,0x79,0x79,0x79,0x7d,0x7d,0x7d
db 0x72,0x72,0x72,0x6b,0x6b,0x6b,0x5f,0x5f,0x5f,0x5a
db 0x5a,0x5a,0x54,0x54,0x54,0x80,0x80,0x80,0xff,0xff
db 0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x35,0x35,0x35
db 0x41,0x41,0x41,0x53,0x53,0x53,0x63,0x63,0x63,0x70
db 0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d,0x77,0x77
db 0x77,0x73,0x73,0x73,0x6c,0x6c,0x6c,0x68,0x68,0x68
db 0x62,0x62,0x62,0x5a,0x5a,0x5a,0x80,0x80,0x80,0xff
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x41,0x41
db 0x41,0x52,0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f
db 0x78,0x78,0x78,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x79
db 0x79,0x79,0x74,0x74,0x74,0x72,0x72,0x72,0x6e,0x6e
db 0x6e,0x66,0x66,0x66,0x80,0x80,0x80,0xc0,0xc0,0xc0
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x44,0x44,0x44,0x52
db 0x52,0x52,0x62,0x62,0x62,0x6e,0x6e,0x6e,0x77,0x77
db 0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7c,0x7c,0x7c
db 0x7a,0x7a,0x7a,0x79,0x79,0x79,0x75,0x75,0x75,0x6f
db 0x6f,0x6f,0x65,0x65,0x65,0x00,0x00,0x00,0x00,0x00
db 0x00,0x48,0x48,0x48,0x4b,0x4b,0x4b,0x56,0x56,0x56
db 0x65,0x65,0x65,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
db 0x7d,0x7d,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e
db 0x7e,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76,0x76
db 0x6f,0x6f,0x6f,0x65,0x65,0x65,0x5c,0x5c,0x5c,0x56
db 0x56,0x56,0x58,0x58,0x58,0x60,0x60,0x60,0x6b,0x6b
db 0x6b,0x73,0x73,0x73,0x7a,0x7a,0x7a,0x7d,0x7d,0x7d
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f
db 0x7f,0x7f,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76
db 0x76,0x70,0x70,0x70,0x6a,0x6a,0x6a,0x66,0x66,0x66
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x77
db 0x77,0x77,0x73,0x73,0x73,0x71,0x71,0x71,0x71,0x71
db 0x71,0x74,0x74,0x74,0x78,0x78,0x78,0x7b,0x7b,0x7b
db 0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c
db 0x7a,0x7a,0x7a,0x78,0x78,0x78,0x78,0x78,0x78,0x7a
db 0x7a,0x7a,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f
db 0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
db 0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e
db 0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e
db 0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
db 0x80,0x80
mousepointer1:
db 0xff,0xff,0xff,0x06,0x06,0x06,0x0a,0x0a
db 0x0a,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0xff,0xff,0xff,0xff,0xff,0xff,0x19,0x19,0x19,0x16
db 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0x2e,0x2e
db 0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f
db 0x3f,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x47
db 0x47,0x47,0x2c,0x2c,0x2c,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0x47,0x47,0x47,0x29,0x29,0x29
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0x40,0x40,0x40,0x23,0x23
db 0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xaa,0xaa,0xaa,0x9f,0x9f,0x9f,0x8c,0x8c,0x8c
db 0x70,0x70,0x70,0x4f,0x4f,0x4f,0x30,0x30,0x30,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x8f,0x8f
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0xff,0x9c,0x9c,0x9c,0x87,0x87,0x87,0x6c,0x6c
db 0x6c,0x4f,0x4f,0x4f,0x32,0x32,0x32,0x19,0x19,0x19
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
db 0xff,0xff,0x69,0x69,0x69,0x84,0x84,0x84,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0x92,0x92,0x92,0x79,0x79,0x79,0x59,0x59,0x59,0x3c
db 0x3c,0x3c,0x24,0x24,0x24,0x11,0x11,0x11,0x00,0x00
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x37,0x37,0x37
db 0x5d,0x5d,0x5d,0x70,0x70,0x70,0x76,0x76,0x76,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0xff,0x75,0x75,0x75,0x51,0x51,0x51,0x31,0x31,0x31
db 0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x16,0x16,0x16,0x2d,0x2d,0x2d,0x49,0x49
db 0x49,0x53,0x53,0x53,0x54,0x54,0x54,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x78
db 0x78,0x78,0x54,0x54,0x54,0x30,0x30,0x30,0x16,0x16
db 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x0f,0x0f,0x0f,0x1f,0x1f,0x1f,0x30,0x30,0x30,0x33
db 0x33,0x33,0x33,0x33,0x33,0x3b,0x3b,0x3b,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
db 0x62,0x62,0x62,0x3b,0x3b,0x3b,0x1c,0x1c,0x1c,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08
db 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x24,0x24,0x24,0xff,0xff,0xff,0xff
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6e,0x6e
db 0x6e,0x48,0x48,0x48,0x25,0x25,0x25,0x0e,0x0e,0x0e
db 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00
db 0x00,0x00,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x00,0x00
db 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0xff,0xff,0xff
db 0xff,0xff,0xff,0x7c,0x7c,0x7c,0x71,0x71,0x71,0x50
db 0x50,0x50,0x2b,0x2b,0x2b,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x04,0x04,0x00
db 0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x36,0x56,0x56
db 0x56,0x69,0x69,0x69,0x64,0x64,0x64,0x4a,0x4a,0x4a
db 0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x05,0x05
db 0x00,0x00,0x00,0x21,0x21,0x21,0x39,0x39,0x39,0x49
db 0x49,0x49,0x48,0x48,0x48,0x35,0x35,0x35,0x1d,0x1d
db 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00
db 0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x27,0x27,0x27
db 0x27,0x27,0x27,0x1d,0x1d,0x1d,0x0f,0x0f,0x0f,0x06
db 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
db 0x00,0x00,0x00,0x00
endg

View File

@ -186,7 +186,7 @@ syscall_drawline:
align 4 align 4
; system function 48 ; system function 48
syscall_display_settings: syscall_display_settings:
cmp ebx, 13 cmp ebx, .ftable.size-1
ja .ret ja .ret
jmp dword[.ftable + ebx*4] jmp dword[.ftable + ebx*4]
@ -206,6 +206,7 @@ dd .setFontSmoothing
dd .getFontSize dd .getFontSize
dd .setFontSize dd .setFontSize
dd .setSkinUnicode dd .setSkinUnicode
.ftable.size = ($ - .ftable)/4
.redrawWholeScreen: .redrawWholeScreen:
xor eax, eax xor eax, eax
@ -223,7 +224,7 @@ dd .setSkinUnicode
mov eax, [_display.height] mov eax, [_display.height]
dec eax dec eax
mov [draw_limits.bottom], eax mov [draw_limits.bottom], eax
mov eax, window_data mov eax, window_data ; TODO: check pointer
jmp redrawscreen jmp redrawscreen
.setButtonStyle: .setButtonStyle:
@ -406,18 +407,18 @@ align 4
;> ebx = 1 ;> ebx = 1
;> ecx = scale power (resulting scale is 2^ebx) ;> ecx = scale power (resulting scale is 2^ebx)
syscall_set_window_shape: syscall_set_window_shape:
mov edi, [current_slot_idx] mov edi, [current_slot]
shl edi, BSF sizeof.WDATA mov edi, [edi + APPDATA.window]
test ebx, ebx test ebx, ebx
jne .shape_scale jne .shape_scale
mov [window_data + edi + WDATA.shape], ecx mov [edi + WDATA.shape], ecx
;-------------------------------------- ;--------------------------------------
align 4 align 4
.shape_scale: .shape_scale:
dec ebx dec ebx
jnz .exit jnz .exit
mov [window_data + edi + WDATA.shape_scale], ecx mov [edi + WDATA.shape_scale], ecx
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
@ -427,9 +428,8 @@ align 4
align 4 align 4
; system function 67 ; system function 67
syscall_move_window: syscall_move_window:
mov edi, [current_slot_idx] mov edi, [current_slot]
shl edi, BSF sizeof.WDATA mov edi, [edi + APPDATA.window]
add edi, window_data
test [edi + WDATA.fl_wdrawn], 1 test [edi + WDATA.fl_wdrawn], 1
jz .exit jz .exit
@ -556,11 +556,11 @@ align 4
.next_window: .next_window:
movzx edi, word[WIN_POS + esi * 2] movzx edi, word[WIN_POS + esi * 2]
shl edi, BSF sizeof.WDATA shl edi, BSF sizeof.WDATA
add edi, window_data
test byte [window_data + edi + WDATA.fl_wstate], WSTATE_USED test byte [edi + WDATA.fl_wstate], WSTATE_USED
jz .skip_window jz .skip_window
add edi, window_data
test [edi + WDATA.fl_wstate], WSTATE_MINIMIZED test [edi + WDATA.fl_wstate], WSTATE_MINIMIZED
jnz .skip_window jnz .skip_window
@ -1245,7 +1245,7 @@ window_check_events:
dec bl dec bl
jnz @f jnz @f
call minimize_window call minimize_window
jmp .exit ret
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@: @@:
@ -1614,9 +1614,8 @@ align 4
align 4 align 4
;< edx = pointer to WDATA struct ;< edx = pointer to WDATA struct
window._.sys_set_window: window._.sys_set_window:
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
add eax, window_data
; save window colors ; save window colors
mov [eax + WDATA.cl_workarea], edx mov [eax + WDATA.cl_workarea], edx
mov [eax + WDATA.cl_titlebar], esi mov [eax + WDATA.cl_titlebar], esi
@ -1847,18 +1846,20 @@ end virtual
mov edi, esi mov edi, esi
shl edi, BSF sizeof.WDATA shl edi, BSF sizeof.WDATA
add edi, window_data
cmp esi, 1 cmp esi, 1
jz .check_for_shaped_window jz .check_for_shaped_window
cmp [window_data + edi + WDATA.box.width], 0 cmp [edi + WDATA.box.width], 0
jnz .check_for_shaped_window jnz .check_for_shaped_window
cmp [window_data + edi + WDATA.box.height], 0
cmp [edi + WDATA.box.height], 0
jz .exit jz .exit
;-------------------------------------- ;--------------------------------------
align 4 align 4
.check_for_shaped_window: .check_for_shaped_window:
cmp [window_data + edi + WDATA.shape], 0 cmp [edi + WDATA.shape], 0
jne .shaped_window jne .shaped_window
; get x&y size ; get x&y size
@ -1908,7 +1909,7 @@ align 4
inc ecx inc ecx
inc edx inc edx
push [window_data + edi + WDATA.shape_scale] ; push scale first -> for loop push [edi + WDATA.shape_scale] ; push scale first -> for loop
; get WinMap start -> ebp ; get WinMap start -> ebp
push eax push eax
@ -1918,7 +1919,7 @@ align 4
add eax, [_display.win_map] add eax, [_display.win_map]
mov ebp, eax mov ebp, eax
mov edi, [window_data + edi + WDATA.shape] mov edi, [edi + WDATA.shape]
pop eax pop eax
; eax = x_start ; eax = x_start
@ -2227,9 +2228,8 @@ window._.draw_window_caption:
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@: @@:
mov edx, [current_slot_idx] mov edx, [current_slot]
shl edx, BSF sizeof.WDATA mov edx, [edx + APPDATA.window]
add edx, window_data
movzx ebx, [edx + WDATA.fl_wstyle] movzx ebx, [edx + WDATA.fl_wstyle]
and bl, 0x0F and bl, 0x0F
cmp bl, 3 cmp bl, 3
@ -2263,17 +2263,17 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.2: .2:
mov edi, [current_slot_idx] mov edi, [current_slot]
shl edi, BSF sizeof.WDATA mov edi, [edi + APPDATA.window]
test [window_data + edi + WDATA.fl_wstyle], WSTYLE_HASCAPTION test [edi + WDATA.fl_wstyle], WSTYLE_HASCAPTION
jz .exit jz .exit
mov edx, [window_data + edi + WDATA.caption] mov edx, [edi + WDATA.caption]
or edx, edx or edx, edx
jz .exit jz .exit
mov ebp, [edi + window_data + WDATA.box.left - 2] mov ebp, [edi + WDATA.box.left - 2]
mov bp, word[edi + window_data + WDATA.box.top] mov bp, word[edi + WDATA.box.top]
movzx eax, [edi + window_data + WDATA.fl_wstyle] movzx eax, [edi + WDATA.fl_wstyle]
and al, 0x0F and al, 0x0F
cmp al, 3 cmp al, 3
je .skinned je .skinned
@ -2284,7 +2284,7 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.skinned: .skinned:
movzx eax, word[edi + window_data + WDATA.box.width] movzx eax, word[edi + WDATA.box.width]
sub ax, [_skinmargins.left] sub ax, [_skinmargins.left]
sub ax, [_skinmargins.right] sub ax, [_skinmargins.right]
js .exit js .exit
@ -2301,7 +2301,7 @@ align 4
.not_skinned: .not_skinned:
cmp al, 1 cmp al, 1
je .exit je .exit
movzx eax, word[edi + window_data + WDATA.box.width] movzx eax, word[edi + WDATA.box.width]
sub eax, 16 sub eax, 16
js .exit js .exit
mov ebx, 80002h mov ebx, 80002h
@ -2310,7 +2310,7 @@ align 4
mov esi, eax mov esi, eax
add ebx, ebp add ebx, ebp
mov ecx, [common_colours + 16] mov ecx, [common_colours + 16]
mov al, [window_data + edi + WDATA.captionEncoding] mov al, [edi + WDATA.captionEncoding]
test al, al test al, al
jnz @f jnz @f
mov al, 1 mov al, 1
@ -2368,19 +2368,19 @@ align 4
; void __fastcall get_window_rect(struct RECT* rc); ; void __fastcall get_window_rect(struct RECT* rc);
; ecx = pointer to RECT ; ecx = pointer to RECT
window._.get_rect: window._.get_rect:
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
mov edx, [eax + window_data + WDATA.box.left] mov edx, [eax + WDATA.box.left]
mov [ecx+RECT.left], edx mov [ecx+RECT.left], edx
add edx, [eax + window_data + WDATA.box.width] add edx, [eax + WDATA.box.width]
mov [ecx+RECT.right], edx mov [ecx+RECT.right], edx
mov edx, [eax +window_data + WDATA.box.top] mov edx, [eax + WDATA.box.top]
mov [ecx+RECT.top], edx mov [ecx+RECT.top], edx
add edx, [eax + window_data + WDATA.box.height] add edx, [eax + WDATA.box.height]
mov [ecx+RECT.bottom], edx mov [ecx+RECT.bottom], edx
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------

View File

@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -54,46 +54,7 @@ draw_mouse_under:
movzx ebx, word [Y_UNDER] movzx ebx, word [Y_UNDER]
stdcall [_display.restore_cursor], eax, ebx stdcall [_display.restore_cursor], eax, ebx
popad popad
ret
@@: @@:
pushad
xor ecx, ecx
xor edx, edx
.mres:
movzx eax, word [X_UNDER]
movzx ebx, word [Y_UNDER]
add eax, ecx
add ebx, edx
push ecx
push edx
push eax
push ebx
mov eax, edx
shl eax, 6
shl ecx, 2
add eax, ecx
add eax, mouseunder
mov ecx, [eax]
pop ebx
pop eax
mov edi, 1 ; force
or ecx, 0x04000000 ; don't save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop edx
pop ecx
inc ecx
cmp ecx, 16
jnz .mres
xor ecx, ecx
inc edx
cmp edx, 24
jnz .mres
popad
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -101,7 +62,7 @@ draw_mouse_under:
align 4 align 4
save_draw_mouse: save_draw_mouse:
cmp [_display.move_cursor], 0 cmp [_display.move_cursor], 0
je .no_hw_cursor je .exit
pushad pushad
mov [X_UNDER], ax mov [X_UNDER], ax
@ -158,8 +119,10 @@ save_draw_mouse:
je .draw je .draw
@@: @@:
push esi cmp [_display.select_cursor], 0
call [_display.select_cursor] jz .error
stdcall [_display.select_cursor], esi
mov [current_cursor], esi mov [current_cursor], esi
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -177,276 +140,9 @@ align 4
; ret ; ret
;-------------------------------------- ;--------------------------------------
align 4 align 4
.no_hw_cursor: .error:
pushad
; save & draw
mov [X_UNDER], ax
mov [Y_UNDER], bx
push eax
push ebx
mov ecx, 0
mov edx, 0
;--------------------------------------
align 4
.drm:
push eax
push ebx
push ecx
push edx
; helloworld
push ecx
add eax, ecx ; save picture under mouse
add ebx, edx
push ecx
or ecx, 0x04000000 ; don't load to mouseunder area
push eax ebx edx edi
call [GETPIXEL]
pop edi edx ebx eax
mov [COLOR_TEMP], ecx
pop ecx
mov eax, edx
shl eax, 6
shl ecx, 2
add eax, ecx
add eax, mouseunder
mov ebx, [COLOR_TEMP]
and ebx, 0xffffff
mov [eax], ebx
pop ecx
mov edi, edx ; y cycle
shl edi, 4 ; *16 bytes per row
add edi, ecx ; x cycle
mov esi, edi
add edi, esi
add edi, esi ; *3
add edi, [MOUSE_PICTURE] ; we have our str address
mov esi, edi
add esi, 16*24*3
push ecx
mov ecx, [COLOR_TEMP]
call combine_colors
and ecx, 0xffffff
mov [MOUSE_COLOR_MEM], ecx
pop ecx
pop edx
pop ecx
pop ebx
pop eax
add eax, ecx ; we have x coord+cycle
add ebx, edx ; and y coord+cycle
push ecx
mov ecx, [MOUSE_COLOR_MEM]
mov edi, 1 ; force
or ecx, 0x04000000 ; don't save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop ecx
mov ebx, [esp+0] ; pure y coord again
mov eax, [esp+4] ; and x
inc ecx ; +1 cycle
cmp ecx, 16 ; if more than 16
jnz .drm
xor ecx, ecx
inc edx
cmp edx, 24
jnz .drm
add esp, 8
popad popad
ret .exit:
;-----------------------------------------------------------------------------
align 4
combine_colors:
; in
; ecx - color ( 00 RR GG BB )
; edi - ref to new color byte
; esi - ref to alpha byte
;
; out
; ecx - new color ( roughly (ecx*[esi]>>8)+([edi]*[esi]>>8) )
push eax
push ebx
push edx
push ecx
xor ecx, ecx
; byte 0
mov eax, 0xff
sub al, [esi+0]
mov ebx, [esp]
shr ebx, 16
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
xor eax, eax
xor ebx, ebx
mov al, [edi+0]
mov bl, [esi+0]
mul ebx
shr eax, 8
add ecx, eax
shl ecx, 8
; byte 1
mov eax, 0xff
sub al, [esi+1]
mov ebx, [esp]
shr ebx, 8
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
xor eax, eax
xor ebx, ebx
mov al, [edi+1]
mov bl, [esi+1]
mul ebx
shr eax, 8
add ecx, eax
shl ecx, 8
; byte 2
mov eax, 0xff
sub al, [esi+2]
mov ebx, [esp]
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
xor eax, eax
xor ebx, ebx
mov al, [edi+2]
mov bl, [esi+2]
mul ebx
shr eax, 8
add ecx, eax
pop eax
pop edx
pop ebx
pop eax
ret
;-----------------------------------------------------------------------------
align 4
check_mouse_area_for_getpixel:
; in:
; eax = x
; ebx = y
; out:
; ecx = new color
push eax ebx
; check for Y
xor ecx, ecx
mov cx, [Y_UNDER] ; [MOUSE_Y]
cmp ebx, ecx
jb .no_mouse_area
add ecx, 23 ; mouse cursor Y size
cmp ebx, ecx
ja .no_mouse_area
; offset Y
sub bx, [Y_UNDER] ; [MOUSE_Y]
;--------------------------------------
; check for X
xor ecx, ecx
mov cx, [X_UNDER] ; [MOUSE_X]
cmp eax, ecx
jb .no_mouse_area
add ecx, 15 ; mouse cursor X size
cmp eax, ecx
ja .no_mouse_area
; offset X
sub ax, [X_UNDER] ; [MOUSE_X]
;--------------------------------------
; eax = offset x
; ebx = offset y
shl ebx, 6 ;y
shl eax, 2 ;x
add eax, ebx
add eax, mouseunder
mov ecx, [eax]
and ecx, 0xffffff
or ecx, 0xff000000
pop ebx eax
ret
.no_mouse_area:
xor ecx, ecx
pop ebx eax
ret
;-----------------------------------------------------------------------------
align 4
check_mouse_area_for_putpixel:
; in:
; ecx = x shl 16 + y
; eax = color
; out:
; eax = new color
push eax
; check for Y
mov ax, [Y_UNDER] ; [MOUSE_Y]
cmp cx, ax
jb .no_mouse_area
add ax, 23 ; mouse cursor Y size
cmp cx, ax
ja .no_mouse_area
; offset Y
sub cx, [Y_UNDER] ; [MOUSE_Y]
mov ax, cx
shl eax, 16
; check for X
mov ax, [X_UNDER] ; [MOUSE_X]
shr ecx, 16
cmp cx, ax
jb .no_mouse_area
add ax, 15 ; mouse cursor X size
cmp cx, ax
ja .no_mouse_area
; offset X
sub cx, [X_UNDER] ; [MOUSE_X]
mov ax, cx
; eax = (offset y) shl 16 + (offset x)
pop ecx
push eax ebx
mov ebx, eax
shr ebx, 16 ; y
and eax, 0xffff ; x
shl ebx, 6
shl eax, 2
add eax, ebx
add eax, mouseunder
and ecx, 0xFFFFFF
mov [eax], ecx
pop ebx eax
push esi edi
rol eax, 16
movzx edi, ax ; y cycle
shl edi, 4 ; *16 bytes per row
shr eax, 16
add edi, eax ; x cycle
lea edi, [edi*3]
add edi, [MOUSE_PICTURE] ; we have our str address
mov esi, edi
add esi, 16*24*3
call combine_colors
pop edi esi
mov eax, ecx
ret
.no_mouse_area:
pop eax
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -461,25 +157,22 @@ __sys_draw_pointer:
cmp [redrawmouse_unconditional], 0 cmp [redrawmouse_unconditional], 0
je @f je @f
mov [redrawmouse_unconditional], 0 mov [redrawmouse_unconditional], 0
jmp redrawmouse jmp .redrawmouse
@@: @@:
cmp eax, ecx cmp eax, ecx
jne redrawmouse jne .redrawmouse
cmp ebx, edx cmp ebx, edx
je nodmp je .nodmp
;-------------------------------------- ;--------------------------------------
align 4 align 4
redrawmouse: .redrawmouse:
pushfd pushfd
cli cli
call draw_mouse_under call draw_mouse_under
call save_draw_mouse call save_draw_mouse
; mov eax, [_display.select_cursor]
; test eax, eax
; jz @f
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
jne @f jne @f
@ -499,7 +192,7 @@ redrawmouse:
mov [X_UNDER_sub_CUR_hot_x_add_curh], ax mov [X_UNDER_sub_CUR_hot_x_add_curh], ax
@@: @@:
popfd popfd
nodmp: .nodmp:
popad popad
ret ret

View File

@ -1901,15 +1901,12 @@ sys_midi:
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
sys_end: sys_end:
cmp [_display.select_cursor], 0
je @f
; restore default cursor before killing ; restore default cursor before killing
pusha pusha
mov ecx, [current_slot] mov ecx, [current_slot]
mov ecx, [ecx + APPDATA.window] mov ecx, [ecx + APPDATA.window]
call restore_default_cursor_before_killing call restore_default_cursor_before_killing
popa popa
@@:
;-------------------------------------- ;--------------------------------------
; kill all sockets this process owns ; kill all sockets this process owns
pusha pusha
@ -1954,8 +1951,10 @@ restore_default_cursor_before_killing:
cmp esi, [current_cursor] cmp esi, [current_cursor]
je @f je @f
push esi cmp [_display.select_cursor], 0
call [_display.select_cursor] jz @f
stdcall [_display.select_cursor], esi
mov [current_cursor], esi mov [current_cursor], esi
@@: @@:
mov [redrawmouse_unconditional], 1 mov [redrawmouse_unconditional], 1
@ -2062,8 +2061,6 @@ sysfn_terminate: ; 18.2 = TERMINATE
call socket_process_end call socket_process_end
popa popa
;-------------------------------------- ;--------------------------------------
cmp [_display.select_cursor], 0
je .restore_end
; restore default cursor before killing ; restore default cursor before killing
pusha pusha
mov ecx, [esp+32] mov ecx, [esp+32]
@ -2075,7 +2072,6 @@ sysfn_terminate: ; 18.2 = TERMINATE
call restore_default_cursor_before_killing call restore_default_cursor_before_killing
@@: @@:
popa popa
.restore_end:
;-------------------------------------- ;--------------------------------------
;call MEM_Heap_Lock ;guarantee that process isn't working with heap ;call MEM_Heap_Lock ;guarantee that process isn't working with heap
mov [ecx + APPDATA.state], TSTATE_ZOMBIE; clear possible i40's mov [ecx + APPDATA.state], TSTATE_ZOMBIE; clear possible i40's
@ -2557,8 +2553,7 @@ sys_cpuusage:
lea eax, [edx-1] lea eax, [edx-1]
stosd stosd
mov edx, ecx mov edx, [SLOT_BASE + ecx + APPDATA.window]
shr edx, (BSF sizeof.APPDATA - BSF sizeof.WDATA)
; +30: PID/TID ; +30: PID/TID
mov eax, [SLOT_BASE + ecx + APPDATA.tid] mov eax, [SLOT_BASE + ecx + APPDATA.tid]
@ -2566,7 +2561,7 @@ sys_cpuusage:
; window position and size ; window position and size
push esi push esi
lea esi, [window_data + edx + WDATA.box] lea esi, [edx + WDATA.box]
movsd movsd
movsd movsd
movsd movsd
@ -2577,14 +2572,14 @@ sys_cpuusage:
stosd stosd
; Window client area box ; Window client area box
lea esi, [window_data + edx + WDATA.clientbox] lea esi, [edx + WDATA.clientbox]
movsd movsd
movsd movsd
movsd movsd
movsd movsd
; Window state ; Window state
mov al, [window_data + edx + WDATA.fl_wstate] mov al, [edx + WDATA.fl_wstate]
stosb stosb
; Event mask (+71) ; Event mask (+71)
@ -2771,12 +2766,8 @@ cache_enable:
is_cache_enabled: is_cache_enabled:
mov eax, cr0 mov eax, cr0
mov ebx, eax
and eax, 01100000_00000000_00000000_00000000b and eax, 01100000_00000000_00000000_00000000b
jz cache_disabled mov [esp + SYSCALL_STACK.eax], eax
mov [esp + SYSCALL_STACK.eax], ebx
cache_disabled:
mov dword [esp + SYSCALL_STACK.eax], eax;0
ret ret
modify_pce: modify_pce:
@ -2891,7 +2882,7 @@ backgr:
; DEBUGF 1, "K : backg y %x\n",[BG_Rect_Y_top_bottom] ; DEBUGF 1, "K : backg y %x\n",[BG_Rect_Y_top_bottom]
;--------- set event 5 start ---------- ;--------- set event 5 start ----------
push ecx edi push ecx edi
xor edi, edi mov edi, window_data
mov ecx, [thread_count] mov ecx, [thread_count]
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -2899,40 +2890,38 @@ set_bgr_event:
add edi, sizeof.WDATA add edi, sizeof.WDATA
mov eax, [BG_Rect_X_left_right] mov eax, [BG_Rect_X_left_right]
mov edx, [BG_Rect_Y_top_bottom] mov edx, [BG_Rect_Y_top_bottom]
cmp [window_data + edi + WDATA.draw_bgr_x], 0 cmp [edi + WDATA.draw_bgr_x], 0
jz .set jz .set
.join: .join:
cmp word [window_data + edi + WDATA.draw_bgr_x], ax cmp word [edi + WDATA.draw_bgr_x], ax
jae @f jae @f
mov word [window_data + edi + WDATA.draw_bgr_x], ax mov word [edi + WDATA.draw_bgr_x], ax
@@: @@:
shr eax, 16 shr eax, 16
cmp word [window_data + edi + WDATA.draw_bgr_x + 2], ax cmp word [edi + WDATA.draw_bgr_x + 2], ax
jbe @f jbe @f
mov word [window_data + edi + WDATA.draw_bgr_x + 2], ax mov word [edi + WDATA.draw_bgr_x + 2], ax
@@: @@:
cmp word [window_data + edi + WDATA.draw_bgr_y], dx cmp word [edi + WDATA.draw_bgr_y], dx
jae @f jae @f
mov word [window_data + edi + WDATA.draw_bgr_y], dx mov word [edi + WDATA.draw_bgr_y], dx
@@: @@:
shr edx, 16 shr edx, 16
cmp word [window_data + edi + WDATA.draw_bgr_y+2], dx cmp word [edi + WDATA.draw_bgr_y+2], dx
jbe @f jbe @f
mov word [window_data + edi + WDATA.draw_bgr_y+2], dx mov word [edi + WDATA.draw_bgr_y+2], dx
@@: @@:
jmp .common jmp .common
.set: .set:
mov [window_data + edi + WDATA.draw_bgr_x], eax mov [edi + WDATA.draw_bgr_x], eax
mov [window_data + edi + WDATA.draw_bgr_y], edx mov [edi + WDATA.draw_bgr_y], edx
.common: .common:
mov eax, [window_data + edi + WDATA.thread] mov eax, [edi + WDATA.thread]
test eax, eax test eax, eax
jz @f jz @f
or [eax + APPDATA.occurred_events], EVENT_BACKGROUND or [eax + APPDATA.occurred_events], EVENT_BACKGROUND
@@: @@:
sub ecx, 1 loop set_bgr_event
jnz set_bgr_event
;loop set_bgr_event
pop edi ecx pop edi ecx
;--------- set event 5 stop ----------- ;--------- set event 5 stop -----------
dec [REDRAW_BACKGROUND] ; got new update request? dec [REDRAW_BACKGROUND] ; got new update request?
@ -2956,7 +2945,7 @@ nobackgr:
jne noshutdown jne noshutdown
lea ecx, [edx-1] lea ecx, [edx-1]
mov edx, SLOT_BASE + sizeof.APPDATA ;OS_BASE+0x3040 mov edx, SLOT_BASE + sizeof.APPDATA*2 ;OS_BASE+0x3040
jecxz no_mark_system_shutdown jecxz no_mark_system_shutdown
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -3003,13 +2992,11 @@ newct:
jnz .noterminate jnz .noterminate
.terminate: .terminate:
pushad pushad
mov ecx, eax push esi
shl ecx, BSF sizeof.WDATA mov ecx, dword[ebx - APPDATA.state + APPDATA.window]
add ecx, window_data
call restore_default_cursor_before_killing call restore_default_cursor_before_killing
popad
pushad pop esi
call terminate call terminate
popad popad
cmp byte [SYS_SHUTDOWN], 0 cmp byte [SYS_SHUTDOWN], 0
@ -3025,6 +3012,7 @@ newct:
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
; eax - ptr to WDATA
redrawscreen: redrawscreen:
; eax , if process window_data base is eax, do not set flag/limits ; eax , if process window_data base is eax, do not set flag/limits
@ -3065,13 +3053,11 @@ newdw2:
mov eax, [edi + WDATA.box.left] mov eax, [edi + WDATA.box.left]
mov ebx, [edi + WDATA.box.top] mov ebx, [edi + WDATA.box.top]
mov ecx, [draw_limits.bottom] ; ecx = area y end ebx = window y start cmp ebx, [draw_limits.bottom] ; ecx = area y end ebx = window y start
cmp ecx, ebx jae ricino
jb ricino
mov ecx, [draw_limits.right] ; ecx = area x end eax = window x start cmp eax, [draw_limits.right] ; ecx = area x end eax = window x start
cmp ecx, eax jae ricino
jb ricino
mov eax, [edi + WDATA.box.left] mov eax, [edi + WDATA.box.left]
mov ebx, [edi + WDATA.box.top] mov ebx, [edi + WDATA.box.top]
@ -3090,7 +3076,7 @@ newdw2:
;-------------------------------------- ;--------------------------------------
align 4 align 4
bgli: bgli:
cmp dword[esp], 1 cmp dword[esp], 1 ; check index in window_data array, 1 - idle
jnz .az jnz .az
cmp [REDRAW_BACKGROUND], 0 cmp [REDRAW_BACKGROUND], 0
@ -3139,18 +3125,16 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.az: .az:
mov eax, edi
mov ebx, [draw_limits.left] ; set limits mov ebx, [draw_limits.left] ; set limits
mov [eax + WDATA.draw_data.left], ebx mov [edi + WDATA.draw_data.left], ebx
mov ebx, [draw_limits.top] mov ebx, [draw_limits.top]
mov [eax + WDATA.draw_data.top], ebx mov [edi + WDATA.draw_data.top], ebx
mov ebx, [draw_limits.right] mov ebx, [draw_limits.right]
mov [eax + WDATA.draw_data.right], ebx mov [edi + WDATA.draw_data.right], ebx
mov ebx, [draw_limits.bottom] mov ebx, [draw_limits.bottom]
mov [eax + WDATA.draw_data.bottom], ebx mov [edi + WDATA.draw_data.bottom], ebx
cmp dword [esp], 1 cmp dword [esp], 1 ; check idle thread
jne nobgrd jne nobgrd
inc [REDRAW_BACKGROUND] inc [REDRAW_BACKGROUND]
call wakeup_osloop call wakeup_osloop
@ -3159,8 +3143,8 @@ align 4
newdw8: newdw8:
nobgrd: nobgrd:
;-------------------------------------- ;--------------------------------------
push eax edi ebp push edi ebp
mov edi, [esp+12] mov edi, [esp+8]
cmp edi, 1 cmp edi, 1
je .found je .found
@ -3210,14 +3194,14 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.not_found: .not_found:
pop ebp edi eax pop ebp edi
jmp ricino jmp ricino
;-------------------------------------- ;--------------------------------------
align 4 align 4
.found: .found:
pop ebp edi eax pop ebp edi
mov [eax + WDATA.fl_redraw], WSTATE_REDRAW ; mark as redraw mov [edi + WDATA.fl_redraw], WSTATE_REDRAW ; mark as redraw
;-------------------------------------- ;--------------------------------------
align 4 align 4
ricino: ricino:

View File

@ -213,10 +213,10 @@ end virtual
mov [esp + .flags], ebx mov [esp + .flags], ebx
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
mov ebx, [window_data + eax + WDATA.box.width] mov ebx, [eax + WDATA.box.width]
mov edx, [window_data + eax + WDATA.box.height] mov edx, [eax + WDATA.box.height]
inc ebx inc ebx
inc edx inc edx
@ -260,19 +260,19 @@ end virtual
call blit_clip call blit_clip
jc .L57 jc .L57
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
mov ebx, [esp + BLITTER.dst_x] mov ebx, [esp + BLITTER.dst_x]
mov ebp, [esp + BLITTER.dst_y] mov ebp, [esp + BLITTER.dst_y]
add ebx, [window_data + eax + WDATA.box.left] add ebx, [eax + WDATA.box.left]
add ebp, [window_data + eax + WDATA.box.top] add ebp, [eax + WDATA.box.top]
test [esp + .flags], BLIT_CLIENT_RELATIVE test [esp + .flags], BLIT_CLIENT_RELATIVE
jz .no_client_relative jz .no_client_relative
add ebx, [window_data + eax + WDATA.clientbox.left] add ebx, [eax + WDATA.clientbox.left]
add ebp, [window_data + eax + WDATA.clientbox.top] add ebp, [eax + WDATA.clientbox.top]
.no_client_relative: .no_client_relative:
mov ecx, ebx mov ecx, ebx
@ -320,8 +320,6 @@ end virtual
mov ebx, [current_slot_idx] mov ebx, [current_slot_idx]
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je .core_32.software_cursor
cmp [_display.select_cursor], 0
jne .core_32.hardware_cursor jne .core_32.hardware_cursor
;-------------------------------------- ;--------------------------------------
.core_32.software_cursor: .core_32.software_cursor:
@ -430,12 +428,9 @@ align 4
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder_1 jne .no_mouseunder_1
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@:
push ecx push ecx
mov ecx, [esp+4] mov ecx, [esp+4]
@ -491,11 +486,8 @@ align 4
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder_2 jne .no_mouseunder_2
;-------------------------------------- ;--------------------------------------
@@:
push ecx push ecx
mov ecx, [esp+4] mov ecx, [esp+4]

View File

@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -617,6 +617,74 @@ align 4
endp endp
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
proc VGA_restore_32 stdcall, x:dword, y:dword
push ebx
mov ebx, [cur_saved_base]
mov edx, [cur.h]
test edx, edx
jz .ret
push esi
push edi
mov esi, cur_saved_data
mov edi, ebx
push [cur.w]
push [cur.top];[y]
push [cur.left];[x]
;mov eax, [cur.top]
;add [esp + 4], eax
;mov eax, [cur.left]
;add [esp], eax
;--------------------------------------
align 4
@@:
mov ecx, [esi]
add esi, 4
;mov eax, [esp]
;sub eax, [x]
;shl eax, 2 ; *4
;mov [edi + eax], ecx
mov eax, [esp]
mov ebx, [esp + 4]
push edx edi
mov edi, 1
or ecx, 0x04000000
call __sys_putpixel
pop edi edx
add dword[esp], 1
dec dword[esp + 8]
jnz @b
mov eax, [cur.w]
mov ecx, [cur.left];[x]
;add ecx, [cur.left]
mov [esp + 8], eax
mov dword[esp], ecx
inc dword[esp + 4]
;add edi, [_display.lfb_pitch]
dec edx
jnz @b
add esp, 4*3
pop edi
pop esi
;--------------------------------------
align 4
.ret:
pop ebx
ret
endp
;------------------------------------------------------------------------------
align 4
proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
locals locals
h dd ? h dd ?
@ -959,6 +1027,161 @@ align 4
jnz .row jnz .row
ret ret
endp endp
;------------------------------------------------------------------------------
align 4
proc VGA_move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
locals
h dd ?
_dx dd ?
_dy dd ?
bg_ptr dd ?
tmp_x dd ?
tmp_y dd ?
endl
mov esi, [hcursor]
mov ecx, [x]
mov eax, [y]
xor edx, edx
sub ecx, [esi + CURSOR.hot_x]
lea ebx, [ecx+32-1]
mov [x], ecx
sets dl
dec edx
and ecx, edx ;clip x to 0<=x
mov [cur.left], ecx
mov edi, ecx
sub edi, [x]
mov [_dx], edi
xor edx, edx
sub eax, [esi + CURSOR.hot_y]
lea edi, [eax+32-1]
mov [y], eax
sets dl
dec edx
and eax, edx ;clip y to 0<=y
mov [cur.top], eax
mov edx, eax
sub edx, [y]
mov [_dy], edx
mov [tmp_x], ecx
mov [tmp_y], eax
mov eax, [BPSLine_calc_area+eax*4]
lea edx, [LFB_BASE + eax + ecx*4]
mov [cur_saved_base], edx
cmp ebx, [_display.width]
jb @F
mov ebx, [_display.width]
;--------------------------------------
align 4
@@:
cmp edi, [_display.height]
jb @F
mov edi, [_display.height]
;--------------------------------------
align 4
@@:
sub ebx, [x]
sub edi, [y]
sub ebx, [_dx]
sub edi, [_dy]
mov [cur.w], ebx
mov [cur.h], edi
mov [h], edi
mov eax, edi
mov edi, cur_saved_data
xor ecx, ecx
mov eax, ecx
;--------------------------------------
align 4
@@:
; get and save pixel background
push eax ecx ebx edx
add eax, [tmp_x]
mov ebx, ecx
add ebx, [tmp_y]
push edi
or ecx, 0x04000000
call [GETPIXEL]
pop edi
;and ecx, 0x00ffffff
mov [edi], ecx
add edi, 4
pop edx ebx ecx eax
inc eax
cmp eax, [cur.w]
jb @b
xor eax, eax
inc ecx
cmp ecx, [h]
jb @B
;draw cursor
mov ebx, [cur_saved_base]
mov eax, [_dy]
shl eax, 5
add eax, [_dx]
mov esi, [hcursor]
mov esi, [esi + CURSOR.base]
lea edx, [esi+eax*4]
mov [bg_ptr], cur_saved_data
mov [_dy], 0
;--------------------------------------
align 4
.row:
mov [_dx], 0
mov ecx, [cur.w]
mov esi, edx ; cursor image base
mov edi, ebx
add edx, 32*4
add ebx, [_display.lfb_pitch]
;--------------------------------------
align 4
.pix:
; get pixel cursor
lodsd
test eax, 0xFF000000
jz @F
mov [edi], eax
pusha
mov edi, 1 ; force
mov ecx, eax ; color
and ecx, 0x00ffffff
or ecx, 0x04000000
mov eax, [x]
mov ebx, [y]
add eax, [_dx]
add ebx, [_dy]
call __sys_putpixel
popa
;--------------------------------------
align 4
@@:
inc [_dx]
add edi, 4
dec ecx
jnz .pix
inc [_dy]
dec [h]
jnz .row
ret
endp
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
check_mouse_area_for_getpixel_new: check_mouse_area_for_getpixel_new:
@ -1167,16 +1390,31 @@ init_display:
mov [edi + display_t.cr_list.prev], ecx mov [edi + display_t.cr_list.prev], ecx
if ~defined UEFI if ~defined UEFI
cmp [SCR_MODE], word 0x13 cmp [SCR_MODE], word 0x12
jbe .fail jne .not_vga
; TODO
mov ebx, VGA_restore_32
mov ecx, VGA_move_cursor_32
mov edx, VGA_putpixel
jmp .set
.not_vga:
test word [SCR_MODE], 0x4000 test word [SCR_MODE], 0x4000
jz .fail jnz .not_ega
mov ebx, restore_32
mov ecx, move_cursor_32
mov edx, Vesa20_putpixel32_new
mov eax, [_display.bits_per_pixel]
jmp .set
.not_ega:
end if end if
mov ebx, restore_32 mov ebx, restore_32
mov ecx, move_cursor_32 mov ecx, move_cursor_32
mov edx, Vesa20_putpixel32_new mov edx, Vesa20_putpixel32_new
mov eax, [_display.bits_per_pixel] mov eax, [_display.bits_per_pixel]
cmp al, 32 cmp al, 32
jne .not_32bpp jne .not_32bpp
@ -1184,13 +1422,11 @@ end if
mov [_display.select_cursor], select_cursor mov [_display.select_cursor], select_cursor
mov [_display.move_cursor], ecx mov [_display.move_cursor], ecx
mov [_display.restore_cursor], ebx mov [_display.restore_cursor], ebx
mov [_display.check_mouse], check_mouse_area_for_putpixel_new ;mov [_display.check_mouse], check_mouse_area_for_putpixel_new
mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new ;mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new
cmp [PUTPIXEL], dword VGA_putpixel
je @f
mov [PUTPIXEL], edx mov [PUTPIXEL], edx
@@:
stdcall load_cursor, def_hresize, dword LOAD_FROM_MEM stdcall load_cursor, def_hresize, dword LOAD_FROM_MEM
mov [def_cursor_hresize], eax mov [def_cursor_hresize], eax
stdcall load_cursor, def_vresize, dword LOAD_FROM_MEM stdcall load_cursor, def_vresize, dword LOAD_FROM_MEM
@ -1230,11 +1466,10 @@ end if
; mov ecx, move_cursor_15 ; mov ecx, move_cursor_15
; mov edx, Vesa20_putpixel15_new ; mov edx, Vesa20_putpixel15_new
; jmp .set ; jmp .set
.fail: .fail:
xor eax, eax ;xor eax, eax
mov [_display.select_cursor], eax ;mov [_display.select_cursor], eax
mov [_display.move_cursor], eax ;mov [_display.move_cursor], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4

View File

@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; Synhronization for MenuetOS. ;; ;; Synhronization for MenuetOS. ;;
@ -99,26 +99,25 @@ init_video:
jmp .finish jmp .finish
.16bpp: .16bpp:
mov [PUTPIXEL], Vesa20_putpixel16 mov [PUTPIXEL], Vesa20_putpixel16_new
mov [GETPIXEL], Vesa20_getpixel16 mov [GETPIXEL], Vesa20_getpixel16
mov [_display.bytes_per_pixel], 2 mov [_display.bytes_per_pixel], 2
jmp .finish jmp .finish
.24bpp: .24bpp:
mov [PUTPIXEL], Vesa20_putpixel24 mov [PUTPIXEL], Vesa20_putpixel24_new
mov [GETPIXEL], Vesa20_getpixel24 mov [GETPIXEL], Vesa20_getpixel24
mov [_display.bytes_per_pixel], 3 mov [_display.bytes_per_pixel], 3
jmp .finish jmp .finish
.32bpp: .32bpp:
mov [PUTPIXEL], Vesa20_putpixel32 mov [PUTPIXEL], Vesa20_putpixel32_new
mov [GETPIXEL], Vesa20_getpixel32 mov [GETPIXEL], Vesa20_getpixel32
mov [_display.bytes_per_pixel], 4 mov [_display.bytes_per_pixel], 4
.finish: .finish:
mov [MOUSE_PICTURE], mousepointer mov [_display.check_mouse], check_mouse_area_for_putpixel_new
mov [_display.check_mouse], check_mouse_area_for_putpixel mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new
mov [_display.check_m_pixel], check_mouse_area_for_getpixel
mov ax, word [SCR_MODE] mov ax, word [SCR_MODE]
cmp ax, 0x0012 cmp ax, 0x0012

View File

@ -40,10 +40,7 @@ Vesa20_getpixel16:
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
@@:
; check mouse area for putpixel ; check mouse area for putpixel
test ecx, 0x04000000 ; don't load to mouseunder area test ecx, 0x04000000 ; don't load to mouseunder area
@ -78,10 +75,7 @@ Vesa20_getpixel24:
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
@@:
; check mouse area for putpixel ; check mouse area for putpixel
test ecx, 0x04000000 ; don't load to mouseunder area test ecx, 0x04000000 ; don't load to mouseunder area
@ -110,10 +104,7 @@ Vesa20_getpixel32:
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
@@:
; check mouse area for putpixel ; check mouse area for putpixel
test ecx, 0x04000000 ; don't load to mouseunder area test ecx, 0x04000000 ; don't load to mouseunder area
@ -189,16 +180,16 @@ end virtual
mov [putimg.image_cx], eax mov [putimg.image_cx], eax
mov [putimg.image_cy], edx mov [putimg.image_cy], edx
; calculate absolute (i.e. screen) coordinates ; calculate absolute (i.e. screen) coordinates
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
mov ebx, [eax + window_data + WDATA.box.left] mov ebx, [eax + WDATA.box.left]
add ebx, [putimg.image_cx] add ebx, [putimg.image_cx]
mov [putimg.abs_cx], ebx mov [putimg.abs_cx], ebx
mov ebx, [eax +window_data + WDATA.box.top] mov ebx, [eax + WDATA.box.top]
add ebx, [putimg.image_cy] add ebx, [putimg.image_cy]
mov [putimg.abs_cy], ebx mov [putimg.abs_cy], ebx
; real_sx = MIN(wnd_sx-image_cx, image_sx); ; real_sx = MIN(wnd_sx-image_cx, image_sx);
mov ebx, [eax + window_data + WDATA.box.width] ; ebx = wnd_sx mov ebx, [eax + WDATA.box.width] ; ebx = wnd_sx
inc ebx ; WDATA.box.width is one pixel less than real window x-size inc ebx ; WDATA.box.width is one pixel less than real window x-size
sub ebx, [putimg.image_cx] sub ebx, [putimg.image_cx]
ja @f ja @f
@ -213,7 +204,7 @@ end virtual
.end_x: .end_x:
mov [putimg.real_sx], ebx mov [putimg.real_sx], ebx
; init real_sy ; init real_sy
mov ebx, [eax + window_data + WDATA.box.height] ; ebx = wnd_sy mov ebx, [eax + WDATA.box.height] ; ebx = wnd_sy
inc ebx inc ebx
sub ebx, [putimg.image_cy] sub ebx, [putimg.image_cy]
ja @f ja @f
@ -292,8 +283,7 @@ put_image_end_16:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je put_image_end_16_new je put_image_end_16_new
cmp ecx, 0
je put_image_end_16_old
.new_line: .new_line:
mov ecx, [putimg.real_sx] mov ecx, [putimg.real_sx]
.new_x: .new_x:
@ -339,64 +329,6 @@ put_image_end_16:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4
put_image_end_16_old:
.new_line:
mov ecx, [putimg.real_sx]
.new_x:
push [putimg.edi]
mov eax, [putimg.ebp + 4]
call eax
cmp [ebp], bl
jne .skip
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
; convert to 16 bpp and store to LFB
;; and eax, 00000000111110001111110011111000b
;; shr ah, 2
;; shr ax, 3
;; ror eax, 8
;; add al, ah
;; rol eax, 8
mov [LFB_BASE + edx], ax
.skip:
inc edx
inc edx
inc ebp
dec ecx
jnz .new_x
add esi, [putimg.line_increment]
add edx, [putimg.screen_newline]
add ebp, [putimg.winmap_newline]
cmp [putimg.ebp], putimage_get1bpp
jz .correct
cmp [putimg.ebp], putimage_get2bpp
jz .correct
cmp [putimg.ebp], putimage_get4bpp
jnz @f
.correct:
mov eax, [putimg.edi]
mov byte [eax], 80h
@@:
dec edi
jnz .new_line
jmp put_image_end_16.finish
;------------------------------------------------------------------------------
align 4 align 4
put_image_end_16_new: put_image_end_16_new:
@ -490,8 +422,7 @@ put_image_end_24:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je put_image_end_24_new je put_image_end_24_new
cmp ecx, 0
je put_image_end_24_old
.new_line: .new_line:
mov ecx, [putimg.real_sx] mov ecx, [putimg.real_sx]
.new_x: .new_x:
@ -535,63 +466,6 @@ put_image_end_24:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4
put_image_end_24_old:
.new_line:
mov ecx, [putimg.real_sx]
;--------------------------------------
align 4
.new_x:
push [putimg.edi]
mov eax, [putimg.ebp + 4]
call eax
cmp [ebp], bl
jne .skip
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
; store to LFB
mov [LFB_BASE + edx], ax
shr eax, 16
mov [LFB_BASE + edx + 2], al
.skip:
add edx, 3
inc ebp
dec ecx
jnz .new_x
add esi, [putimg.line_increment]
add edx, [putimg.screen_newline]
add ebp, [putimg.winmap_newline]
cmp [putimg.ebp], putimage_get1bpp
jz .correct
cmp [putimg.ebp], putimage_get2bpp
jz .correct
cmp [putimg.ebp], putimage_get4bpp
jnz @f
.correct:
mov eax, [putimg.edi]
mov byte [eax], 80h
@@:
dec edi
jnz .new_line
jmp put_image_end_24.finish
;------------------------------------------------------------------------------
align 4 align 4
put_image_end_24_new: put_image_end_24_new:
@ -682,8 +556,6 @@ put_image_end_32:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je put_image_end_32_new je put_image_end_32_new
cmp ecx, 0
je put_image_end_32_old
.new_line: .new_line:
mov ecx, [putimg.real_sx] mov ecx, [putimg.real_sx]
@ -735,59 +607,6 @@ put_image_end_32:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4
put_image_end_32_old:
.new_line:
mov ecx, [putimg.real_sx]
.new_x:
push [putimg.edi]
mov eax, [putimg.ebp + 4]
call eax
cmp [ebp], bl
jne .skip
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
; store to LFB
mov [LFB_BASE+edx], eax
.skip:
add edx, 4
inc ebp
dec ecx
jnz .new_x
add esi, [putimg.line_increment]
add edx, [putimg.screen_newline]
add ebp, [putimg.winmap_newline]
cmp [putimg.ebp], putimage_get1bpp
jz .correct
cmp [putimg.ebp], putimage_get2bpp
jz .correct
cmp [putimg.ebp], putimage_get4bpp
jnz @f
.correct:
mov eax, [putimg.edi]
mov byte [eax], 80h
@@:
dec edi
jnz .new_line
jmp put_image_end_32.finish
;------------------------------------------------------------------------------
align 4 align 4
put_image_end_32_new: put_image_end_32_new:
@ -877,9 +696,9 @@ __sys_putpixel:
pushad pushad
cmp eax, [_display.width] cmp eax, [_display.width]
jge .exit jae .exit
cmp ebx, [_display.height] cmp ebx, [_display.height]
jge .exit jae .exit
test edi, 1 ; force ? test edi, 1 ; force ?
jnz .forced jnz .forced
@ -914,41 +733,6 @@ __sys_putpixel:
; eax = x ; eax = x
; ebx = y ; ebx = y
align 4
Vesa20_putpixel16:
mov ecx, eax
shl ecx, 16
mov cx, bx
; imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
mov ebx, [BPSLine_calc_area + ebx*4]
lea edi, [eax*2]; edi = x*2
mov eax, [esp + 32-8+4]
; check for hardware cursor
cmp [_display.select_cursor], 0
jne @f
; check mouse area for putpixel
test eax, 0x04000000
jnz @f
call check_mouse_area_for_putpixel
@@:
; store to LFB
and eax, 00000000111110001111110011111000b
shr ah, 2
shr ax, 3
ror eax, 8
add al, ah
rol eax, 8
mov [LFB_BASE + ebx + edi], ax
ret
;-----------------------------------------------------------------------------
; eax = x
; ebx = y
align 4 align 4
Vesa20_putpixel16_new: Vesa20_putpixel16_new:
@ -999,37 +783,6 @@ Vesa20_putpixel16_new:
; eax = x ; eax = x
; ebx = y ; ebx = y
align 4
Vesa20_putpixel24:
mov ecx, eax
shl ecx, 16
mov cx, bx
; imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
mov ebx, [BPSLine_calc_area + ebx*4]
lea edi, [eax + eax*2]; edi = x*3
mov eax, [esp + 32-8+4]
; check for hardware cursor
cmp [_display.select_cursor], 0
jne @f
; check mouse area for putpixel
test eax, 0x04000000
jnz @f
call check_mouse_area_for_putpixel
@@:
; store to LFB
mov [LFB_BASE + ebx + edi], ax
shr eax, 16
mov [LFB_BASE + ebx + edi + 2], al
ret
;-----------------------------------------------------------------------------
; eax = x
; ebx = y
align 4 align 4
Vesa20_putpixel24_new: Vesa20_putpixel24_new:
@ -1075,35 +828,6 @@ Vesa20_putpixel24_new:
; eax = x ; eax = x
; ebx = y ; ebx = y
align 4
Vesa20_putpixel32:
mov ecx, eax
shl ecx, 16
mov cx, bx
; imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
mov ebx, [BPSLine_calc_area+ebx*4]
lea edi, [ebx + eax*4] ; edi = x*4+(y*y multiplier)
mov eax, [esp + 32-8+4] ; eax = color
; check for hardware cursor
cmp [_display.select_cursor], 0
jne @f
; check mouse area for putpixel
test eax, 0x04000000
jnz @f
call check_mouse_area_for_putpixel
@@:
and eax, 0xffffff
; store to LFB
mov [LFB_BASE + edi], eax
ret
;-----------------------------------------------------------------------------
; eax = x
; ebx = y
align 4 align 4
Vesa20_putpixel32_new: Vesa20_putpixel32_new:
@ -1402,14 +1126,14 @@ end virtual
mov [drbar.bar_sx], ecx mov [drbar.bar_sx], ecx
mov [drbar.bar_cx], eax mov [drbar.bar_cx], eax
mov [drbar.bar_cy], ebx mov [drbar.bar_cy], ebx
mov edi, [current_slot_idx] mov edi, [current_slot]
shl edi, BSF sizeof.WDATA mov edi, [edi + APPDATA.window]
add eax, [edi + window_data + WDATA.box.left] ; win_cx add eax, [edi + WDATA.box.left] ; win_cx
add ebx, [edi + window_data + WDATA.box.top] ; win_cy add ebx, [edi + WDATA.box.top] ; win_cy
mov [drbar.abs_cx], eax mov [drbar.abs_cx], eax
mov [drbar.abs_cy], ebx mov [drbar.abs_cy], ebx
; real_sx = MIN(wnd_sx-bar_cx, bar_sx); ; real_sx = MIN(wnd_sx-bar_cx, bar_sx);
mov ebx, [edi + window_data + WDATA.box.width] ; ebx = wnd_sx mov ebx, [edi + WDATA.box.width] ; ebx = wnd_sx
inc ebx ; WDATA.box.width is one pixel less than real window x-size inc ebx ; WDATA.box.width is one pixel less than real window x-size
sub ebx, [drbar.bar_cx] sub ebx, [drbar.bar_cx]
ja @f ja @f
@ -1426,7 +1150,7 @@ end virtual
.end_x: .end_x:
mov [drbar.real_sx], ebx mov [drbar.real_sx], ebx
; real_sy = MIN(wnd_sy-bar_cy, bar_sy); ; real_sy = MIN(wnd_sy-bar_cy, bar_sy);
mov ebx, [edi + window_data + WDATA.box.height] ; ebx = wnd_sy mov ebx, [edi + WDATA.box.height] ; ebx = wnd_sy
inc ebx inc ebx
sub ebx, [drbar.bar_cy] sub ebx, [drbar.bar_cy]
ja @f ja @f
@ -1508,8 +1232,7 @@ draw_bar_end_24:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je draw_bar_end_24_new je draw_bar_end_24_new
cmp ecx, 0
je draw_bar_end_24_old
.new_y: .new_y:
mov edi, [drbar.real_sx] mov edi, [drbar.real_sx]
.new_x: .new_x:
@ -1546,49 +1269,6 @@ draw_bar_end_24:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4
draw_bar_end_24_old:
.new_y:
mov edi, [drbar.real_sx]
.new_x:
cmp byte [ebp], bl
jne .skip
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
; store to LFB
mov [edx], ax
shr eax, 16
mov [edx + 2], al
mov eax, [drbar.color]
.skip:
; add pixel
add edx, 3
inc ebp
dec edi
jnz .new_x
; add line
add edx, [drbar.line_inc_scr]
add ebp, [drbar.line_inc_map]
; drawing gradient bars
test bh, 0x80
jz @f
test al, al
jz @f
dec al
@@:
dec esi
jnz .new_y
jmp draw_bar_end_24.end
;------------------------------------------------------------------------------
align 4 align 4
draw_bar_end_24_new: draw_bar_end_24_new:
@ -1669,8 +1349,6 @@ draw_bar_end_32:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je draw_bar_end_32_new je draw_bar_end_32_new
cmp ecx, 0
je draw_bar_end_32_old
.new_y: .new_y:
mov edi, [drbar.real_sx] mov edi, [drbar.real_sx]
@ -1713,45 +1391,6 @@ draw_bar_end_32:
mov [EGA_counter], 1 mov [EGA_counter], 1
ret ret
draw_bar_end_32_old:
.new_y:
mov edi, [drbar.real_sx]
.new_x:
cmp byte [ebp], bl
jne .skip
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
; store to LFB
mov [edx], eax
mov eax, [drbar.color]
.skip:
; add pixel
add edx, 4
inc ebp
dec edi
jnz .new_x
; add line
add edx, [drbar.line_inc_scr]
add ebp, [drbar.line_inc_map]
; drawing gradient bars
test bh, 0x80
jz @f
test al, al
jz @f
dec al
@@:
dec esi
jnz .new_y
jmp draw_bar_end_32.end
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
@ -1830,8 +1469,7 @@ draw_bar_end_16:
mov ecx, [_display.select_cursor] mov ecx, [_display.select_cursor]
cmp ecx, select_cursor cmp ecx, select_cursor
je draw_bar_end_16_new je draw_bar_end_16_new
cmp ecx, 0
je draw_bar_end_16_old
.new_y: .new_y:
mov edi, [drbar.real_sx] mov edi, [drbar.real_sx]
.new_x: .new_x:
@ -1878,57 +1516,6 @@ draw_bar_end_16:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4
draw_bar_end_16_old:
.new_y:
mov edi, [drbar.real_sx]
.new_x:
cmp byte [ebp], bl
jne .skip
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
; convert to 16 bpp and store to LFB
and eax, 00000000111110001111110011111000b
shr ah, 2
shr ax, 3
ror eax, 8
add al, ah
rol eax, 8
mov [edx], ax
mov eax, [drbar.color]
.skip:
; add pixel
add edx, 2
inc ebp
dec edi
jnz .new_x
; add line
add edx, [drbar.line_inc_scr]
add ebp, [drbar.line_inc_map]
; drawing gradient bars
test bh, 0x80
jz @f
test al, al
jz @f
dec al
@@:
dec esi
jnz .new_y
jmp draw_bar_end_16.end
;------------------------------------------------------------------------------
align 4 align 4
draw_bar_end_16_new: draw_bar_end_16_new:
@ -2077,10 +1664,8 @@ vesa20_drawbackground_tiled:
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
@@:
and eax, 0xffffff and eax, 0xffffff
; check mouse area for putpixel ; check mouse area for putpixel
call [_display.check_mouse] call [_display.check_mouse]
@ -2271,10 +1856,8 @@ vesa20_drawbackground_stretch:
push ecx push ecx
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
@@:
mov ecx, [esp+20+4] ;x mov ecx, [esp+20+4] ;x
shl ecx, 16 shl ecx, 16
add ecx, [esp+24+4] ;y add ecx, [esp+24+4] ;y

View File

@ -382,18 +382,16 @@ VGA_putpixel:
;-------------------------------------- ;--------------------------------------
; check for hardware cursor ; check for hardware cursor
cmp [_display.select_cursor], select_cursor cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder jne .no_mouseunder
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@:
push ecx push ecx
shl ecx, 16 shl ecx, 16
mov cx, bx mov cx, bx
; check mouse area for putpixel ; check mouse area for putpixel
test eax, 0x04000000 test eax, 0x04000000
jnz @f jnz @f
call [_display.check_mouse] call [_display.check_mouse]
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -495,10 +493,10 @@ VGA_draw_bar:
align 4 align 4
VGA_draw_bar_1: VGA_draw_bar_1:
mov [temp.cx], eax mov [temp.cx], eax
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.WDATA mov eax, [eax + APPDATA.window]
add ebx, [window_data + eax + WDATA.box.top] add ebx, [eax + WDATA.box.top]
mov eax, [window_data + eax + WDATA.box.left] mov eax, [eax + WDATA.box.left]
add eax, [temp.cx] add eax, [temp.cx]
and eax, 0xfff8 and eax, 0xfff8
shl ebx, 9 shl ebx, 9