diff --git a/kernel/trunk/gui/font.inc b/kernel/trunk/gui/font.inc index da7e5d5167..0628e4ef60 100644 --- a/kernel/trunk/gui/font.inc +++ b/kernel/trunk/gui/font.inc @@ -7,15 +7,14 @@ $Revision$ -; // Alver 22.06.2008 // { +;------------------------------------------------------------------------------ align 4 dtext_asciiz_esi: ; for skins title out push eax xor eax, eax inc eax jmp dtext.1 -; } \\ Alver \\ - +;------------------------------------------------------------------------------ align 4 dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) ; ebx x & y @@ -26,12 +25,11 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) ; B = 1 <=> fill background with color eax ; edx start of text ; edi 1 force - -; // Alver 22.06.2008 // { push eax xor eax, eax +;-------------------------------------- +align 4 .1: -; } \\ Alver \\ pushad movsx eax, bx ; eax=y sar ebx, 16 ; ebx=x @@ -39,21 +37,26 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) cmp esi, 255 jb .loop mov esi, 255 +;-------------------------------------- +align 4 .loop: test ecx, ecx js .test_asciiz dec esi js .end jmp @f +;-------------------------------------- +align 4 .test_asciiz: cmp byte [edx], 0 jz .end -; // Alver 22.06.2008 // { + cmp byte [esp+28], 1 jne @f dec esi js .end -; } \\ Alver \\ +;-------------------------------------- +align 4 @@: inc edx pushad @@ -62,9 +65,13 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) jnz .font2 mov esi, 9 lea ebp, [FONT_I+8*edx+edx] +;-------------------------------------- +align 4 .symloop1: mov dl, byte [ebp] or dl, 1 shl 6 +;-------------------------------------- +align 4 .pixloop1: shr dl, 1 jz .pixloop1end @@ -72,6 +79,8 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area call [putpixel] jmp .pixloop1cont +;-------------------------------------- +align 4 .nopix: test ecx, 0x40000000 jz .pixloop1cont @@ -80,9 +89,13 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area call [putpixel] pop ecx +;-------------------------------------- +align 4 .pixloop1cont: inc eax jmp .pixloop1 +;-------------------------------------- +align 4 .pixloop1end: sub eax, 6 inc ebx @@ -92,20 +105,28 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) popad add eax, 6 jmp .loop +;-------------------------------------- +align 4 .font2: add edx, edx lea ebp, [FONT_II+4*edx+edx+1] push 9 movzx esi, byte [ebp-1] +;-------------------------------------- +align 4 .symloop2: mov dl, byte [ebp] push esi +;-------------------------------------- +align 4 .pixloop2: shr dl, 1 jnc .nopix2 and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area call [putpixel] jmp .pixloop2cont +;-------------------------------------- +align 4 .nopix2: test ecx, 0x40000000 jz .pixloop2cont @@ -114,6 +135,8 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area call [putpixel] pop ecx +;-------------------------------------- +align 4 .pixloop2cont: inc eax dec esi @@ -128,7 +151,10 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) add dword [esp+28], esi popad jmp .loop +;-------------------------------------- +align 4 .end: popad - pop eax ; << // Alver 22.06.2008 // << + pop eax ret +;------------------------------------------------------------------------------ diff --git a/kernel/trunk/gui/skincode.inc b/kernel/trunk/gui/skincode.inc index e5951e1f39..718730a8e4 100644 --- a/kernel/trunk/gui/skincode.inc +++ b/kernel/trunk/gui/skincode.inc @@ -11,7 +11,8 @@ $Revision$ include "skindata.inc" ;skin_data = 0x00778000 - +;------------------------------------------------------------------------------ +align 4 read_skin_file: stdcall load_file, ebx test eax, eax @@ -21,6 +22,8 @@ read_skin_file: cmp ebx, 32*1024 jb @f mov ebx, 32*1024 +;-------------------------------------- +align 4 @@: lea ecx, [ebx+3] shr ecx, 2 @@ -32,16 +35,20 @@ read_skin_file: call parse_skin_data xor eax, eax ret +;-------------------------------------- +align 4 .notfound: xor eax, eax inc eax ret +;-------------------------------------- +align 4 .noskin: stdcall kernel_free, eax push 2 pop eax ret - +;------------------------------------------------------------------------------ struct SKIN_HEADER ident dd ? version dd ? @@ -81,13 +88,15 @@ struct SKIN_BITMAPS type dw ? data dd ? ends - +;------------------------------------------------------------------------------ +align 4 load_default_skin: mov [_skinh], 22 mov ebx, _skin_file_default call read_skin_file ret - +;------------------------------------------------------------------------------ +align 4 parse_skin_data: mov ebp, skin_data cmp [ebp+SKIN_HEADER.ident], 'SKIN' @@ -127,7 +136,9 @@ parse_skin_data: mov ebx, [ebp+SKIN_HEADER.bitmaps] add ebx, skin_data - .lp1: +;-------------------------------------- +align 4 +.lp1: cmp dword[ebx], 0 je .end_bitmaps movzx eax, [ebx+SKIN_BITMAPS.kind] @@ -139,9 +150,13 @@ parse_skin_data: or ecx, ecx jnz @f mov edx, skin_inactive.left.data - @@: +;-------------------------------------- +align 4 +@@: jmp .next_bitmap - .not_left: +;-------------------------------------- +align 4 +.not_left: dec eax jnz .not_oper mov esi, [ebx+SKIN_BITMAPS.data] @@ -152,9 +167,13 @@ parse_skin_data: or ecx, ecx jnz @f mov edx, skin_inactive.oper.data - @@: +;-------------------------------------- +align 4 +@@: jmp .next_bitmap - .not_oper: +;-------------------------------------- +align 4 +.not_oper: dec eax jnz .not_base mov eax, [skin_active.left.width] @@ -163,12 +182,18 @@ parse_skin_data: jnz @f mov eax, [skin_inactive.left.width] mov edx, skin_inactive.base.data - @@: +;-------------------------------------- +align 4 +@@: jmp .next_bitmap - .not_base: +;-------------------------------------- +align 4 +.not_base: add ebx, 8 jmp .lp1 - .next_bitmap: +;-------------------------------------- +align 4 +.next_bitmap: mov ecx, [ebx+SKIN_BITMAPS.data] add ecx, skin_data mov [edx+4], eax @@ -178,11 +203,14 @@ parse_skin_data: mov [edx+0], ecx add ebx, 8 jmp .lp1 - .end_bitmaps: - +;-------------------------------------- +align 4 +.end_bitmaps: mov ebx, [ebp+SKIN_HEADER.buttons] add ebx, skin_data - .lp2: +;-------------------------------------- +align 4 +.lp2: cmp dword[ebx], 0 je .end_buttons mov eax, [ebx+SKIN_BUTTONS.type] @@ -190,15 +218,21 @@ parse_skin_data: jnz .not_close mov edx, skin_btn_close jmp .next_button - .not_close: +;-------------------------------------- +align 4 +.not_close: dec eax jnz .not_minimize mov edx, skin_btn_minimize jmp .next_button - .not_minimize: +;-------------------------------------- +align 4 +.not_minimize: add ebx, 12 jmp .lp2 - .next_button: +;-------------------------------------- +align 4 +.next_button: movsx eax, [ebx+SKIN_BUTTONS.left] mov [edx+SKIN_BUTTON.left], eax movsx eax, [ebx+SKIN_BUTTONS.top] @@ -209,26 +243,22 @@ parse_skin_data: mov [edx+SKIN_BUTTON.height], eax add ebx, 12 jmp .lp2 - .end_buttons: - - .exit: +;-------------------------------------- +align 4 +.end_buttons: +.exit: ret - -sys_putimage_with_check: - or ebx, ebx - jz @f - call sys_putimage.forced - @@: - ret - +;------------------------------------------------------------------------------ +align 4 drawwindow_IV_caption: mov ebp, skin_active or al, al jnz @f mov ebp, skin_inactive - @@: - +;-------------------------------------- +align 4 +@@: mov esi, [esp+4] mov eax, [esi+WDATA.box.width] ; window width mov edx, [ebp+SKIN_DATA.left.left] @@ -238,8 +268,12 @@ drawwindow_IV_caption: add ecx, [_skinh] mov ebx, [ebp+SKIN_DATA.left.data] - call sys_putimage_with_check - + or ebx, ebx + jz @f + call sys_putimage.forced +;-------------------------------------- +align 4 +@@: mov esi, [esp+4] mov eax, [esi+WDATA.box.width] sub eax, [ebp+SKIN_DATA.left.width] @@ -260,18 +294,28 @@ drawwindow_IV_caption: mov edx, [ebp+SKIN_DATA.base.left] sub edx, [ebp+SKIN_DATA.base.width] shl edx, 16 - .baseskinloop: +;-------------------------------------- +align 4 +.baseskinloop: shr edx, 16 add edx, [ebp+SKIN_DATA.base.width] shl edx, 16 push eax ebx ecx edx - call sys_putimage_with_check + + or ebx, ebx + jz @f + call sys_putimage.forced +;-------------------------------------- +align 4 +@@: pop edx ecx ebx eax dec eax jnz .baseskinloop - .non_base: +;-------------------------------------- +align 4 +.non_base: mov esi, [esp+4] mov edx, [esi+WDATA.box.width] @@ -283,16 +327,18 @@ drawwindow_IV_caption: mov ecx, [ebp+SKIN_DATA.oper.width] shl ecx, 16 add ecx, [_skinh] - call sys_putimage_with_check + or ebx, ebx + jz @f + call sys_putimage.forced +;-------------------------------------- +align 4 +@@: ret - -;//mike.dld, 2006-08-02 ] - - +;------------------------------------------------------------------------------ +align 4 drawwindow_IV: ;param1 - aw_yes - pusha push edx @@ -303,8 +349,9 @@ drawwindow_IV: cmp byte [esp+32+4+4], 0 jne @f mov ebp, skin_inactive - @@: - +;-------------------------------------- +align 4 +@@: mov eax, [edi+WDATA.box.left] shl eax, 16 mov ax, word [edi+WDATA.box.left] @@ -313,9 +360,6 @@ drawwindow_IV: shl ebx, 16 mov bx, word [edi+WDATA.box.top] add bx, word [edi+WDATA.box.height] -; mov esi,[edi+24] -; shr esi,1 -; and esi,0x007f7f7f mov esi, [ebp+SKIN_DATA.colors.outer] or esi, 1 shl 25 ; 0x02000000 used for draw_rectangle without top line ror ebx, 16 @@ -324,7 +368,9 @@ drawwindow_IV: rol ebx, 16 call draw_rectangle mov ecx, 3 - _dw3l: +;-------------------------------------- +align 4 +_dw3l: add eax, 1*65536-1 add ebx, 0*65536-1 test ax, ax @@ -357,13 +403,14 @@ drawwindow_IV: mov edi, [common_colours+4]; standard grab color call [drawbar] jmp draw_clientbar - @@: - +;-------------------------------------- +align 4 +@@: mov al, [esp+32+4+4] call drawwindow_IV_caption - - draw_clientbar: - +;-------------------------------------- +align 4 +draw_clientbar: mov esi, [esp] mov edx, [esi+WDATA.box.top] ; WORK AREA @@ -382,11 +429,11 @@ drawwindow_IV: test edi, 0x40000000 jnz _noinside2 call [drawbar] - _noinside2: - +;-------------------------------------- +align 4 +_noinside2: cmp dword[skin_data], 'SKIN' jne no_skin_add_button - ;* close button mov edi, [BTN_ADDR] movzx eax, word [edi] @@ -411,7 +458,9 @@ drawwindow_IV: mov ebx, [esp] mov ebx, [ebx+WDATA.box.width] inc ebx - _bCx_at_right: +;-------------------------------------- +align 4 +_bCx_at_right: add ebx, [skin_btn_close.left] mov [eax], bx add eax, 2 ; x size @@ -425,7 +474,6 @@ drawwindow_IV: mov ebx, [skin_btn_close.height] dec ebx mov [eax], bx - ;* minimize button mov edi, [BTN_ADDR] movzx eax, word [edi] @@ -450,7 +498,9 @@ drawwindow_IV: mov ebx, [esp] mov ebx, [ebx+WDATA.box.width] inc ebx - _bMx_at_right: +;-------------------------------------- +align 4 +_bMx_at_right: add ebx, [skin_btn_minimize.left] mov [eax], bx add eax, 2 ; x size @@ -464,10 +514,10 @@ drawwindow_IV: mov ebx, [skin_btn_minimize.height] dec ebx mov [eax], bx - - no_skin_add_button: +;-------------------------------------- +align 4 +no_skin_add_button: pop edi popa - ret 4 - +;------------------------------------------------------------------------------ diff --git a/kernel/trunk/gui/window.inc b/kernel/trunk/gui/window.inc index 630376824a..91d062886f 100644 --- a/kernel/trunk/gui/window.inc +++ b/kernel/trunk/gui/window.inc @@ -52,17 +52,19 @@ syscall_draw_window: ;///// system function 0 ///////////////////////////////// ; type I - original style call drawwindow_I jmp window._.draw_window_caption.2 - - @@: +;-------------------------------------- +align 4 +@@: dec al jnz @f ; type II - only reserve area, no draw - call sys_window_mouse +; call sys_window_mouse call [draw_pointer] jmp .exit - - @@: +;-------------------------------------- +align 4 +@@: dec al jnz @f @@ -71,7 +73,9 @@ syscall_draw_window: ;///// system function 0 ///////////////////////////////// jmp window._.draw_window_caption.2 ; type IV & V - skinned window (resizable & not) - @@: +;-------------------------------------- +align 4 +@@: mov eax, [TASK_COUNT] movzx eax, word[WIN_POS + eax * 2] cmp eax, [CURRENT_TASK] @@ -80,10 +84,11 @@ syscall_draw_window: ;///// system function 0 ///////////////////////////////// push eax call drawwindow_IV jmp window._.draw_window_caption.2 - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ syscall_display_settings: ;///// system function 48 /////////////////////////// @@ -132,10 +137,11 @@ syscall_display_settings: ;///// system function 48 /////////////////////////// cmp ebx, .sizeof.ftable / 4 ja @f jmp [.ftable + ebx * 4] - @@: +;-------------------------------------- +align 4 +@@: ret - - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.00: xor eax, eax @@ -145,10 +151,11 @@ syscall_display_settings.00: mov [windowtypechanged], eax jmp syscall_display_settings._.redraw_whole_screen - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.01: and ecx, 1 @@ -156,10 +163,11 @@ syscall_display_settings.01: je .exit mov [buttontype], ecx mov [windowtypechanged], ebx - +;-------------------------------------- +align 4 .exit: ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.02: dec ebx @@ -170,7 +178,7 @@ syscall_display_settings.02: rep movsb mov [windowtypechanged], ebx ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.03: mov edi, ecx @@ -179,13 +187,13 @@ syscall_display_settings.03: mov ecx, edx rep movsb ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.04: mov eax, [_skinh] mov [esp + 32], eax ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.05: mov eax, [screen_workarea.left - 2] @@ -195,7 +203,7 @@ syscall_display_settings.05: mov ax, word[screen_workarea.bottom] mov [esp + 20], eax ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.06: xor esi, esi @@ -210,15 +218,20 @@ syscall_display_settings.06: or eax, eax jge @f xor eax, eax - @@: +;-------------------------------------- +align 4 +@@: mov [screen_workarea.left], eax cmp ebx, edi jle @f mov ebx, edi - @@: +;-------------------------------------- +align 4 +@@: mov [screen_workarea.right], ebx - - .check_horizontal: +;-------------------------------------- +align 4 +.check_horizontal: mov edi, [Screen_Max_Y] mov eax, edx movsx ebx, ax @@ -229,24 +242,30 @@ syscall_display_settings.06: or eax, eax jge @f xor eax, eax - @@: +;-------------------------------------- +align 4 +@@: mov [screen_workarea.top], eax cmp ebx, edi jle @f mov ebx, edi - @@: +;-------------------------------------- +align 4 +@@: mov [screen_workarea.bottom], ebx - - .check_if_redraw_needed: +;-------------------------------------- +align 4 +.check_if_redraw_needed: or esi, esi jz .exit call repos_windows jmp syscall_display_settings._.calculate_whole_screen - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.07: mov eax, [_skinmargins + 0] @@ -254,7 +273,7 @@ syscall_display_settings.07: mov eax, [_skinmargins + 4] mov [esp + 20], eax ret - +;------------------------------------------------------------------------------ align 4 syscall_display_settings.08: mov ebx, ecx @@ -265,17 +284,20 @@ syscall_display_settings.08: call syscall_display_settings._.calculate_whole_screen jmp syscall_display_settings._.redraw_whole_screen - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ +align 4 syscall_display_settings._.calculate_whole_screen: xor eax, eax xor ebx, ebx mov ecx, [Screen_Max_X] mov edx, [Screen_Max_Y] jmp calculatescreen - +;------------------------------------------------------------------------------ +align 4 syscall_display_settings._.redraw_whole_screen: xor eax, eax mov [draw_limits.left], eax @@ -286,7 +308,7 @@ syscall_display_settings._.redraw_whole_screen: mov [draw_limits.bottom], eax mov eax, window_data jmp redrawscreen - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ syscall_set_window_shape: ;///// system function 50 /////////////////////////// @@ -304,15 +326,17 @@ syscall_set_window_shape: ;///// system function 50 /////////////////////////// test ebx, ebx jne .shape_scale mov [edi + APPDATA.wnd_shape], ecx - - .shape_scale: +;-------------------------------------- +align 4 +.shape_scale: dec ebx jnz .exit mov [edi + APPDATA.wnd_shape_scale], ecx - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ syscall_move_window: ;///// system function 67 //////////////////////////////// @@ -332,20 +356,27 @@ syscall_move_window: ;///// system function 67 //////////////////////////////// cmp ebx, -1 jne @f mov ebx, [edi + WDATA.box.left] - @@: +;-------------------------------------- +align 4 +@@: cmp ecx, -1 jne @f mov ecx, [edi + WDATA.box.top] - @@: +;-------------------------------------- +align 4 +@@: cmp edx, -1 jne @f mov edx, [edi + WDATA.box.width] - @@: +;-------------------------------------- +align 4 +@@: cmp esi, -1 jne @f mov esi, [edi + WDATA.box.height] - - @@: +;-------------------------------------- +align 4 +@@: push esi edx ecx ebx mov eax, esp mov bl, [edi + WDATA.fl_wstate] @@ -359,10 +390,11 @@ syscall_move_window: ;///// system function 67 //////////////////////////////// ; NOTE: do we really need this? to be reworked ; call [draw_pointer] - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ syscall_window_settings: ;///// system function 71 ///////////////////////////// @@ -391,12 +423,13 @@ syscall_window_settings: ;///// system function 71 ///////////////////////////// ; jnz .exit_fail ; not implemented yet - - .exit_fail: +;-------------------------------------- +align 4 +.exit_fail: xor eax, eax inc eax ; eax = 1 (fail) ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ set_window_defaults: ;///////////////////////////////////////////////////////// @@ -407,7 +440,9 @@ set_window_defaults: ;///////////////////////////////////////////////////////// push eax ecx xor eax, eax mov ecx, WIN_STACK - @@: +;-------------------------------------- +align 4 +@@: inc eax add ecx, 2 ; process no @@ -418,7 +453,7 @@ set_window_defaults: ;///////////////////////////////////////////////////////// jne @b pop ecx eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ calculatescreen: ;///////////////////////////////////////////////////////////// @@ -445,8 +480,9 @@ calculatescreen: ;///////////////////////////////////////////////////////////// jbe .exit push edx ecx ebx eax - - .next_window: +;-------------------------------------- +align 4 +.next_window: movzx edi, word[WIN_POS + esi * 2] shl edi, 5 @@ -475,38 +511,47 @@ calculatescreen: ;///////////////////////////////////////////////////////////// cmp eax, [esp + RECT.left] jae @f mov eax, [esp + RECT.left] - @@: +;-------------------------------------- +align 4 +@@: cmp ebx, [esp + RECT.top] jae @f mov ebx, [esp + RECT.top] - @@: +;-------------------------------------- +align 4 +@@: cmp ecx, [esp + RECT.right] jbe @f mov ecx, [esp + RECT.right] - @@: +;-------------------------------------- +align 4 +@@: cmp edx, [esp + RECT.bottom] jbe @f mov edx, [esp + RECT.bottom] - - @@: +;-------------------------------------- +align 4 +@@: push esi movzx esi, word[WIN_POS + esi * 2] call window._.set_screen pop esi - - .skip_window: +;-------------------------------------- +align 4 +.skip_window: inc esi dec ebp jnz .next_window pop eax ebx ecx edx - - .exit: +;-------------------------------------- +align 4 +.exit: pop ebp popfd pop esi ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ repos_windows: ;/////////////////////////////////////////////////////////////// @@ -518,8 +563,9 @@ repos_windows: ;/////////////////////////////////////////////////////////////// call force_redraw_background dec ecx jle .exit - - .next_window: +;-------------------------------------- +align 4 +.next_window: mov [edi + WDATA.fl_redraw], 1 test [edi + WDATA.fl_wstate], WSTATE_MAXIMIZED jnz .fix_maximized @@ -533,11 +579,14 @@ repos_windows: ;/////////////////////////////////////////////////////////////// sub eax, ebx jle @f mov [edi + WDATA.box.width], ebx - @@: +;-------------------------------------- +align 4 +@@: sub ebx, [edi + WDATA.box.width] mov [edi + WDATA.box.left], ebx - - .fix_vertical: +;-------------------------------------- +align 4 +.fix_vertical: mov eax, [edi + WDATA.box.top] add eax, [edi + WDATA.box.height] mov ebx, [Screen_Max_Y] @@ -547,12 +596,24 @@ repos_windows: ;/////////////////////////////////////////////////////////////// sub eax, ebx jle @f mov [edi + WDATA.box.height], ebx - @@: +;-------------------------------------- +align 4 +@@: sub ebx, [edi + WDATA.box.height] mov [edi + WDATA.box.top], ebx - jmp .fix_client_box - - .fix_maximized: +;-------------------------------------- +align 4 +.fix_client_box: + call window._.set_window_clientbox + add edi, sizeof.WDATA + loop .next_window +;-------------------------------------- +align 4 +.exit: + ret +;-------------------------------------- +align 4 +.fix_maximized: mov eax, [screen_workarea.left] mov [edi + WDATA.box.left], eax sub eax, [screen_workarea.right] @@ -565,19 +626,11 @@ repos_windows: ;/////////////////////////////////////////////////////////////// sub eax, [screen_workarea.bottom] neg eax mov [edi + WDATA.box.height], eax - - .fix_client_box: - call window._.set_window_clientbox - - add edi, sizeof.WDATA - loop .next_window - - .exit: - ret - -align 4 + jmp .fix_client_box ;------------------------------------------------------------------------------ -sys_window_mouse: ;//////////////////////////////////////////////////////////// +;align 4 +;------------------------------------------------------------------------------ +;sys_window_mouse: ;//////////////////////////////////////////////////////////// ;------------------------------------------------------------------------------ ;? ;------------------------------------------------------------------------------ @@ -596,8 +649,8 @@ sys_window_mouse: ;//////////////////////////////////////////////////////////// ; ; .exit: ; pop eax - ret - +; ret +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ draw_rectangle: ;////////////////////////////////////////////////////////////// @@ -612,13 +665,13 @@ draw_rectangle: ;////////////////////////////////////////////////////////////// push eax ebx ecx edi xor edi, edi - - .flags_set: +;-------------------------------------- +align 4 +.flags_set: push ebx ; set line color mov ecx, esi -; sub esi, 1 shl 25 ; draw top border rol ebx, 16 push ebx @@ -628,6 +681,8 @@ draw_rectangle: ;////////////////////////////////////////////////////////////// jnz @f sub ecx, 1 shl 25 call [draw_line] +;-------------------------------------- +align 4 @@: ; draw bottom border mov ebx, [esp - 2] @@ -651,13 +706,14 @@ draw_rectangle: ;////////////////////////////////////////////////////////////// pop edi ecx ebx eax ret - - .forced: +;-------------------------------------- +align 4 +.forced: push eax ebx ecx edi xor edi, edi inc edi jmp .flags_set - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ drawwindow_I_caption: ;//////////////////////////////////////////////////////// @@ -676,12 +732,15 @@ drawwindow_I_caption: ;//////////////////////////////////////////////////////// cmp ebx, eax jbe @f mov ebx, eax - @@: +;-------------------------------------- +align 4 +@@: push ebx xor edi, edi - - .next_line: +;-------------------------------------- +align 4 +.next_line: mov ebx, edx shl ebx, 16 add ebx, edx @@ -696,7 +755,9 @@ drawwindow_I_caption: ;//////////////////////////////////////////////////////// jz @f sub ecx, 0x00040404 mov [esi + WDATA.cl_titlebar], ecx - @@: +;-------------------------------------- +align 4 +@@: and ecx, 0x00ffffff call [draw_line] inc edx @@ -706,7 +767,7 @@ drawwindow_I_caption: ;//////////////////////////////////////////////////////// add esp, 4 pop [esi + WDATA.cl_titlebar] ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ drawwindow_I: ;//////////////////////////////////////////////////////////////// @@ -752,11 +813,12 @@ drawwindow_I: ;//////////////////////////////////////////////////////////////// mov ecx, [esi + WDATA.box.width] mov edx, [esi + WDATA.box.height] call [drawbar] - - .exit: +;-------------------------------------- +align 4 +.exit: popad ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ drawwindow_III_caption: ;///////////////////////////////////////////////////// @@ -776,12 +838,15 @@ drawwindow_III_caption: ;///////////////////////////////////////////////////// cmp ebx, eax jb @f mov ebx, eax - @@: +;-------------------------------------- +align 4 +@@: push ebx xor edi, edi - - .next_line: +;-------------------------------------- +align 4 +.next_line: mov ebx, edx shl ebx, 16 add ebx, edx @@ -794,11 +859,15 @@ drawwindow_III_caption: ;///////////////////////////////////////////////////// test ecx, 0x40000000 jz @f add ecx, 0x00040404 - @@: +;-------------------------------------- +align 4 +@@: test ecx, 0x80000000 jz @f sub ecx, 0x00040404 - @@: +;-------------------------------------- +align 4 +@@: mov [esi + WDATA.cl_titlebar], ecx and ecx, 0x00ffffff call [draw_line] @@ -809,7 +878,7 @@ drawwindow_III_caption: ;///////////////////////////////////////////////////// add esp, 4 pop [esi + WDATA.cl_titlebar] ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ drawwindow_III: ;////////////////////////////////////////////////////////////// @@ -841,8 +910,9 @@ drawwindow_III: ;////////////////////////////////////////////////////////////// mov ecx, 3 mov esi, [edx + WDATA.cl_frames] or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line - - .next_frame: +;-------------------------------------- +align 4 +.next_frame: add eax, 1 * 65536 - 1 add ebx, 0 * 65536 - 1 call draw_rectangle @@ -881,11 +951,12 @@ drawwindow_III: ;////////////////////////////////////////////////////////////// sub ecx, 4 sub edx, 4 call [drawbar] - - .exit: +;-------------------------------------- +align 4 +.exit: popad ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ waredraw: ;//////////////////////////////////////////////////////////////////// @@ -933,20 +1004,21 @@ waredraw: ;//////////////////////////////////////////////////////////////////// mov [edi + WDATA.fl_redraw], 1 xor eax, eax jmp .exit - - .do_not_draw: +;-------------------------------------- +align 4 +.do_not_draw: ; no it's not, just activate the window call window._.window_activate xor eax, eax mov byte[MOUSE_BACKGROUND], al mov byte[DONT_DRAW_MOUSE], al - - - .exit: +;-------------------------------------- +align 4 +.exit: mov byte[MOUSE_DOWN], 0 inc eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ minimize_window: ;///////////////////////////////////////////////////////////// @@ -986,12 +1058,13 @@ minimize_window: ;///////////////////////////////////////////////////////////// call redrawscreen pop esi edx ecx ebx eax - - .exit: +;-------------------------------------- +align 4 +.exit: popfd pop edi ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ restore_minimized_window: ;//////////////////////////////////////////////////// @@ -1019,7 +1092,9 @@ restore_minimized_window: ;//////////////////////////////////////////////////// cmp eax, [TASK_COUNT] jz @f mov ebp, calculatescreen - @@: +;-------------------------------------- +align 4 +@@: mov eax, [edi + WDATA.box.left] mov ebx, [edi + WDATA.box.top] mov ecx, [edi + WDATA.box.width] @@ -1029,12 +1104,13 @@ restore_minimized_window: ;//////////////////////////////////////////////////// call ebp mov byte[MOUSE_BACKGROUND], 0 - - .exit: +;-------------------------------------- +align 4 +.exit: popfd popad ret - +;------------------------------------------------------------------------------ align 4 ; TODO: remove this proc ;------------------------------------------------------------------------------ @@ -1054,13 +1130,15 @@ window_check_events: ;///////////////////////////////////////////////////////// jnz @f call minimize_window jmp .exit - - @@: +;-------------------------------------- +align 4 +@@: call restore_minimized_window - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ sys_window_maximize_handler: ;///////////////////////////////////////////////// @@ -1097,8 +1175,9 @@ sys_window_maximize_handler: ;///////////////////////////////////////////////// sub [esp + BOX.height], ecx mov eax, esp jmp .set_box - - .restore_size: +;-------------------------------------- +align 4 +.restore_size: mov eax, esi shl eax, 8 add eax, SLOT_BASE + APPDATA.saved_box @@ -1107,8 +1186,9 @@ sys_window_maximize_handler: ;///////////////////////////////////////////////// [eax + BOX.top] \ [eax + BOX.left] mov eax, esp - - .set_box: +;-------------------------------------- +align 4 +.set_box: test bl, WSTATE_ROLLEDUP jz @f @@ -1116,14 +1196,16 @@ sys_window_maximize_handler: ;///////////////////////////////////////////////// call window._.get_rolledup_height mov [ecx + BOX.height], eax xchg eax, ecx - - @@: +;-------------------------------------- +align 4 +@@: call window._.set_window_box add esp, sizeof.BOX - - .exit: +;-------------------------------------- +align 4 +.exit: ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ sys_window_rollup_handler: ;/////////////////////////////////////////////////// @@ -1151,15 +1233,17 @@ sys_window_rollup_handler: ;/////////////////////////////////////////////////// [edi + WDATA.box.left] mov eax, esp jmp .set_box - - .restore_size: +;-------------------------------------- +align 4 +.restore_size: test bl, WSTATE_MAXIMIZED jnz @f add esp, -sizeof.BOX lea eax, [edx + APPDATA.saved_box] jmp .set_box - - @@: +;-------------------------------------- +align 4 +@@: mov eax, [screen_workarea.top] push [screen_workarea.bottom] \ [edi + WDATA.box.width] \ @@ -1167,13 +1251,13 @@ sys_window_rollup_handler: ;/////////////////////////////////////////////////// [edi + WDATA.box.left] sub [esp + BOX.height], eax mov eax, esp - - .set_box: +;-------------------------------------- +align 4 +.set_box: call window._.set_window_box add esp, sizeof.BOX - ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ sys_window_start_moving_handler: ;///////////////////////////////////////////// @@ -1185,9 +1269,8 @@ sys_window_start_moving_handler: ;///////////////////////////////////////////// ;------------------------------------------------------------------------------ mov edi, eax call window._.draw_negative_box - ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ sys_window_end_moving_handler: ;/////////////////////////////////////////////// @@ -1209,7 +1292,7 @@ sys_window_end_moving_handler: ;/////////////////////////////////////////////// mov bl, [edi + WDATA.fl_wstate] call window._.set_window_box ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ sys_window_moving_handler: ;/////////////////////////////////////////////////// @@ -1225,7 +1308,6 @@ sys_window_moving_handler: ;/////////////////////////////////////////////////// mov edi, ebx call window._.draw_negative_box ret - ;============================================================================== ;///// private functions ////////////////////////////////////////////////////// ;============================================================================== @@ -1248,7 +1330,7 @@ endg ; to be reworked ; new_window_starting dd ? ;endg - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.invalidate_screen: ;////////////////////////////////////////////////// @@ -1268,7 +1350,9 @@ window._.invalidate_screen: ;////////////////////////////////////////////////// cmp ecx, edx jle @f mov ecx, edx - @@: +;-------------------------------------- +align 4 +@@: mov [draw_limits.left], ecx mov ecx, [eax + BOX.left] add ecx, [eax + BOX.width] @@ -1276,14 +1360,18 @@ window._.invalidate_screen: ;////////////////////////////////////////////////// cmp ecx, edx jae @f mov ecx, edx - @@: +;-------------------------------------- +align 4 +@@: mov [draw_limits.right], ecx mov ecx, [eax + BOX.top] mov edx, [ebx + BOX.top] cmp ecx, edx jle @f mov ecx, edx - @@: +;-------------------------------------- +align 4 +@@: mov [draw_limits.top], ecx mov ecx, [eax + BOX.top] add ecx, [eax + BOX.height] @@ -1291,9 +1379,10 @@ window._.invalidate_screen: ;////////////////////////////////////////////////// cmp ecx, edx jae @f mov ecx, edx - @@: +;-------------------------------------- +align 4 +@@: mov [draw_limits.bottom], ecx - ; recalculate screen buffer at old position push ebx mov edx, [eax + BOX.height] @@ -1304,7 +1393,6 @@ window._.invalidate_screen: ;////////////////////////////////////////////////// add edx, ebx call calculatescreen pop eax - ; recalculate screen buffer at new position mov edx, [eax + BOX.height] mov ecx, [eax + BOX.width] @@ -1322,7 +1410,7 @@ window._.invalidate_screen: ;////////////////////////////////////////////////// pop ebx eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.set_window_box: ;///////////////////////////////////////////////////// @@ -1347,10 +1435,10 @@ end if repz cmpsd pop edi jz .exit +;-------------------------------------- +align 4 @@: - add esp, -sizeof.BOX - mov ebx, esp if WDATA.box lea esi, [edi + WDATA.box] @@ -1399,11 +1487,12 @@ end if jnz .exit mov [eax + APPDATA.saved_box.height], edx - - .exit: +;-------------------------------------- +align 4 +.exit: pop esi ebx eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.set_window_clientbox: ;/////////////////////////////////////////////// @@ -1444,8 +1533,9 @@ window._.set_window_clientbox: ;/////////////////////////////////////////////// mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.height], eax add esp, 4 jmp .exit - - .whole_window: +;-------------------------------------- +align 4 +.whole_window: xor eax, eax mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.left], eax mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.top], eax @@ -1453,11 +1543,12 @@ window._.set_window_clientbox: ;/////////////////////////////////////////////// mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.width], eax mov eax, [ecx + WDATA.box.height] mov [edi + SLOT_BASE + APPDATA.wnd_clientbox.height], eax - - .exit: +;-------------------------------------- +align 4 +.exit: pop edi ecx eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.sys_set_window: ;///////////////////////////////////////////////////// @@ -1516,8 +1607,9 @@ window._.sys_set_window: ;///////////////////////////////////////////////////// je @f xor eax, eax - - @@: +;-------------------------------------- +align 4 +@@: mov [edi + APPDATA.wnd_caption], eax mov esi, [esp] @@ -1544,8 +1636,9 @@ window._.sys_set_window: ;///////////////////////////////////////////////////// mov byte[KEY_COUNT], 0 ; empty keyboard buffer mov byte[BTN_COUNT], 0 ; empty button buffer - - .set_client_box: +;-------------------------------------- +align 4 +.set_client_box: ; update window client box coordinates call window._.set_window_clientbox @@ -1553,7 +1646,7 @@ window._.sys_set_window: ;///////////////////////////////////////////////////// mov [edi + WDATA.fl_redraw], 0 mov edx, edi ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.check_window_position: ;////////////////////////////////////////////// @@ -1572,62 +1665,72 @@ window._.check_window_position: ;////////////////////////////////////////////// mov esi, [Screen_Max_X] cmp ecx, esi ja .fix_width_high - - .check_left: +;-------------------------------------- +align 4 +.check_left: or eax, eax jl .fix_left_low add eax, ecx cmp eax, esi jg .fix_left_high - - .check_height: +;-------------------------------------- +align 4 +.check_height: mov esi, [Screen_Max_Y] cmp edx, esi ja .fix_height_high - - .check_top: +;-------------------------------------- +align 4 +.check_top: or ebx, ebx jl .fix_top_low add ebx, edx cmp ebx, esi jg .fix_top_high - - .exit: +;-------------------------------------- +align 4 +.exit: pop esi edx ecx ebx eax ret - - .fix_width_high: +;-------------------------------------- +align 4 +.fix_width_high: mov ecx, esi mov [edi + WDATA.box.width], esi jmp .check_left - - .fix_left_low: +;-------------------------------------- +align 4 +.fix_left_low: xor eax, eax mov [edi + WDATA.box.left], eax jmp .check_height - - .fix_left_high: +;-------------------------------------- +align 4 +.fix_left_high: mov eax, esi sub eax, ecx mov [edi + WDATA.box.left], eax jmp .check_height - - .fix_height_high: +;-------------------------------------- +align 4 +.fix_height_high: mov edx, esi mov [edi + WDATA.box.height], esi jmp .check_top - - .fix_top_low: +;-------------------------------------- +align 4 +.fix_top_low: xor ebx, ebx mov [edi + WDATA.box.top], ebx jmp .exit - - .fix_top_high: +;-------------------------------------- +align 4 +.fix_top_high: mov ebx, esi sub ebx, edx mov [edi + WDATA.box.top], ebx jmp .exit - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.get_titlebar_height: ;//////////////////////////////////////////////// @@ -1642,10 +1745,12 @@ window._.get_titlebar_height: ;//////////////////////////////////////////////// jne @f mov eax, [_skinh] ret - @@: +;-------------------------------------- +align 4 +@@: mov eax, 21 ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.get_rolledup_height: ;//////////////////////////////////////////////// @@ -1661,15 +1766,19 @@ window._.get_rolledup_height: ;//////////////////////////////////////////////// mov eax, [_skinh] add eax, 3 ret - @@: +;-------------------------------------- +align 4 +@@: or al, al jnz @f mov eax, 21 ret - @@: +;-------------------------------------- +align 4 +@@: mov eax, 21 + 2 ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.set_screen: ;///////////////////////////////////////////////////////// @@ -1701,8 +1810,9 @@ end virtual jnz .check_for_shaped_window cmp [window_data + edi + WDATA.box.height], 0 jz .exit - - .check_for_shaped_window: +;-------------------------------------- +align 4 +.check_for_shaped_window: mov edi, esi shl edi, 8 add edi, SLOT_BASE @@ -1728,8 +1838,9 @@ end virtual push ax shl eax, 16 pop ax - - .next_line: +;-------------------------------------- +align 4 +.next_line: push ecx shr ecx, 2 rep stosd @@ -1743,8 +1854,9 @@ end virtual jnz .next_line jmp .exit - - .shaped_window: +;-------------------------------------- +align 4 +.shaped_window: ; for (y=0; y <= x_size; y++) ; for (x=0; x <= x_size; x++) ; if (shape[coord(x,y,scale)]==1) @@ -1791,11 +1903,13 @@ end virtual add [ff_ysz], ebx mov ebx, [ff_y] - - .ff_new_y: +;-------------------------------------- +align 4 +.ff_new_y: mov edx, [ff_x] - - .ff_new_x: +;-------------------------------------- +align 4 +.ff_new_x: ; -- body -- mov ecx, [ff_scale] mov eax, [ff_width] @@ -1814,7 +1928,9 @@ end virtual mov eax, esi mov [ebp], al ; -- end body -- - @@: +;-------------------------------------- +align 4 +@@: inc ebp inc edx cmp edx, [ff_xsz] @@ -1829,12 +1945,14 @@ end virtual jb .ff_new_y add esp, 24 - - .exit: +;-------------------------------------- +align 4 +.exit: popad ret - - .read_byte: +;-------------------------------------- +align 4 +.read_byte: ; eax - address ; esi - slot push eax ecx edx esi @@ -1844,7 +1962,7 @@ end virtual call read_process_memory pop esi edx ecx eax ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.window_activate: ;//////////////////////////////////////////////////// @@ -1869,11 +1987,13 @@ window._.window_activate: ;//////////////////////////////////////////////////// je .set_window_redraw_flag cmp al, 0x04 jne .move_others_down - - .set_window_redraw_flag: +;-------------------------------------- +align 4 +.set_window_redraw_flag: mov [window_data + ebx + WDATA.fl_redraw], 1 - - .move_others_down: +;-------------------------------------- +align 4 +.move_others_down: ; ax <- process no movzx ebx, word[esi] ; ax <- position in window stack @@ -1881,8 +2001,9 @@ window._.window_activate: ;//////////////////////////////////////////////////// ; drop others xor eax, eax - - .next_stack_window: +;-------------------------------------- +align 4 +.next_stack_window: cmp eax, [TASK_COUNT] jae .move_self_up inc eax @@ -1897,8 +2018,9 @@ window._.window_activate: ;//////////////////////////////////////////////////// jbe .next_stack_window dec word[WIN_STACK + eax * 2] jmp .next_stack_window - - .move_self_up: +;-------------------------------------- +align 4 +.move_self_up: movzx ebx, word[esi] ; number of processes mov ax, [TASK_COUNT] @@ -1907,16 +2029,18 @@ window._.window_activate: ;//////////////////////////////////////////////////// ; update on screen - window stack xor eax, eax - - .next_window_pos: +;-------------------------------------- +align 4 +.next_window_pos: cmp eax, [TASK_COUNT] jae .reset_vars inc eax movzx ebx, word[WIN_STACK + eax * 2] mov [WIN_POS + ebx * 2], ax jmp .next_window_pos - - .reset_vars: +;-------------------------------------- +align 4 +.reset_vars: mov byte[KEY_COUNT], 0 mov byte[BTN_COUNT], 0 mov word[MOUSE_SCROLL_H], 0 @@ -1924,7 +2048,6 @@ window._.window_activate: ;//////////////////////////////////////////////////// pop ebx eax ret - ;------------------------------------------------------------------------------ window._.window_deactivate: ;//////////////////////////////////////////////////// ;------------------------------------------------------------------------------ @@ -1933,7 +2056,8 @@ window._.window_deactivate: ;/////////////////////////////////////////////////// ;> esi = pointer to WIN_POS+ window data ;------------------------------------------------------------------------------ push eax ebx -;------------------------------------------------------------------------------ +;-------------------------------------- +align 4 .move_others_up: ; ax <- process no movzx ebx, word[esi] @@ -1941,6 +2065,8 @@ window._.window_deactivate: ;/////////////////////////////////////////////////// movzx ebx, word[WIN_STACK + ebx * 2] ; up others xor eax, eax +;-------------------------------------- +align 4 .next_stack_window: cmp eax, [TASK_COUNT] jae .move_self_down @@ -1949,13 +2075,16 @@ window._.window_deactivate: ;/////////////////////////////////////////////////// jae .next_stack_window inc word[WIN_STACK + eax * 2] jmp .next_stack_window -;---------------------------------------------- +;-------------------------------------- +align 4 .move_self_down: movzx ebx, word[esi] ; this is the last (and the low) mov [WIN_STACK + ebx * 2], word 1 ; update on screen - window stack xor eax, eax +;-------------------------------------- +align 4 .next_window_pos: cmp eax, [TASK_COUNT] jae .reset_vars @@ -1963,7 +2092,8 @@ window._.window_deactivate: ;/////////////////////////////////////////////////// movzx ebx, word[WIN_STACK + eax * 2] mov [WIN_POS + ebx * 2], ax jmp .next_window_pos -;----------------------------------------------- +;-------------------------------------- +align 4 .reset_vars: mov byte[KEY_COUNT], 0 mov byte[BTN_COUNT], 0 @@ -1995,8 +2125,9 @@ window._.check_window_draw: ;////////////////////////////////////////////////// movzx eax, word[WIN_STACK + eax * 2] ; get value of the curr process lea esi, [WIN_POS + eax * 2] ; get address of this process at 0xC400 - - .next_window: +;-------------------------------------- +align 4 +.next_window: add esi, 2 mov eax, [TASK_COUNT] @@ -2033,17 +2164,19 @@ window._.check_window_draw: ;////////////////////////////////////////////////// jge .next_window pop esi edx ebx eax - - .exit.redraw: +;-------------------------------------- +align 4 +.exit.redraw: xor ecx, ecx inc ecx ret - - .exit.no_redraw: +;-------------------------------------- +align 4 +.exit.no_redraw: pop esi edx ebx eax xor ecx, ecx ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.draw_window_caption: ;//////////////////////////////////////////////// @@ -2056,7 +2189,9 @@ window._.draw_window_caption: ;//////////////////////////////////////////////// cmp edx, [CURRENT_TASK] jne @f inc eax - @@: +;-------------------------------------- +align 4 +@@: mov edx, [CURRENT_TASK] shl edx, 5 add edx, window_data @@ -2068,27 +2203,31 @@ window._.draw_window_caption: ;//////////////////////////////////////////////// je .draw_caption_style_3 jmp .not_style_3 - - .draw_caption_style_3: +;-------------------------------------- +align 4 +.draw_caption_style_3: push edx call drawwindow_IV_caption add esp, 4 jmp .2 - - .not_style_3: +;-------------------------------------- +align 4 +.not_style_3: cmp bl, 2 jne .not_style_2 call drawwindow_III_caption jmp .2 - - .not_style_2: +;-------------------------------------- +align 4 +.not_style_2: cmp bl, 0 jne .2 call drawwindow_I_caption - - .2: +;-------------------------------------- +align 4 +.2: mov edi, [CURRENT_TASK] shl edi, 5 test [edi + window_data + WDATA.fl_wstyle], WSTYLE_HASCAPTION @@ -2105,8 +2244,9 @@ window._.draw_window_caption: ;//////////////////////////////////////////////// je .skinned jmp .not_skinned - - .skinned: +;-------------------------------------- +align 4 +.skinned: mov ebp, [edi + window_data + WDATA.box.left - 2] mov bp, word[edi + window_data + WDATA.box.top] movzx eax, word[edi + window_data + WDATA.box.width] @@ -2132,8 +2272,9 @@ window._.draw_window_caption: ;//////////////////////////////////////////////// add bx, -3 add ebx, ebp jmp .dodraw - - .not_skinned: +;-------------------------------------- +align 4 +.not_skinned: cmp al, 1 je .exit @@ -2153,17 +2294,19 @@ window._.draw_window_caption: ;//////////////////////////////////////////////// mov esi, eax mov ebx, 0x00080007 add ebx, ebp - - .dodraw: +;-------------------------------------- +align 4 +.dodraw: mov ecx, [common_colours + 16] or ecx, 0x80000000 xor edi, edi call dtext_asciiz_esi - - .exit: +;-------------------------------------- +align 4 +.exit: call [draw_pointer] ret - +;------------------------------------------------------------------------------ align 4 ;------------------------------------------------------------------------------ window._.draw_negative_box: ;////////////////////////////////////////////////// @@ -2174,6 +2317,8 @@ window._.draw_negative_box: ;////////////////////////////////////////////////// ;------------------------------------------------------------------------------ push eax ebx esi mov esi, 0x01000000 +;-------------------------------------- +align 4 .1: mov eax, [edi + BOX.left - 2] mov ax, word[edi + BOX.left] @@ -2185,6 +2330,8 @@ window._.draw_negative_box: ;////////////////////////////////////////////////// pop esi ebx eax ret ;------------------------------------------------------------------------------ +align 4 +;------------------------------------------------------------------------------ window._.end_moving__box: ;////////////////////////////////////////////////// ;------------------------------------------------------------------------------ ;? Draw positive box @@ -2194,8 +2341,8 @@ window._.end_moving__box: ;////////////////////////////////////////////////// push eax ebx esi xor esi, esi jmp window._.draw_negative_box.1 - - +;------------------------------------------------------------------------------ +align 4 ;------------------------------------------------------------------------------ window._.get_rect: ;///////////////////////////////////////////////////// ;------------------------------------------------------------------------------ @@ -2216,6 +2363,5 @@ window._.get_rect: ;///////////////////////////////////////////////////// add edx, [eax-twdw + WDATA.box.height] mov [ecx+RECT.bottom], edx - ret - +;------------------------------------------------------------------------------ diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 29c9f6a26e..d842df51a6 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -419,14 +419,7 @@ high_code: cmp [SCR_MODE], word 0x13 ; EGA 320*200 256 colors je v20ga32 jmp v20ga24 -; mov [PUTPIXEL], dword Vesa12_putpixel24 ; Vesa 1.2 -; mov [GETPIXEL], dword Vesa12_getpixel24 -; cmp [ScreenBPP], byte 24 -; jz ga24 -; mov [PUTPIXEL], dword Vesa12_putpixel32 -; mov [GETPIXEL], dword Vesa12_getpixel32 -; ga24: -; jmp v20ga24 + setvesa20: mov [PUTPIXEL], dword Vesa20_putpixel24 ; Vesa 2.0 mov [GETPIXEL], dword Vesa20_getpixel24 diff --git a/kernel/trunk/video/cursors.inc b/kernel/trunk/video/cursors.inc index b1b0fe385f..dba5370902 100644 --- a/kernel/trunk/video/cursors.inc +++ b/kernel/trunk/video/cursors.inc @@ -1000,6 +1000,19 @@ align 4 mov [_display.check_mouse], check_mouse_area_for_putpixel_new mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new + cmp [PUTPIXEL], dword VGA_putpixel + je @f + cmp [ScreenBPP], byte 32 + je .32 + mov [PUTPIXEL], dword Vesa20_putpixel24_new + jmp @f +;-------------------------------------- +align 4 +.32: + mov [PUTPIXEL], dword Vesa20_putpixel32_new +;-------------------------------------- +align 4 +@@: stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM mov [def_cursor], eax ret diff --git a/kernel/trunk/video/vesa20.inc b/kernel/trunk/video/vesa20.inc index 172a0349c0..4ef34a4b39 100644 --- a/kernel/trunk/video/vesa20.inc +++ b/kernel/trunk/video/vesa20.inc @@ -452,7 +452,12 @@ align 4 .finish: add esp, putimg.stack_data popad + cmp [SCR_MODE], dword 0x12 + jne @f call VGA__putimage +;-------------------------------------- +align 4 +@@: mov [EGA_counter], 1 ret ;-------------------------------------- @@ -600,7 +605,7 @@ Vesa20_putpixel24: ; check mouse area for putpixel test eax, 0x04000000 jnz @f - call [_display.check_mouse] + call check_mouse_area_for_putpixel ;-------------------------------------- align 4 @@: @@ -608,7 +613,48 @@ align 4 mov [LFB_BASE+ebx+edi], ax shr eax, 16 mov [LFB_BASE+ebx+edi+2], al + ret +;----------------------------------------------------------------------------- +align 4 +Vesa20_putpixel24_new: +; eax = x +; ebx = y + mov ecx, eax + shl ecx, 16 + mov cx, bx + + imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier + lea edi, [eax+eax*2]; edi = x*3 + mov eax, [esp+32-8+4] ;-------------------------------------- +; check mouse area for putpixel + test eax, 0x04000000 + jnz @f +;-------------------------------------- +; check for Y + cmp cx, [Y_UNDER_subtraction_CUR_hot_y] + jb @f + + cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] + jae @f + + rol ecx, 16 +;-------------------------------------- +; check for X + cmp cx, [X_UNDER_subtraction_CUR_hot_x] + jb @f + + cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] + jae @f + + call check_mouse_area_for_putpixel_new.1 +;-------------------------------------- +align 4 +@@: +; store to real LFB + mov [LFB_BASE+ebx+edi], ax + shr eax, 16 + mov [LFB_BASE+ebx+edi+2], al ret ;----------------------------------------------------------------------------- align 4 @@ -626,14 +672,54 @@ Vesa20_putpixel32: ; check mouse area for putpixel test eax, 0x04000000 jnz @f - call [_display.check_mouse] + call check_mouse_area_for_putpixel ;-------------------------------------- align 4 @@: and eax, 0xffffff ; store to real LFB mov [LFB_BASE+edi], eax + ret +;----------------------------------------------------------------------------- +align 4 +Vesa20_putpixel32_new: +; eax = x +; ebx = y + mov ecx, eax + shl ecx, 16 + mov cx, bx + + imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier + lea edi, [ebx+eax*4]; edi = x*4+(y*y multiplier) + mov eax, [esp+32-8+4]; eax = color ;-------------------------------------- +; check mouse area for putpixel + test eax, 0x04000000 + jnz @f +;-------------------------------------- +; check for Y + cmp cx, [Y_UNDER_subtraction_CUR_hot_y] + jb @f + + cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] + jae @f + + rol ecx, 16 +;-------------------------------------- +; check for X + cmp cx, [X_UNDER_subtraction_CUR_hot_x] + jb @f + + cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] + jae @f + + call check_mouse_area_for_putpixel_new.1 +;-------------------------------------- +align 4 +@@: + and eax, 0xffffff +; store to real LFB + mov [LFB_BASE+edi], eax ret ;----------------------------------------------------------------------------- align 4 @@ -1208,7 +1294,12 @@ align 4 .end: add esp, drbar.stack_data popad + cmp [SCR_MODE], dword 0x12 + jne @f call VGA_draw_bar +;-------------------------------------- +align 4 +@@: xor eax, eax mov [EGA_counter], 1 ret @@ -1391,7 +1482,12 @@ dp4: jbe dp2 popad mov [EGA_counter], 1 + cmp [SCR_MODE], dword 0x12 + jne @f call VGA_drawbackground +;-------------------------------------- +align 4 +@@: ret ;------------------------------------------------------------------------------ align 4 @@ -1598,7 +1694,12 @@ sdpdone: add esp, 44 popad mov [EGA_counter], 1 + cmp [SCR_MODE], dword 0x12 + jne @f call VGA_drawbackground +;-------------------------------------- +align 4 +@@: ret uglobal diff --git a/kernel/trunk/video/vga.inc b/kernel/trunk/video/vga.inc index ecce28edce..86982d2c25 100644 --- a/kernel/trunk/video/vga.inc +++ b/kernel/trunk/video/vga.inc @@ -13,7 +13,8 @@ $Revision$ - +;------------------------------------------------------------------------------ +align 4 paletteVGA: ;16 colour palette @@ -24,9 +25,9 @@ paletteVGA: mov ecx, 16 mov dx, 0x3c9 xor eax, eax - - palvganew: - +;-------------------------------------- +align 4 +palvganew: mov al, 0 test ah, 4 jz palvgalbl1 @@ -34,7 +35,9 @@ paletteVGA: test ah, 8 jz palvgalbl1 add al, 32 - palvgalbl1: +;-------------------------------------- +align 4 +palvgalbl1: out dx, al; red 0,31 or 63 mov al, 0 test ah, 2 @@ -43,7 +46,9 @@ paletteVGA: test ah, 8 jz palvgalbl2 add al, 32 - palvgalbl2: +;-------------------------------------- +align 4 +palvgalbl2: out dx, al; blue 0,31 or 63 mov al, 0 test ah, 1 @@ -52,7 +57,9 @@ paletteVGA: test ah, 8 jz palvgalbl3 add al, 32 - palvgalbl3: +;-------------------------------------- +align 4 +palvgalbl3: out dx, al; green 0,31 or 63 add ah, 1 loop palvganew @@ -60,59 +67,76 @@ paletteVGA: ; mov ax, 0005h ; out dx, ax ret - +;------------------------------------------------------------------------------ +align 4 palette320x200: - mov edx, 0x3c8 xor eax, eax out dx, al mov ecx, 256 mov edx, 0x3c9 xor eax, eax - - palnew: +;-------------------------------------- +align 4 +palnew: mov al, 0 test ah, 64 jz pallbl1 add al, 21 - pallbl1: +;-------------------------------------- +align 4 +pallbl1: test ah, 128 jz pallbl2 add al, 42 - pallbl2: +;-------------------------------------- +align 4 +pallbl2: out dx, al mov al, 0 test ah, 8 jz pallbl3 add al, 8 - pallbl3: +;-------------------------------------- +align 4 +pallbl3: test ah, 16 jz pallbl4 add al, 15 - pallbl4: +;-------------------------------------- +align 4 +pallbl4: test ah, 32 jz pallbl5 add al, 40 - pallbl5: +;-------------------------------------- +align 4 +pallbl5: out dx, al mov al, 0 test ah, 1 jz pallbl6 add al, 8 - pallbl6: +;-------------------------------------- +align 4 +pallbl6: test ah, 2 jz pallbl7 add al, 15 - pallbl7: +;-------------------------------------- +align 4 +pallbl7: test ah, 4 jz pallbl8 add al, 40 - pallbl8: +;-------------------------------------- +align 4 +pallbl8: out dx, al add ah, 1 loop palnew - ret +;------------------------------------------------------------------------------ align 4 uglobal novesachecksum dd 0x0 @@ -123,13 +147,12 @@ uglobal temp: .cx dd 0 endg +;------------------------------------------------------------------------------ align 4 checkVga_N13: - cmp [SCR_MODE], dword 0x13 jne @f -; cnvl: pushad cmp [EGA_counter], 1 je novesal @@ -137,21 +160,28 @@ checkVga_N13: cmp ecx, [novesachecksum] jne novesal popad - @@: +;-------------------------------------- +align 4 +@@: ret - - novesal: +;-------------------------------------- +align 4 +novesal: mov [novesachecksum], ecx mov ecx, 0 movzx eax, word [MOUSE_Y] cmp eax, 100 jge m13l3 mov eax, 100 - m13l3: +;-------------------------------------- +align 4 +m13l3: cmp eax, 480-100 jbe m13l4 mov eax, 480-100 - m13l4: +;-------------------------------------- +align 4 +m13l4: sub eax, 100 imul eax, 640*4 add ecx, eax @@ -159,11 +189,15 @@ checkVga_N13: cmp eax, 160 jge m13l1 mov eax, 160 - m13l1: +;-------------------------------------- +align 4 +m13l1: cmp eax, 640-160 jbe m13l2 mov eax, 640-160 - m13l2: +;-------------------------------------- +align 4 +m13l2: sub eax, 160 shl eax, 2 add ecx, eax @@ -173,7 +207,9 @@ checkVga_N13: mov edx, 200 mov ecx, 320 cld - m13pix: +;-------------------------------------- +align 4 +m13pix: lodsd test eax, eax jz .save_pixel @@ -188,7 +224,9 @@ checkVga_N13: and ebx, (128+64)*256*256; red shr ebx, 8+8 add eax, ebx - .save_pixel: +;-------------------------------------- +align 4 +.save_pixel: stosb loop m13pix mov ecx, 320 @@ -198,17 +236,18 @@ checkVga_N13: mov [EGA_counter], 0 popad ret - +;------------------------------------------------------------------------------ +align 4 VGA_drawbackground: ; draw all - cmp [SCR_MODE], dword 0x12 - jne .end pushad mov esi, [LFBAddress] mov edi, VGABasePtr mov ebx, 640/32; 640*480/(8*4) mov edx, 480 - @@: +;-------------------------------------- +align 4 +@@: push ebx edx esi edi shl edx, 9 lea edx, [edx+edx*4] @@ -221,9 +260,9 @@ VGA_drawbackground: jnz @r call VGA_draw_long_line_1 popad - .end: ret - +;------------------------------------------------------------------------------ +align 4 VGA_draw_long_line: mov dx, 3ceh mov ax, 0ff08h @@ -231,7 +270,9 @@ VGA_draw_long_line: out dx, ax mov ax, 0005h out dx, ax - m12pix: +;-------------------------------------- +align 4 +m12pix: call VGA_draw_32_pixels dec ebx jnz m12pix @@ -246,7 +287,8 @@ VGA_draw_long_line: out dx, al sti ret - +;------------------------------------------------------------------------------ +align 4 VGA_draw_32_pixels: xor eax, eax mov ebp, VGA_8_pixels @@ -255,9 +297,13 @@ VGA_draw_32_pixels: mov [ebp+8], eax mov [ebp+12], eax mov ch, 4 - .main_loop: +;-------------------------------------- +align 4 +.main_loop: mov cl, 8 - .convert_pixels_to_VGA: +;-------------------------------------- +align 4 +.convert_pixels_to_VGA: lodsd ; eax = 24bit colour test eax, eax jz .end @@ -273,14 +319,18 @@ VGA_draw_32_pixels: cmp al, 170 jbe .p13green or [ebp+12], ch - .p13green: +;-------------------------------------- +align 4 +.p13green: cmp ah, 85 jbe .p13red or [ebp+4], ch cmp ah, 170 jbe .p13red or [ebp+12], ch - .p13red: +;-------------------------------------- +align 4 +.p13red: shr eax, 8 cmp ah, 85 jbe .p13cont @@ -288,11 +338,15 @@ VGA_draw_32_pixels: cmp ah, 170 jbe .p13cont or [ebp+12], ch - .p13cont: +;-------------------------------------- +align 4 +.p13cont: ror eax, 8 mov ch, ah inc cl - .end: +;-------------------------------------- +align 4 +.end: dec cl jnz .convert_pixels_to_VGA inc ebp @@ -303,7 +357,9 @@ VGA_draw_32_pixels: mov esi, ebp mov dx, 3c4h mov ah, 1h - @@: +;-------------------------------------- +align 4 +@@: mov al, 02h out dx, ax xchg ax, bp @@ -316,12 +372,25 @@ VGA_draw_32_pixels: add edi, 4 pop esi ret - +;------------------------------------------------------------------------------ +align 4 VGA_putpixel: ; eax = x ; ebx = y mov ecx, eax mov eax, [esp+32-8+4] ; color +;-------------------------------------- + push ecx + shl ecx, 16 + mov cx, bx +; check mouse area for putpixel + test eax, 0x04000000 + jnz @f + call [_display.check_mouse] +;-------------------------------------- +align 4 +@@: + pop ecx shl ebx, 9 lea ebx, [ebx+ebx*4] ; умножение на 5 lea edx, [ebx+ecx*4] ; + x*BytesPerPixel (Vesa2.0 32) @@ -343,6 +412,8 @@ VGA_putpixel: cmp al, 170 jbe .p13green or dl, 0x08 +;-------------------------------------- +align 4 .p13green: cmp ah, 85 jbe .p13red @@ -350,6 +421,8 @@ VGA_putpixel: cmp ah, 170 jbe .p13red or dl, 0x08 +;-------------------------------------- +align 4 .p13red: shr eax, 8 cmp ah, 85 @@ -358,6 +431,8 @@ VGA_putpixel: cmp ah, 170 jbe .p13cont or dl, 0x08 +;-------------------------------------- +align 4 .p13cont: ror edx, 8 inc cl @@ -371,14 +446,12 @@ VGA_putpixel: rol edx, 8 mov [edi], dl popfd -;.end: ret - +;------------------------------------------------------------------------------ +align 4 VGA__putimage: ; ecx = size [x|y] ; edx = coordinates [x|y] - cmp [SCR_MODE], dword 0x12 - jne @f pushad rol edx, 16 movzx eax, dx @@ -389,16 +462,14 @@ VGA__putimage: movzx ecx, cx call VGA_draw_bar_1 popad -@@: ret - +;------------------------------------------------------------------------------ +align 4 VGA_draw_bar: ; eax cx ; ebx cy ; ecx xe ; edx ye - cmp [SCR_MODE], dword 0x12 - jne @f pushad sub ecx, eax sub edx, ebx @@ -408,9 +479,9 @@ VGA_draw_bar: and edx, 0xffff call VGA_draw_bar_1 popad -@@: ret - +;------------------------------------------------------------------------------ +align 4 VGA_draw_bar_1: mov [temp.cx], eax mov eax, [TASK_BASE] @@ -429,13 +500,16 @@ VGA_draw_bar_1: mov ebx, ecx shr ebx, 5 inc ebx +;-------------------------------------- +align 4 .main_loop: call VGA_draw_long_line_1 dec edx jnz .main_loop call VGA_draw_long_line_1 ret - +;------------------------------------------------------------------------------ +align 4 VGA_draw_long_line_1: push ebx edx esi edi shl edx, 9 @@ -446,5 +520,4 @@ VGA_draw_long_line_1: call VGA_draw_long_line pop edi esi edx ebx ret - - +;------------------------------------------------------------------------------