diff --git a/kernel/trunk/gui/font.inc b/kernel/trunk/gui/font.inc index 5828d3c37c..03b28a85d4 100644 --- a/kernel/trunk/gui/font.inc +++ b/kernel/trunk/gui/font.inc @@ -249,44 +249,44 @@ drawChar: inc esi cmp [fontSmoothing], 0 jz .nextPixel -.checkLeftSubP: ; subpixel smoothing +.checkLeftSM: ; smoothing bsf eax, edx dec eax - js .checkRightSubP + js .checkRightSM bt [ebx], eax - jc .checkRightSubP + jc .checkRightSM dec eax - js .checkLeftDownSubP + js .checkLeftDownSM bt [ebx], eax - jc .checkRightSubP -.checkLeftDownSubP: + jc .checkRightSM +.checkLeftDownSM: inc eax bt [ebx+1], eax - jnc .checkLeftUpSubP + jnc .checkLeftUpSM inc eax bt [ebx+1], eax jnc @f bt [ebx-1], eax - jc .checkRightSubP + jc .checkRightSM dec eax dec eax js @f bt [ebx+1], eax jnc @f inc eax -.checkLeftUpSubP: +.checkLeftUpSM: bt [ebx-1], eax - jnc .checkRightSubP + jnc .checkRightSM inc eax bt [ebx-1], eax jnc @f bt [ebx+1], eax - jc .checkRightSubP + jc .checkRightSM dec eax dec eax js @f bt [ebx-1], eax - jc .checkRightSubP + jc .checkRightSM @@: mov ecx, [esp+20+deltaToScreen] mov eax, [edi-4] @@ -301,6 +301,11 @@ drawChar: push ebx edx mov ebx, ebp xor ecx, ecx + cmp [fontSmoothing], 1 + jnz .subpixelLeft + call antiAliasing + jmp @f +.subpixelLeft: mov cl, bl lea edx, [ecx*8+ecx] lea edx, [ecx*2+edx] @@ -332,9 +337,10 @@ drawChar: shr ecx, 3 mov al, cl rol eax, 16 +@@: mov [edi-4], eax pop edx ebx -.checkRightSubP: +.checkRightSM: bsf eax, edx inc eax bt [ebx], eax @@ -343,9 +349,9 @@ drawChar: bt [ebx], eax jc .nextPixel dec eax -.checkRightDownSubP: +.checkRightDownSM: bt [ebx+1], eax - jnc .checkRightUpSubP + jnc .checkRightUpSM dec eax bt [ebx+1], eax jnc @f @@ -356,7 +362,7 @@ drawChar: bt [ebx+1], eax jnc @f dec eax -.checkRightUpSubP: +.checkRightUpSM: bt [ebx-1], eax jnc .nextPixel dec eax @@ -382,6 +388,11 @@ drawChar: push ebx edx mov ebx, ebp xor ecx, ecx + cmp [fontSmoothing], 1 + jnz .subpixelRight + call antiAliasing + jmp @f +.subpixelRight: mov cl, al mov edx, ecx shl ecx, 3 @@ -413,6 +424,7 @@ drawChar: shr edx, 4 mov al, dl rol eax, 16 +@@: mov [edi+4], eax pop edx ebx jmp .nextPixel @@ -756,7 +768,25 @@ drawChar: jnz drawChar ret -fontSmoothing db 1 +antiAliasing: + mov bp, 3 +@@: + mov cl, al + mov dl, bl + lea ecx, [ecx*2+ecx] + add ecx, edx + shr ecx, 2 + mov al, cl + ror eax, 8 + ror ebx, 8 + dec bp + jnz @b + ror eax, 8 + ror ebx, 8 + mov ebp, ebx + ret + +fontSmoothing db 2 font1: if lang eq sp file 'char_sp.mt' diff --git a/kernel/trunk/gui/window.inc b/kernel/trunk/gui/window.inc index cf7cd60259..97d3566cf9 100644 --- a/kernel/trunk/gui/window.inc +++ b/kernel/trunk/gui/window.inc @@ -30,11 +30,8 @@ uglobal draw_limits RECT endg -align 4 ;------------------------------------------------------------------------------ syscall_draw_window: ;///// system function 0 ///////////////////////////////// -;------------------------------------------------------------------------------ -;? . ;------------------------------------------------------------------------------ mov eax, edx shr eax, 24 @@ -49,34 +46,28 @@ syscall_draw_window: ;///// system function 0 ///////////////////////////////// or al, al jnz @f - ; type I - original style +; 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 [draw_pointer] +; type II - only reserve area, no draw call __sys_draw_pointer jmp .exit ;-------------------------------------- -align 4 @@: dec al jnz @f - ; type III - new style +; type III - new style call drawwindow_III jmp window._.draw_window_caption.2 - - ; type IV & V - skinned window (resizable & not) ;-------------------------------------- -align 4 @@: +; type IV & V - skinned window (resizable & not) mov eax, [TASK_COUNT] movzx eax, word[WIN_POS + eax * 2] cmp eax, [CURRENT_TASK] @@ -86,12 +77,9 @@ align 4 call drawwindow_IV jmp window._.draw_window_caption.2 ;-------------------------------------- -align 4 .exit: ret ;------------------------------------------------------------------------------ -align 4 -;------------------------------------------------------------------------------ syscall_display_settings: ;///// system function 48 /////////////////////////// ;------------------------------------------------------------------------------ ;; Redraw screen: @@ -135,77 +123,64 @@ syscall_display_settings: ;///// system function 48 /////////////////////////// ;< ecx = pointer to FileInfoBlock struct ;> eax = FS error code ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;; Set font smoothing: +;; Get font smoothing: ;< ebx = 9 -;< ecx = 0 (off) or !0 (on) +;> eax = 0 — off, 1 — on, 2 — subpixel +; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +;; Set font smoothing: +;< ebx = 10 +;< ecx = 0 — off, 1 — on, 2 — subpixel ;------------------------------------------------------------------------------ cmp ebx, .sizeof.ftable / 4 ja @f jmp [.ftable + ebx * 4] -;-------------------------------------- -align 4 -@@: - ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.00: xor eax, eax inc ebx cmp [windowtypechanged], ebx - jne .exit + jne @f mov [windowtypechanged], eax - jmp syscall_display_settings._.redraw_whole_screen -;-------------------------------------- -align 4 -.exit: - ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.01: and ecx, 1 cmp ecx, [buttontype] - je .exit + je @f mov [buttontype], ecx mov [windowtypechanged], ebx -;-------------------------------------- -align 4 - .exit: +@@: ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.02: dec ebx mov esi, ecx cmp edx, 192 jnae @f mov edx, 192 ; max size - @@: +@@: mov edi, common_colours mov ecx, edx rep movsb mov [windowtypechanged], ebx ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.03: mov edi, ecx cmp edx, 192 jnae @f mov edx, 192 ; max size - @@: +@@: mov esi, common_colours 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] mov ax, word[screen_workarea.right] @@ -215,10 +190,8 @@ syscall_display_settings.05: mov [esp + 20], eax ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.06: xor esi, esi - mov edi, [_display.width] dec edi mov eax, ecx @@ -230,19 +203,13 @@ 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 -;-------------------------------------- -align 4 .check_horizontal: mov edi, [_display.height] dec edi @@ -255,59 +222,48 @@ align 4 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 -;-------------------------------------- -align 4 .check_if_redraw_needed: or esi, esi - jz .exit + jz @f call repos_windows jmp syscall_display_settings._.calculate_whole_screen -;-------------------------------------- -align 4 -.exit: - ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.07: mov eax, [_skinmargins + 0] mov [esp + 32], eax mov eax, [_skinmargins + 4] mov [esp + 20], eax +@@: ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings.08: mov ebx, ecx call read_skin_file mov [esp + 32], eax test eax, eax - jnz .exit + jnz @b call syscall_display_settings._.calculate_whole_screen jmp syscall_display_settings._.redraw_whole_screen -;-------------------------------------- -align 4 -.exit: +;------------------------------------------------------------------------------ +syscall_display_settings.09: + xor eax, eax + mov al, [fontSmoothing] + mov [esp + 32], eax ret ;------------------------------------------------------------------------------ -align 4 -syscall_display_settings.09: +syscall_display_settings.10: mov [fontSmoothing], cl ret ;------------------------------------------------------------------------------ -align 4 syscall_display_settings._.calculate_whole_screen: xor eax, eax xor ebx, ebx @@ -317,7 +273,6 @@ syscall_display_settings._.calculate_whole_screen: dec edx jmp calculatescreen ;------------------------------------------------------------------------------ -align 4 syscall_display_settings._.redraw_whole_screen: xor eax, eax mov [draw_limits.left], eax @@ -331,8 +286,6 @@ syscall_display_settings._.redraw_whole_screen: mov eax, window_data jmp redrawscreen ;------------------------------------------------------------------------------ -align 4 -;------------------------------------------------------------------------------ syscall_set_window_shape: ;///// system function 50 /////////////////////////// ;------------------------------------------------------------------------------ ;; Set window shape address: @@ -1447,7 +1400,7 @@ sys_window_moving_handler: ;/////////////////////////////////////////////////// iglobal FuncTable syscall_display_settings, ftable, \ - 00, 01, 02, 03, 04, 05, 06, 07, 08, 09 + 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10 align 4 window_topleft dd \