From 74199525dbc0899848425e918d5399cc6d31cfb5 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 4 Oct 2010 11:51:03 +0000 Subject: [PATCH] buf2d.obj: 1) new function 'buf2d_filled_rect_by_size' 2) fix function 'buf_bit_blt_alpha' git-svn-id: svn://kolibrios.org@1642 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/libraries/buf2d/trunk/about.htm | 10 +++++- .../develop/libraries/buf2d/trunk/buf2d.asm | 36 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index f78fac59ed..b725157de5 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -114,10 +114,15 @@ buf_0:

где buf_0 - структура буфера в котором будет рисоваться линия; 30, 10, 110, 70 - координаты линии; 0xffff00 - цвет линии.

buf2d_rect_by_size

-

Рисует прямоугольник, по двум координатам, 2-я координата задана по размеру.

+

Рисует прямоугольную рамку, по двум координатам, 2-я координата задана по размеру.

stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080

где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла; 150, 100 - размер прямоугольника; 0x8080 - цвет линии.

+

buf2d_filled_rect_by_size

+

Рисует закрашенный прямоугольник, по двум координатам, 2-я координата задана по размеру. Если размер задать 1*1, то будет нарисована точка размером в 1 пиксель, т.е. размер прямоугольника в пикселях будет равен указанному.

+
stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080
+

где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла; 150, 100 - размер прямоугольника; 0x8080 - цвет прямоуголика.

+

buf2d_circle

Рисует в буфере окружность с заданным цветом и радиусом. Пример использования:

stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000
@@ -202,6 +207,7 @@ import_buf2d_lib: buf2d_delete dd sz_buf2d_delete buf2d_line dd sz_buf2d_line buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size buf2d_circle dd sz_buf2d_circle buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 @@ -225,6 +231,7 @@ import_buf2d_lib: sz_buf2d_delete db 'buf2d_delete',0 sz_buf2d_line db 'buf2d_line',0 sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 sz_buf2d_circle db 'buf2d_circle',0 sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 @@ -248,5 +255,6 @@ import_buf2d_lib:

29.07.10 - добавлены функции buf2d_crop_color и buf2d_offset_h; исправления в функции buf2d_delete.

30.09.10 - добавлена функция buf2d_rect_by_size.

+

04.10.10 - добавлена функция buf2d_filled_rect_by_size, доработана функция buf_bit_blt_alpha.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index 5dddf01d25..367be26cb1 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -1034,9 +1034,16 @@ pushad mov eax,[coord_x] mov ebx,[coord_y] mov ecx,[w] + cmp ecx,1 + jl .coord_end add ecx,eax + dec ecx mov edx,[h] + cmp edx,1 + jl .coord_end + add edx,ebx + dec edx mov esi,dword[color] stdcall buf_line_h, edi, eax, ebx, ecx, esi ;«Ё­Ёп - stdcall buf_line_brs, edi, eax, ebx, eax, edx, esi ;«Ё­Ёп | @@ -1047,6 +1054,28 @@ popad ret endp +align 4 +proc buf_filled_rect_by_size, buf_struc:dword, coord_x:dword,coord_y:dword,w:dword,h:dword, color:dword +pushad + mov edi,[buf_struc] + cmp buf2d_bits,24 + jne .coord_end + mov eax,[coord_x] + mov ebx,[coord_y] + mov edx,[w] + add edx,eax + mov ecx,[h] + mov esi,dword[color] + cld + @@: + stdcall buf_line_h, edi, eax, ebx, edx, esi ;«Ё­Ёп - + inc ebx + loop @b + .coord_end: +popad + ret +endp + align 4 proc buf_circle, buf_struc:dword, coord_x:dword, coord_y:dword, r:dword, color:dword locals @@ -1692,6 +1721,9 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf mov edi,[buf_destination] cmp buf2d_bits,24 jne .error2 ;д®а¬ в ЎгдҐа  ­Ґ Ї®®¤Ґа¦Ёў Ґвбп + mov ebx,[coord_x] ;ў ebx ўаҐ¬Ґ­­® бв ўЁ¬ ®вбвгЇ Ё§®Ўа ¦Ґ­Ёп (¤«п Їа®ўҐаЄЁ) + cmp ebx,buf2d_w ;Їа®ўҐа塞 ў« §Ёв «Ё Ё§®Ўа ¦Ґ­ЁҐ Ї® иЁаЁ­Ґ + jge .copy_end ;Ґб«Ё Ё§®Ўа ¦Ґ­ЁҐ Ї®«­®бвмо ўл« §Ёв §  Їа ўго бв®а®­г mov ebx,buf2d_h ;ebx - ўлб®в  ®б­®ў­®Ј® ЎгдҐа  mov ecx,[coord_y] cmp ecx,ebx @@ -2084,6 +2116,7 @@ EXPORTS: dd sz_buf2d_delete, buf_delete dd sz_buf2d_line, buf_line_brs dd sz_buf2d_rect_by_size, buf_rect_by_size + dd sz_buf2d_filled_rect_by_size, buf_filled_rect_by_size dd sz_buf2d_circle, buf_circle dd sz_buf2d_img_hdiv2, buf_img_hdiv2 dd sz_buf2d_img_wdiv2, buf_img_wdiv2 @@ -2105,7 +2138,8 @@ EXPORTS: sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 sz_buf2d_line db 'buf2d_line',0 ;аЁб®ў ­ЁҐ «Ё­ЁЁ - sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;аЁб®ў ­ЁҐ Їаאַ㣮«м­ЁЄ , 2-п Є®®а¤Ё­ в  § ¤ ­  Ї® а §¬Ґаг + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;аЁб®ў ­ЁҐ а ¬ЄЁ Їаאַ㣮«м­ЁЄ , 2-п Є®®а¤Ё­ в  § ¤ ­  Ї® а §¬Ґаг + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 ;аЁб®ў ­ЁҐ § «Ёв®Ј® Їаאַ㣮«м­ЁЄ , 2-п Є®®а¤Ё­ в  § ¤ ­  Ї® а §¬Ґаг sz_buf2d_circle db 'buf2d_circle',0 ;аЁб®ў ­ЁҐ ®Єаг¦­®бвЁ sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 ;б¦ вЁҐ Ё§®Ўа ¦Ґ­Ёп Ї® ўлб®вҐ ў 2 а §  (а §¬Ґа ЎгдҐа  ­Ґ ¬Ґ­пҐвбп) sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 ;б¦ вЁҐ Ё§®Ўа ¦Ґ­Ёп Ї® иЁаЁ­Ґ ў 2 а §  (а §¬Ґа ЎгдҐа  ­Ґ ¬Ґ­пҐвбп)