From 1aa78952d77c1767a4c12b9d1e691527b2b4f1c2 Mon Sep 17 00:00:00 2001 From: IgorA Date: Thu, 24 Jun 2021 11:42:00 +0000 Subject: [PATCH] kfar: add mouse event, clean code, t_edit: small fix git-svn-id: svn://kolibrios.org@8932 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../libraries/box_lib/trunk/t_edit.asm | 17 ++- programs/fs/kfar/trunk/kfar.asm | 118 ++++++++++++------ 2 files changed, 98 insertions(+), 37 deletions(-) diff --git a/programs/develop/libraries/box_lib/trunk/t_edit.asm b/programs/develop/libraries/box_lib/trunk/t_edit.asm index 9c30f404ed..6c755840d8 100644 --- a/programs/develop/libraries/box_lib/trunk/t_edit.asm +++ b/programs/develop/libraries/box_lib/trunk/t_edit.asm @@ -2187,8 +2187,23 @@ ted_text_colored: @@: call ted_text_find_sel_color cmp edx,ted_tex_1 + jg @b + + xor ax,ax + mov edx,ted_tex + .cycle0: + call ted_iterat_next + cmp edx,ted_tex_1 jle .no_colors - jmp @b + mov al,byte[edx+1] + or al,al + jz .cycle0 + cmp ah,al + jne @f + mov byte[edx+1],0 ;слияние рядом стоящих слов одного цвета + @@: + shl ax,8 + jmp .cycle0 .no_colors: pop edx eax ret diff --git a/programs/fs/kfar/trunk/kfar.asm b/programs/fs/kfar/trunk/kfar.asm index cb737e55ac..30e28dca12 100644 --- a/programs/fs/kfar/trunk/kfar.asm +++ b/programs/fs/kfar/trunk/kfar.asm @@ -15,6 +15,7 @@ max_width = 255 min_height = 8 max_height = 255 +include '../../../KOSfuncs.inc' include 'lang.inc' include 'font.inc' include 'sort.inc' @@ -30,7 +31,10 @@ cursor_normal_size = (font_height*15+50)/100 cursor_big_size = font_height start: - mov edi, identical_table + mov eax,SF_SET_EVENTS_MASK + mov ebx,(11b shl 30) or 100111b + int 0x40 + mov edi, identical_table mov ecx, 0x100 xor eax, eax @@: @@ -108,16 +112,16 @@ start: stosd stosd stosb - push 68 + push SF_SYS_MISC pop eax - push 11 + push SSF_HEAP_INIT pop ebx int 0x40 call init_console call draw_window - push 66 + push SF_KEYBOARD pop eax - push 1 + push SSF_SET_INPUT_MODE pop ebx mov ecx, ebx int 40h ; set keyboard mode to scancodes @@ -392,6 +396,8 @@ event: jz redraw dec eax jz key + sub eax,4 + jz mouse ; button - we have only one button, close exit: ; close all screens @@ -492,7 +498,7 @@ get_event: mov ebx, [idle_interval] cmp ebx, -1 jz .infinite - push 23 + push SF_WAIT_EVENT_TIMEOUT pop eax int 40h pop ebx @@ -507,7 +513,7 @@ get_event: jmp get_event .infinite: pop ebx - push 10 + push SF_WAIT_EVENT pop eax int 40h .ret: @@ -515,8 +521,8 @@ get_event: redraw: ; query kbd state from OS - mov al, 66 - push 3 + mov al, SF_KEYBOARD + push SSF_GET_CONTROL_KEYS pop ebx int 0x40 and eax, 0x3F @@ -525,7 +531,7 @@ redraw: jz @f call draw_keybar @@: - mov al, 9 + mov al, SF_THREAD_INFO mov ebx, procinfo or ecx, -1 int 40h @@ -535,15 +541,15 @@ redraw: sub eax, [skinh] cmp eax, 5 ja @f - mov al, 12 - push 1 + mov al, SF_REDRAW + push SSF_BEGIN_DRAW pop ebx int 0x40 xor eax, eax ; ebx, ecx, edi are ignored by function 0 after first redraw mov edx, 0x53000000 int 0x40 - mov al, 12 + mov al, SF_REDRAW inc ebx int 0x40 jmp event @@ -608,7 +614,7 @@ redraw: test byte [ebx+70], 1 jnz @f .resize: - push 67 + push SF_CHANGE_WINDOW pop eax or ebx, -1 or ecx, -1 @@ -646,9 +652,9 @@ alt_f9: or [saved_height], -1 jmp redraw.resize @@: - push 48 + push SF_STYLE_SETTINGS pop eax - push 5 + push SSF_GET_SCREEN_AREA pop ebx int 0x40 push eax @@ -681,12 +687,12 @@ alt_f9: imul esi, font_height add esi, [skinh] add esi, 4 - push 67 + push SF_CHANGE_WINDOW pop eax int 0x40 jmp redraw.resize_draw key: - mov al, 2 + mov al, SF_GET_KEY int 40h test al, al jnz event @@ -773,6 +779,42 @@ key: and [ctrlstate], not 0x20 jmp .keybar +align 16 +mouse: + mov eax,SF_MOUSE_GET + mov ebx,SSF_BUTTON_EXT + int 0x40 + bt eax,8 + jnc event + + mov eax,SF_MOUSE_GET + mov ebx,SSF_WINDOW_POSITION + int 0x40 + cmp ax, word[skinh] + jl event + shr eax,16 + mov ebx, [cur_width] + imul ebx, font_width/2 + add ebx, 5 ;window border + cmp eax,ebx + jg @f + cmp [active_panel], panel1_data + je event + jmp .tab +@@: + cmp [active_panel], panel2_data + je event +.tab: + xor [active_panel], panel1_data xor panel2_data + call draw_cmdbar + mov ebp, [active_panel] + xor ebp, panel1_data xor panel2_data + call draw_panel + mov ebp, [active_panel] + call draw_panel + jmp event + +align 16 process_ctrl_keys: cmp byte [esi], 0 jz .done @@ -1812,7 +1854,7 @@ panels_OnKey: cmp esi, 256 ja .bigcmdline .cmdlinelenok: - push 70 + push SF_FILE pop eax int 40h xor esi, esi @@ -1838,7 +1880,7 @@ panels_OnKey: @@: test edx, edx jz @f - push 5 + push SF_SLEEP pop eax push 20 pop ebx @@ -2073,7 +2115,7 @@ panels_OnKey: xor ecx, ecx .drive_loop_e: mov byte [tmpname+1], 0 - push 70 + push SF_FILE pop eax int 40h mov ebx, dirinfo @@ -2089,7 +2131,7 @@ panels_OnKey: push [ebx+dirinfo.first-dirinfo] and [ebx+dirinfo.first-dirinfo], 0 .drive_loop_i: - push 70 + push SF_FILE pop eax int 40h mov ebx, dirinfo @@ -2505,7 +2547,7 @@ end if mov dl, [edi] mov byte [edi], 0 push eax - push 70 + push SF_FILE pop eax mov ebx, attrinfo int 0x40 @@ -2565,7 +2607,7 @@ end if cmp eax, 2 jbe .docopy mov [attrinfo.attr], 0 ; assume zero attributes if error - push 70 + push SF_FILE pop eax mov ebx, attrinfo int 0x40 @@ -3651,13 +3693,13 @@ end if ret draw_window: - push 12 + push SF_REDRAW pop eax - push 1 + push SSF_BEGIN_DRAW pop ebx int 40h - mov al, 48 - mov bl, 4 + mov al, SF_STYLE_SETTINGS + mov bl, SSF_GET_SKIN_HEIGHT int 40h mov [skinh], eax mov ebx, [cur_width] @@ -3670,7 +3712,7 @@ draw_window: mov edx, 0x53000000 mov edi, header int 40h - mov al, 13 + mov al, SF_DRAW_RECT xor edx, edx cmp [fill_width], 0 jz @f @@ -3700,7 +3742,7 @@ draw_window: @@: ; xor ecx, ecx ; call draw_image - mov al, 65 + mov al, SF_PUT_IMAGE_EXT mov ebx, [MemForImage] test ebx, ebx jz @f @@ -3715,14 +3757,14 @@ draw_window: xor ebp, ebp int 0x40 @@: - mov al, 12 - push 2 + mov al, SF_REDRAW + push SSF_END_DRAW pop ebx int 40h ret draw_image.nomem: - mov al, 13 + mov al, SF_DRAW_RECT xor edx, edx mov ebx, [cur_width] imul ebx, font_width @@ -3731,7 +3773,7 @@ draw_image.nomem: mov cx, word [cur_height] imul cx, font_height int 40h - mov al, 4 + mov al, SF_DRAW_TEXT mov ebx, 32*65536+32 mov ecx, 0xFFFFFF mov edx, nomem_draw @@ -3930,7 +3972,7 @@ end if shr ebp, 16 sub esi, ebp mov ebp, esi - push 65 + push SF_PUT_IMAGE_EXT pop eax mov edi, console_colors push 8 @@ -4088,6 +4130,7 @@ draw_cmdbar: rep stosw ret +align 16 draw_border: push edi mov al, 0xC9 @@ -4217,6 +4260,9 @@ GetPanelTitle_default: mov byte [edi], 0 ret 10h +;input: +; ebp - pointer to panel1 or panel2 +align 16 draw_panel: mov eax, [ebp + panel1_left - panel1_data] mov edx, [ebp + panel1_top - panel1_data] @@ -5268,7 +5314,7 @@ read_folder: mov ebx, [ebx+4] jmp .read .native: - push 70 + push SF_FILE pop eax mov ebx, dirinfo int 40h