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:
parent
e6242dd229
commit
7ff1f2a29d
@ -307,8 +307,9 @@ import_buf2d_lib:
|
||||
<p>22.12.10 - изменено имя функции buf2d_cruve_bezier на buf2d_curve_bezier.</p>
|
||||
<p>25.03.11 - добавлена функция для рисования точки buf2d_set_pixel.</p>
|
||||
<p>30.08.11 - добавлена функция изменения размеров буфера buf2d_resize.</p>
|
||||
<p>13.09.11 - оптимизирована работа функций buf_filled_rect_by_size buf_rect_by_size, добавлены примеры использования библиотеки.</p>
|
||||
<p>13.09.11 - оптимизирована работа функций buf2d_filled_rect_by_size buf2d_rect_by_size, добавлены примеры использования библиотеки.</p>
|
||||
<p>22.09.11 - добавлена функция buf2d_line_sm для рисования сглаженной линии.</p>
|
||||
<p>20.02.12 - функции buf_filled_rect_by_size и buf_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.</p>
|
||||
<p>20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.</p>
|
||||
<p>23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp<p/>
|
||||
</body>
|
||||
</html>
|
@ -2111,6 +2111,19 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
jne .copy_end ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï
|
||||
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à
|
||||
mov ecx,[coord_y]
|
||||
cmp ecx,0
|
||||
jge @f
|
||||
;¥á«¨ ª®®à¤¨ â coord_y<0 (1-ï áâனª )
|
||||
add edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨
|
||||
cmp edx,0
|
||||
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî ¤ ¢¥à奩 £à ¨æ¥© ¡ãä¥à (coord_y<0 ¨ |coord_y|>buf_source.h)
|
||||
neg ecx
|
||||
;inc ecx
|
||||
imul ecx,eax
|
||||
shl ecx,2 ;¯® 4 ¡¨â ¯¨ªá¥«ì
|
||||
add esi,ecx ;ᤢ¨£ ¥¬ 㪠§ ⥫ì á ª®¯¨à㥬묨 ¤ 묨, á ãç¥â®¬ ¯à®¯ã襮© ç áâ¨
|
||||
xor ecx,ecx ;®¡ã«ï¥¬ ª®®à¤¨ âã coord_y
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à
|
||||
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨
|
||||
@ -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 ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥©
|
||||
cmp [coord_y],0
|
||||
jg .end_otr_c_y
|
||||
;¥á«¨ ª®®à¤¨ â coord_y<=0 (2-ï áâனª )
|
||||
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 ? ;ç¨á«® ¯®â¥àïëå ¡ ©â®¢ ¢ áâப¥ ª®¯¨à㥬®£® ¨§®¡à ¦¥ï (â¥å çâ® ¥ ¢« §ïâ ¢ ¡ãä¥à)
|
||||
dest_w_bytes dd ? ;ª®««¨ç¥á⢮ ¡ ©â ¢ ¡ãä¥à¥ ¯à¨¥¬¨ª¥ ¯® è¨à¨¥ - è¨à¨ ¢áâ ¢«ï¥¬®© ª à⨪¨
|
||||
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 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï
|
||||
mov eax,buf2d_w
|
||||
mov eax,buf2d_w ;è¨à¨ ª®¯¨à㥬®© ª à⨪¨
|
||||
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨
|
||||
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨
|
||||
|
||||
@ -2250,6 +2270,8 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
jge @f
|
||||
;¥á«¨ ª®®à¤¨ â coord_y<0 (1-ï áâனª )
|
||||
add edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨
|
||||
cmp edx,0
|
||||
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî ¤ ¢¥à奩 £à ¨æ¥© ¡ãä¥à (coord_y<0 ¨ |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 ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥©
|
||||
cmp ecx,0
|
||||
jge .end_otr_c_y
|
||||
;¥á«¨ ª®®à¤¨ â coord_y<0 (2-ï áâனª )
|
||||
jg .end_otr_c_y
|
||||
;¥á«¨ ª®®à¤¨ â coord_y<=0 (2-ï áâனª )
|
||||
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 ¤ ë¥ ®á®¢®£® ¡ãä¥à
|
||||
sub ebx,eax ;ebx - è¨à¨ ®á®¢®£® ¡ãä¥à ¬¨ãá è¨à¨ à¨á㥬®£® ¡ãä¥à
|
||||
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥
|
||||
|
||||
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 - è¨à¨ ª®¯¨à㥬®© ª à⨪¨
|
||||
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî § «¥¢®© £à ¨æ¥© ¡ãä¥à (coord_x<0 ¨ |coord_x|>buf_source.w)
|
||||
add [lost_bytes],ecx
|
||||
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã
|
||||
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à
|
||||
add esi,ecx
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥
|
||||
xor ecx,ecx
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jl @f
|
||||
jle @f
|
||||
sub ecx,ebx
|
||||
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã
|
||||
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à
|
||||
;ecx - ç¨á«® ¯¨ªá¥«¥© ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã
|
||||
mov [right_bytes],ecx
|
||||
add [lost_bytes],ecx
|
||||
@@:
|
||||
|
||||
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨
|
||||
@ -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: ;¯à®á⮥ ª®¯¨à®¢ ¨¥
|
||||
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: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã)
|
||||
.copy_1: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § «¥¢ãî ¨/¨«¨ ¯à ¢ãî áâ®à®ã)
|
||||
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] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã
|
||||
add esi,[lost_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã
|
||||
dec edx
|
||||
cmp edx,0
|
||||
jg .copy_1
|
||||
|
Loading…
Reference in New Issue
Block a user