From af41fe4aa7125b789b6ba4cdf746dbf3fdb6f23b Mon Sep 17 00:00:00 2001 From: Burer Date: Thu, 20 Mar 2025 00:18:26 +0100 Subject: [PATCH] Pipet: Fixed wrong window colors on some skins and optimized size (#162) - Fixed wrong window colors on some skins; - Size optimization; - Added template macro for quickly creating `struct` with specific fields. Co-authored-by: leency Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/162 Reviewed-by: Max Logaev Co-authored-by: Burer Co-committed-by: Burer --- programs/macros.inc | 14 ++-- programs/other/pipet/pipet.asm | 134 ++++++++++++--------------------- 2 files changed, 56 insertions(+), 92 deletions(-) diff --git a/programs/macros.inc b/programs/macros.inc index 5bd3957d7..1266f87ca 100644 --- a/programs/macros.inc +++ b/programs/macros.inc @@ -436,12 +436,14 @@ struc POINT _t,_dx,_dy { ; structure definition helper include 'struct.inc' -struct RECT - left dd ? - top dd ? - right dd ? - bottom dd ? -ends +macro define@lstruct name,[field] + { local value + common struc name [value] \{ + forward \.#field = value + common \} } + +;usecase +define@lstruct RECT,X,Y,W,H struct BOX left dd ? diff --git a/programs/other/pipet/pipet.asm b/programs/other/pipet/pipet.asm index 2e301119a..1f8fedcd6 100644 --- a/programs/other/pipet/pipet.asm +++ b/programs/other/pipet/pipet.asm @@ -40,7 +40,6 @@ START: mcall SF_SYS_MISC, SSF_MEM_OPEN, win_icons_name, , 0 add eax, 39*18*18*4 - mov [win_icons], eax mov esi, eax mov edi, [pip_icon] @@ -130,25 +129,11 @@ draw_window: mcall , SSF_GET_SKIN_HEIGHT, mov ecx, eax - add ecx, WIN_Y * 65536 + WIN_H + add ecx, WIN.Y * 65536 + WIN.H mov edx, [win_cols.work] add edx, 0x34000000 - mcall SF_CREATE_WINDOW, , , , , header - - ; icon background color conversion - mov esi, [pip_icon] - mov ecx, 18*18 - - .icon_loop: - mov eax, [esi] - cmp eax, [win_cols.work] - jne .skip_change - mov ebx, [win_cols.work_light] - mov [esi], ebx - .skip_change: - add esi, 4 - loop .icon_loop + mcall SF_CREATE_WINDOW, , , , , header call draw_base call draw_update @@ -162,29 +147,30 @@ draw_window: ; draw basic elements of window draw_base: - mcall SF_DRAW_RECT, , , [win_cols.work_graph] - mcall , , , - mcall , , , - mcall , , , - mcall , , , + mcall SF_DRAW_RECT, , , [win_cols.work_graph] + mcall , , , + mcall , , , + mcall , , , + mcall , , , - mcall , , , [win_cols.work_dark] - mcall , , , - mcall , , , - mcall , , , - mcall , , , + mcall , , , [win_cols.work_dark] + mcall , , , + mcall , , , + mcall , , , + mcall , , , + + mcall , , , [col_white] + mcall , , , + mcall , , , + mcall , , , + mcall , , , - mcall , , , [win_cols.work_light] - mcall , , , [win_cols.work_button_text] - mcall , , , - mcall , , , - mcall , , , ; buttons 11, 12, 13 and 14 - mcall SF_DEFINE_BUTTON, , , 0x4000000B - mcall , , , 0x4000000C - mcall , , , 0x4000000D - mcall , , , 0x6000000E + mcall SF_DEFINE_BUTTON, , , 0x4000000B + mcall , , , 0x4000000C + mcall , , , 0x4000000D + mcall , , , 0x6000000E ; 18*18 pixels icon mcall SF_PUT_IMAGE_EXT, [pip_icon], 0x00120012, 0x000B000F, 32 @@ -196,12 +182,12 @@ draw_base: draw_update: ; current color rect - mcall SF_DRAW_RECT, , , [sel_color] + mcall SF_DRAW_RECT, , , [sel_color] ; color codes - mcall , , , [win_cols.work_button_text] + mcall , , , [col_white] - mcall SF_DRAW_NUMBER, 0x00060100, [sel_color], , 0x50000000, [win_cols.work_button_text] + mcall SF_DRAW_NUMBER, 0x00060100, [sel_color], , 0x50000000, [col_white] mov ebx, 0x00030000 xor ecx, ecx @@ -232,10 +218,10 @@ draw_update: jle .du_loop_rect_row mov ebx, 118 * 65536 + 12 add ecx, 12 * 65536 + .du_loop_rect_row: add esi, 3 dec edi - cmp edi, 0 jne .du_loop_rect ; selection of one pixel from 7*7 grid @@ -267,17 +253,16 @@ draw_update: ; making pipet active again make_pick_active: - mov [pick_act], 0x01 + mov [pick_act], 0x01 mov [cell_act_x], 0x03 mov [cell_act_y], 0x03 - - mcall SF_DRAW_RECT, , , [win_cols.work_button_text] - mcall SF_DRAW_TEXT, , 0x10000000, mes_pick, 4 + mcall SF_DRAW_RECT, , , [col_white] + mcall SF_DRAW_TEXT, , 0x10000000, mes_pick, 4 mcall SF_SLEEP, 50 - mcall SF_DRAW_RECT, , , [win_cols.work_light] + mcall SF_DRAW_RECT, , , [win_cols.work_light] mcall SF_PUT_IMAGE_EXT, [pip_icon], 0x00120012, 0x000B000F, 32 call draw_update @@ -345,10 +330,9 @@ clamp_pixels: mov ax, dx .combine_coords: - xor edx, edx mov dx, cx - rol edx, 16 - mov dx, ax + shl edx, 16 + or dx, ax ret @@ -356,7 +340,7 @@ clamp_pixels: ; copy color HEX code copy_col_hex: - mcall SF_DRAW_RECT, , , [win_cols.work_button_text] + mcall SF_DRAW_RECT, , , [col_white] mov ebx, [sel_color] mov ecx, 6 @@ -376,10 +360,10 @@ copy_col_hex: loop ch_loop mcall SF_CLIPBOARD, 2, color_hex.end - color_hex, color_hex - mcall SF_DRAW_TEXT, , 0x10000000, mes_copy, 12 + mcall SF_DRAW_TEXT, , 0x10000000, mes_copy, 12 mcall SF_SLEEP, 50 - mcall SF_DRAW_RECT, , , [win_cols.work_button_text] + mcall SF_DRAW_RECT, , , [col_white] call draw_update jmp still @@ -388,7 +372,7 @@ copy_col_hex: ; copy color RGB code copy_col_rgb: - mcall SF_DRAW_RECT, , , [win_cols.work_button_text] + mcall SF_DRAW_RECT, , , [col_white] mov bl, 10 mov edx, [sel_color] @@ -412,15 +396,14 @@ copy_col_rgb: shr edx, 8 sub esi, 4 dec edi - cmp edi, 0 jg cr_loop mcall SF_CLIPBOARD, 2, color_rgb.end - color_rgb, color_rgb - mcall SF_DRAW_TEXT, , 0x10000000, mes_copy, 12 + mcall SF_DRAW_TEXT, , 0x10000000, mes_copy, 12 mcall SF_SLEEP, 50 - mcall SF_DRAW_RECT, , , [win_cols.work_button_text] + mcall SF_DRAW_RECT, , , [col_white] call draw_update jmp still @@ -457,48 +440,27 @@ pick_col_cell: mov [sel_color], ebx call draw_update - jmp still + jmp still ;--------------------------------------------------------------------- -WIN_X = 100 -WIN_W = 221 -WIN_Y = 100 -WIN_H = 112 +WIN RECT 100,100,221,112 -BUT_PIP_X = 8 -BUT_PIP_W = 24 -BUT_PIP_Y = 12 -BUT_PIP_H = 24 - -BUT_COL_X = 40 -BUT_COL_W = 68 -BUT_COL_Y = 12 -BUT_COL_H = 24 - - -BUT_HEX_X = 8 -BUT_HEX_W = 100 -BUT_HEX_Y = 44 -BUT_HEX_H = 24 - -BUT_RGB_X = 8 -BUT_RGB_Y = 76 - -BUT_REC_X = 116 -BUT_REC_W = 88 -BUT_REC_Y = 12 -BUT_REC_H = 88 +BUT_PIP RECT 8, 12, 24, 24 +BUT_COL RECT 40, 12, 68, 24 +BUT_HEX RECT 8, 44,100, 24 +BUT_RGB RECT 8, 76,100, 24 +BUT_REC RECT 116, 12, 88, 88 ;--------------------------------------------------------------------- win_cols system_colors -win_icons_name db 'ICONS18W', 0 -win_icons dd 0x00000000 +win_icons_name db 'ICONS18', 0 pip_icon dd 0x00000000 +col_white dd 0x00FFFFFF if lang eq ru_RU - header db '����⪠', 0 + header db '⪠', 0 else if lang eq es_ES header db 'Pipeta', 0 else