From e0db5d61ccdeaa52f4d2753b384154ed91f5f6de Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 4 Jan 2022 18:37:25 +0000 Subject: [PATCH] buf2d.obj: fix in functions: buf2d_bit_blt_transp, buf2d_draw_text. git-svn-id: svn://kolibrios.org@9570 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/libraries/buf2d/trunk/buf2d.asm | 79 ++++++++++++------- programs/system/icon/trunk/data.inc | 17 +--- programs/system/icon/trunk/icon.asm | 3 +- 3 files changed, 57 insertions(+), 42 deletions(-) diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index 1ce6f97eb6..6cce87ab1a 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -1646,11 +1646,9 @@ endl ;переворачиваем значения прозрачностей neg edi - inc edi - add edi,255 + add edi,256 neg esi - inc esi - add esi,255 + add esi,256 movzx ecx,byte[eax] imul ecx,edi @@ -1694,8 +1692,7 @@ push eax ebx shr ecx,1 ;переворачиваем значения прозрачности neg ecx - inc ecx - add ecx,255 + add ecx,256 shl ecx,24 add ebx,ecx @@ -1704,10 +1701,10 @@ pop ebx eax jmp .end_f .c0_c1: ;если прозрачности обоих цветов совпадают - mov edx,dword[eax] + mov edx,[eax] shr edx,1 and edx,011111110111111101111111b - mov esi,dword[ebx] + mov esi,[ebx] shr esi,1 and esi,011111110111111101111111b add edx,esi @@ -1715,16 +1712,16 @@ pop ebx eax or edx,edi jmp .end_f .c0z: ;если цвет в eax прозрачный - mov edx,dword[ebx] + mov edx,[ebx] movzx edi,byte[ebx+3] jmp @f .c1z: ;если цвет в ebx прозрачный - mov edx,dword[eax] + mov edx,[eax] @@: add edi,255 ;делаем цвет на половину прозрачным shr edi,1 cmp edi,255 - jl @f + jle @f mov edi,255 ;максимальная прозрачность не более 255 @@: shl edi,24 @@ -2271,15 +2268,28 @@ proc buf_bit_blt, buf_destination:dword, coord_x:dword, coord_y:dword, buf_sourc endp ;input: -; esi = pointer to color1 + transparent -; edi = pointer to background color2 +; esi = pointer to color1 + transparent (32b) +; edi = pointer to background color2 (24b) ;output: -; [edi] = combine color +; [edi] = combine color (24b) align 4 combine_colors_0: - push ax bx cx dx - mov bx,0x00ff ;---get transparent--- + push ax cx movzx cx,byte[esi+3] ;pro + cmp cx,255 + je .end_f + or cx,cx + jnz @f + mov ax,[esi] + mov [edi],ax + mov al,[esi+2] + mov [edi+2],al + jmp .end_f +align 4 + @@: + inc cx + push bx dx + mov bx,0x0100 ;---get transparent--- sub bx,cx ;256-pro ;---blye--- movzx ax,byte[esi] @@ -2302,8 +2312,9 @@ combine_colors_0: imul dx,cx add ax,dx mov byte[edi+2],ah - - pop dx cx bx ax + pop dx bx +.end_f: + pop cx ax ret ;функция копирует изображение из буфера buf_source (32b) в buf_destination (24b) @@ -2426,17 +2437,28 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu endp ;input: -; ebx - color1 -; esi = pointer to transparent -; edi = pointer to background color2 +; ebx - color1 (24b) +; esi = pointer to transparent (8b) +; edi = pointer to background color2 (24b) ;output: -; [edi] = combine color +; [edi] = combine color (24b) align 4 combine_colors_2: - push ax ebx cx dx si - mov cl,byte[esi] ;pro - xor ch,ch - mov si,0x00ff ;---get transparent--- + push ebx cx + movzx cx,byte[esi] ;pro + cmp cx,255 + je .end_f + or cx,cx + jnz @f + mov [edi],bx + shr ebx,16 + mov [edi+2],bl + jmp .end_f +align 4 + @@: + inc cx + push ax dx si + mov si,0x0100 ;---get transparent--- sub si,cx ;256-pro ;---blye--- @@ -2462,8 +2484,9 @@ combine_colors_2: imul dx,cx add ax,dx mov byte[edi+2],ah - - pop si dx cx ebx ax + pop si dx ax +.end_f: + pop cx ebx ret ;функция копирует изображение из буфера buf_source (8b) в buf_destination (24b) diff --git a/programs/system/icon/trunk/data.inc b/programs/system/icon/trunk/data.inc index 25f6807385..1a00cda1ee 100644 --- a/programs/system/icon/trunk/data.inc +++ b/programs/system/icon/trunk/data.inc @@ -142,25 +142,16 @@ raw_pointer_2 dd 0 ;+20 ; not use for scaling system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0 system_dir_UNPACK db '/sys/lib/archiver.obj',0 -er_message_found_lib1 db 'cnv_png.obj - Not found!',0 -er_message_import1 db 'cnv_png.obj - Wrong import!',0 - -err_message_found_lib2 db 'archiver.obj - Not found!',0 -err_message_import2 db 'archiver.obj - Wrong import!',0 - -ihead_f_i: -ihead_f_l db 'Errors of plugins:',0 - ;plugins_directory db 'plugins/',0 plugins_directory db 0 ;------------------------------------------------------------------------------ l_libs_start: -library01 l_libs system_dir_CnvPNG+9,path,library_path,system_dir_CnvPNG,\ -er_message_found_lib1,ihead_f_l,cnv_png_import,er_message_import1,ihead_f_i,plugins_directory +library01 l_libs system_dir_CnvPNG+9,library_path,system_dir_CnvPNG,\ +cnv_png_import,plugins_directory -library02 l_libs system_dir_UNPACK+9,path,library_path,system_dir_UNPACK,\ -err_message_found_lib2,ihead_f_l,UNPACK_import,err_message_import2,ihead_f_i,plugins_directory +library02 l_libs system_dir_UNPACK+9,library_path,system_dir_UNPACK,\ +UNPACK_import,plugins_directory end_l_libs: ;--------------------------------------------------------------------- diff --git a/programs/system/icon/trunk/icon.asm b/programs/system/icon/trunk/icon.asm index cf6ff3cec0..eb0b213e18 100644 --- a/programs/system/icon/trunk/icon.asm +++ b/programs/system/icon/trunk/icon.asm @@ -81,7 +81,8 @@ ICON_STRIP equ '/rd/1/iconstrp.png' ;------------------------------------------------------------------------------ include 'lang.inc' include '../../../macros.inc' -include '../../../develop/libraries/box_lib/load_lib.mac' +include '../../../KOSfuncs.inc' +include '../../../load_lib.mac' ;include '../../../debug.inc' ;------------------------------------------------------------------------------ @use_library ;use load lib macros