forked from KolibriOS/kolibrios
function 'buf2d_bit_blt_alpha' can take negative coordinates in the position of the copied buffer
update function 'buf2d_bit_blt_transp' git-svn-id: svn://kolibrios.org@2383 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -2111,6 +2111,19 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
jne .copy_end ;<3B><>ଠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ন<EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ebx,buf2d_h ;ebx - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ecx,[coord_y]
|
||||
cmp ecx,0
|
||||
jge @f
|
||||
;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y<0 (1-<2D> <20><><EFBFBD><EFBFBD>ன<EFBFBD><E0AEA9>)
|
||||
add edx,ecx ;㬥<><E3ACA5>蠥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
cmp edx,0
|
||||
jle .copy_end ;<3B> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20><>室<EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>孥<EFBFBD> <20>࠭<EFBFBD>楩 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (coord_y<0 <20> |coord_y|>buf_source.h)
|
||||
neg ecx
|
||||
;inc ecx
|
||||
imul ecx,eax
|
||||
shl ecx,2 ;<3B><> 4 <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ᥫ<EFBFBD>
|
||||
add esi,ecx ;ᤢ<><E1A4A2><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>㥬묨 <20><><EFBFBD><EFBFBD>묨, <20> <20><><EFBFBD>⮬ <20>ய<EFBFBD>襭<EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
xor ecx,ecx ;<3B><><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jge .copy_end ;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> 'y' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
add ecx,edx ;ecx - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
@@ -2121,8 +2134,15 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
@@:
|
||||
mov ebx,buf2d_w
|
||||
mov ecx,ebx ;ecx <20>ᯮ<EFBFBD><E1AFAE><EFBFBD>㥬 <20><><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> 楫<><E6A5AB>
|
||||
cmp [coord_y],0
|
||||
jg .end_otr_c_y
|
||||
;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y<=0 (2-<2D> <20><><EFBFBD><EFBFBD>ன<EFBFBD><E0AEA9>)
|
||||
mov ecx,[coord_x]
|
||||
jmp @f
|
||||
.end_otr_c_y:
|
||||
imul ecx,[coord_y]
|
||||
add ecx,[coord_x]
|
||||
@@:
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add ecx,buf2d_data
|
||||
sub ebx,eax
|
||||
@@ -2226,7 +2246,7 @@ combine_colors_2:
|
||||
align 4
|
||||
proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf_source:dword, color:dword
|
||||
locals
|
||||
right_bytes dd ?
|
||||
lost_bytes dd ? ;<3B><> <20><><EFBFBD><EFBFBD><EFBFBD>ﭭ<EFBFBD><EFADAD> <20><><EFBFBD>⮢ <20> <20><>ப<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC><EFBFBD> <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
||||
dest_w_bytes dd ? ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ਥ<EFBFBD><E0A8A5><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ਭ<EFBFBD> - <20><>ਭ<EFBFBD> <20><>⠢<EFBFBD>塞<EFBFBD><EFA5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
endl
|
||||
pushad
|
||||
@@ -2234,7 +2254,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov edi,[buf_source]
|
||||
cmp buf2d_bits,8
|
||||
jne .error1 ;<3B><>ଠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ন<EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov eax,buf2d_w
|
||||
mov eax,buf2d_w ;<3B><>ਭ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
mov edx,buf2d_h ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
mov esi,buf2d_data ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
|
||||
@@ -2250,6 +2270,8 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
jge @f
|
||||
;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y<0 (1-<2D> <20><><EFBFBD><EFBFBD>ன<EFBFBD><E0AEA9>)
|
||||
add edx,ecx ;㬥<><E3ACA5>蠥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
cmp edx,0
|
||||
jle .copy_end ;<3B> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20><>室<EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>孥<EFBFBD> <20>࠭<EFBFBD>楩 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (coord_y<0 <20> |coord_y|>buf_source.h)
|
||||
neg ecx
|
||||
;inc ecx
|
||||
imul ecx,eax
|
||||
@@ -2267,8 +2289,8 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov ebx,buf2d_w
|
||||
mov ecx,[coord_y] ;ecx <20>ᯮ<EFBFBD><E1AFAE><EFBFBD>㥬 <20><><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> 楫<><E6A5AB>
|
||||
cmp ecx,0
|
||||
jge .end_otr_c_y
|
||||
;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y<0 (2-<2D> <20><><EFBFBD><EFBFBD>ன<EFBFBD><E0AEA9>)
|
||||
jg .end_otr_c_y
|
||||
;<3B> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> coord_y<=0 (2-<2D> <20><><EFBFBD><EFBFBD>ன<EFBFBD><E0AEA9>)
|
||||
mov ecx,[coord_x]
|
||||
jmp @f
|
||||
.end_otr_c_y:
|
||||
@@ -2276,19 +2298,33 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
add ecx,[coord_x]
|
||||
@@:
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add ecx,buf2d_data
|
||||
sub ebx,eax
|
||||
add ecx,buf2d_data ;buf2d_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sub ebx,eax ;ebx - <20><>ਭ<EFBFBD> <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ਭ<EFBFBD> <20><><EFBFBD>㥬<EFBFBD><E3A5AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov edi,ecx ;edi 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>㤠 <20>㤥<EFBFBD> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>
|
||||
|
||||
mov [right_bytes],0
|
||||
mov dword[lost_bytes],0
|
||||
mov ecx,[coord_x]
|
||||
cmp ecx,0
|
||||
jge @f
|
||||
neg ecx
|
||||
;inc ecx
|
||||
cmp eax,ecx ;eax - <20><>ਭ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
jle .copy_end ;<3B> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20><>室<EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20>࠭<EFBFBD>楩 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (coord_x<0 <20> |coord_x|>buf_source.w)
|
||||
add [lost_bytes],ecx
|
||||
sub eax,ecx ;㪮<><E3AAAE>稢<EFBFBD><E7A8A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><>ப<EFBFBD>
|
||||
add ebx,ecx ;㤫<><E3A4AB><EFBFBD>塞 <20><>ப<EFBFBD> <20><><EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⨭<EFBFBD><E2A8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
add esi,ecx
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add edi,ecx ;edi 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>㤠 <20>㤥<EFBFBD> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>
|
||||
xor ecx,ecx
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jl @f
|
||||
jle @f
|
||||
sub ecx,ebx
|
||||
sub eax,ecx ;㪮<><E3AAAE>稢<EFBFBD><E7A8A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><>ப<EFBFBD>
|
||||
add ebx,ecx ;㤫<><E3A4AB><EFBFBD>塞 <20><>ப<EFBFBD> <20><><EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⨭<EFBFBD><E2A8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
;ecx - <20><> <20><><EFBFBD>ᥫ<EFBFBD><E1A5AB> <20> 1-<2D> <20><>ப<EFBFBD> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뫠<EFBFBD><EBABA0><EFBFBD> <20><> <20>ࠢ<EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD>
|
||||
mov [right_bytes],ecx
|
||||
add [lost_bytes],ecx
|
||||
@@:
|
||||
|
||||
lea ebx,[ebx+ebx*2] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD> <20> 1-<2D> <20><>ப<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> 1-<2D> <20><>ப<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD>⨭<EFBFBD><E2A8AD>
|
||||
@@ -2296,7 +2332,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov ebx,[color]
|
||||
|
||||
cld
|
||||
cmp [right_bytes],0
|
||||
cmp dword[lost_bytes],0
|
||||
jg .copy_1
|
||||
.copy_0: ;<3B><><EFBFBD><EFBFBD>⮥ <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>
|
||||
mov ecx,eax
|
||||
@@ -2310,7 +2346,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
cmp edx,0
|
||||
jg .copy_0
|
||||
jmp .copy_end
|
||||
.copy_1: ;<3B><> <20><><EFBFBD><EFBFBD>⮥ <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> (<28><><EFBFBD>⨭<EFBFBD><E2A8AD> <20>뫠<EFBFBD><EBABA0><EFBFBD> <20><> <20>ࠢ<EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD>)
|
||||
.copy_1: ;<3B><> <20><><EFBFBD><EFBFBD>⮥ <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> (<28><><EFBFBD>⨭<EFBFBD><E2A8AD> <20>뫠<EFBFBD><EBABA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20>/<2F><><EFBFBD> <20>ࠢ<EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD>)
|
||||
mov ecx,eax
|
||||
@@:
|
||||
call combine_colors_2
|
||||
@@ -2318,7 +2354,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
inc esi
|
||||
loop @b
|
||||
add edi,[dest_w_bytes]
|
||||
add esi,[right_bytes] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뫠<EFBFBD><EBABA0><EFBFBD> <20><> <20>ࠢ<EFBFBD><E0A0A2> <20>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
add esi,[lost_bytes] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뫠<EFBFBD><EBABA0><EFBFBD> <20><> <20>ࠢ<EFBFBD><E0A0A2> <20>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
dec edx
|
||||
cmp edx,0
|
||||
jg .copy_1
|
||||
|
Reference in New Issue
Block a user