Fix for r. 2435

git-svn-id: svn://kolibrios.org@2575 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2012-04-06 01:07:57 +00:00
parent 8e7190b49a
commit efba336d3d
3 changed files with 115 additions and 77 deletions

View File

@ -26,14 +26,14 @@ uglobal
align 4 align 4
mousecount dd 0x0 mousecount dd 0x0
mousedata dd 0x0 mousedata dd 0x0
Y_UNDER_subtraction_CUR_hot_y:
dd 0
X_UNDER_subtraction_CUR_hot_x:
dd 0
Y_UNDER_sub_CUR_hot_y_add_curh: Y_UNDER_sub_CUR_hot_y_add_curh:
dd 0 dw 0
Y_UNDER_subtraction_CUR_hot_y:
dw 0
X_UNDER_sub_CUR_hot_x_add_curh: X_UNDER_sub_CUR_hot_x_add_curh:
dd 0 dw 0
X_UNDER_subtraction_CUR_hot_x:
dw 0
endg endg
iglobal iglobal
@ -447,15 +447,15 @@ redrawmouse:
mov ax, [Y_UNDER] mov ax, [Y_UNDER]
sub eax, [esi+CURSOR.hot_y] sub eax, [esi+CURSOR.hot_y]
mov [Y_UNDER_subtraction_CUR_hot_y], eax mov [Y_UNDER_subtraction_CUR_hot_y], ax
add eax, [cur.h] add eax, [cur.h]
mov [Y_UNDER_sub_CUR_hot_y_add_curh], eax mov [Y_UNDER_sub_CUR_hot_y_add_curh], ax
mov ax, [X_UNDER] mov ax, [X_UNDER]
sub eax, [esi+CURSOR.hot_x] sub eax, [esi+CURSOR.hot_x]
mov [X_UNDER_subtraction_CUR_hot_x], eax mov [X_UNDER_subtraction_CUR_hot_x], ax
add eax, [cur.w] add eax, [cur.w]
mov [X_UNDER_sub_CUR_hot_x_add_curh], eax mov [X_UNDER_sub_CUR_hot_x_add_curh], ax
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@: @@:

View File

@ -835,10 +835,10 @@ check_mouse_area_for_getpixel_new:
;-------------------------------------- ;--------------------------------------
push eax ebx push eax ebx
; offset X ; offset X
mov ecx, [X_UNDER_subtraction_CUR_hot_x] movzx ecx, word [X_UNDER_subtraction_CUR_hot_x]
sub eax, ecx ; x1 sub eax, ecx ; x1
; offset Y ; offset Y
mov ecx, [Y_UNDER_subtraction_CUR_hot_y] movzx ecx, word [Y_UNDER_subtraction_CUR_hot_y]
sub ebx, ecx ; y1 sub ebx, ecx ; y1
;-------------------------------------- ;--------------------------------------
; ebx = offset y ; ebx = offset y
@ -874,41 +874,49 @@ check_mouse_area_for_putpixel_new:
; eax = new color ; eax = new color
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
rol ecx, 16 rol ecx, 16
;-------------------------------------- ;--------------------------------------
; check for X ; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
ror ecx, 16
;-------------------------------------- ;--------------------------------------
align 4 align 4
.1: .1:
push eax push eax
; offset X
mov ax, [X_UNDER_subtraction_CUR_hot_x]
sub cx, ax ; x1
ror ecx, 16
; offset Y
mov ax, [Y_UNDER_subtraction_CUR_hot_y]
sub cx, ax ; y1
;-------------------------------------- ;--------------------------------------
; ecx = (offset x) shl 16 + (offset y) ; ecx = (offset x) shl 16 + (offset y)
push ebx push ebx
mov ebx, ecx mov ebx, ecx
shr ebx, 16 ; x shr ebx, 16 ; x
and ecx, 0xffff ; y and ecx, 0xffff ; y
cmp ecx, [cur.h]
jae @f
cmp ebx, [cur.w]
jb .ok
;--------------------------------------
align 4
@@:
; DEBUGF 1, "K : SHIT HAPPENS: %x %x \n", ecx,ebx
pop ebx
jmp .sh ; SORRY! SHIT HAPPENS!
;--------------------------------------
align 4
.ok:
; ecx = offset y ; ecx = offset y
; ebx = offset x ; ebx = offset x
mov eax, [esp + 4]
push ebx ecx push ebx ecx
imul ecx, [cur.w] ;y imul ecx, [cur.w] ;y
add ecx, ebx add ecx, ebx
@ -948,6 +956,10 @@ align 4
ret ret
;-------------------------------------- ;--------------------------------------
align 4 align 4
.sh:
mov ecx, -1
;--------------------------------------
align 4
@@: @@:
pop eax pop eax
;-------------------------------------- ;--------------------------------------

View File

@ -406,29 +406,38 @@ align 4
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
push ecx push ecx
mov ecx, [putimg.real_sy_and_abs_cy + 4] ;--------------------------------------
align 4
.sh:
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
;--------------------------------------
; check for X
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi sub ecx, edi
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area jae .no_mouse_area
rol ecx, 16 sub cx, [Y_UNDER_subtraction_CUR_hot_y]
add ecx, [putimg.real_sx_and_abs_cx + 4]
sub ecx, [esp]
;--------------------------------------
; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
;-------------------------------------- ;--------------------------------------
; check mouse area for putpixel ; check mouse area for putpixel
call check_mouse_area_for_putpixel_new.1 call check_mouse_area_for_putpixel_new.1
cmp ecx, -1 ;SHIT HAPPENS?
jne .no_mouse_area
mov ecx, [esp]
jmp .sh
;-------------------------------------- ;--------------------------------------
align 4 align 4
.no_mouse_area: .no_mouse_area:
@ -608,29 +617,38 @@ align 4
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
push ecx push ecx
mov ecx, [putimg.real_sy_and_abs_cy + 4] ;--------------------------------------
align 4
.sh:
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
;--------------------------------------
; check for X
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi sub ecx, edi
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area jae .no_mouse_area
rol ecx, 16 sub cx, [Y_UNDER_subtraction_CUR_hot_y]
add ecx, [putimg.real_sx_and_abs_cx + 4]
sub ecx, [esp]
;--------------------------------------
; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
;-------------------------------------- ;--------------------------------------
; check mouse area for putpixel ; check mouse area for putpixel
call check_mouse_area_for_putpixel_new.1 call check_mouse_area_for_putpixel_new.1
cmp ecx, -1 ;SHIT HAPPENS?
jne .no_mouse_area
mov ecx, [esp]
jmp .sh
;-------------------------------------- ;--------------------------------------
align 4 align 4
.no_mouse_area: .no_mouse_area:
@ -767,21 +785,23 @@ Vesa20_putpixel24_new:
jnz @f jnz @f
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb @f
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae @f jae @f
sub cx, [Y_UNDER_subtraction_CUR_hot_y]
jb @f
rol ecx, 16 rol ecx, 16
;-------------------------------------- ;--------------------------------------
; check for X ; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb @f
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae @f jae @f
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb @f
ror ecx, 16
call check_mouse_area_for_putpixel_new.1 call check_mouse_area_for_putpixel_new.1
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -841,21 +861,23 @@ Vesa20_putpixel32_new:
jnz @f jnz @f
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb @f
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae @f jae @f
sub cx, [Y_UNDER_subtraction_CUR_hot_y]
jb @f
rol ecx, 16 rol ecx, 16
;-------------------------------------- ;--------------------------------------
; check for X ; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb @f
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae @f jae @f
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb @f
ror ecx, 16
call check_mouse_area_for_putpixel_new.1 call check_mouse_area_for_putpixel_new.1
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -1372,22 +1394,24 @@ align 4
sub ecx, esi sub ecx, esi
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
rol ecx, 16 rol ecx, 16
add ecx, [drbar.real_sx_and_abs_cx] add ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi sub ecx, edi
;-------------------------------------- ;--------------------------------------
; check for X ; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
ror ecx, 16
;-------------------------------------- ;--------------------------------------
; check mouse area for putpixel ; check mouse area for putpixel
push eax push eax
@ -1557,22 +1581,24 @@ align 4
sub ecx, esi sub ecx, esi
;-------------------------------------- ;--------------------------------------
; check for Y ; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
rol ecx, 16 rol ecx, 16
add ecx, [drbar.real_sx_and_abs_cx] add ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi sub ecx, edi
;-------------------------------------- ;--------------------------------------
; check for X ; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area jae .no_mouse_area
sub cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
ror ecx, 16
;-------------------------------------- ;--------------------------------------
; check mouse area for putpixel ; check mouse area for putpixel
push eax push eax