1,4 → 1,8 |
;************************************************************** |
; 2016, 0CodErr |
; Added border styles(raised, sunken, etched, ridged). |
; Added possibility to fill frame background. |
;************************************************************** |
; Frame Macro for Kolibri OS |
; Copyright (c) 2013, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
28,7 → 32,6 |
macro frame_start |
{ |
pusha |
mov edi,dword [esp+36] |
} |
;***************************************************************************** |
macro frame_exit |
39,21 → 42,22 |
;***************************************************************************** |
macro use_frame |
{ |
fr equ [esp + 36] |
frame: |
fr_type equ [edi] ;dword |
fr_size_x equ [edi+4] ;word |
fr_start_x equ [edi+6] ;word |
fr_size_y equ [edi+8] ;word |
fr_start_y equ [edi+10] ;word |
fr_ext_fr_col equ [edi+12] ;dword |
fr_int_fr_col equ [edi+16] ;dword |
fr_draw_text_flag equ [edi+20] ;dword 0-not,1-yes |
fr_text_pointer equ [edi+24] ;dword |
fr_text_position equ [edi+28] ;dword 0-up,1-bottom |
fr_font_number equ [edi+32] ;dword 0-monospace,1-variable |
fr_font_size_y equ [edi+36] ;dword |
fr_font_color equ [edi+40] ;dword |
fr_font_backgr_color equ [edi+44] ;dword |
fr_type equ [eax + FR_STYLE] ; dword |
fr_size_x equ [eax + FR_WIDTH] ; word |
fr_start_x equ [eax + FR_LEFT] ; word |
fr_size_y equ [eax + FR_HEIGHT] ; word |
fr_start_y equ [eax + FR_TOP] ; word |
fr_ext_fr_col equ [eax + FR_OUTER_COLOR] ; dword |
fr_int_fr_col equ [eax + FR_INNER_COLOR] ; dword |
fr_flags equ [eax + FR_FLAGS] ; dword |
fr_text_pointer equ [eax + FR_TEXT] ; dword |
fr_text_position equ [eax + FR_TEXT_POSITION] ; dword |
fr_font_number equ [eax + FR_FONT] ; dword |
fr_font_size_y equ [eax + FR_FONT_HEIGHT] ; dword |
fr_font_color equ [eax + FR_FORE_COLOR] ; dword |
fr_font_backgr_color equ [eax + FR_BACK_COLOR] ; dword |
;***************************************************************************** |
;***************************************************************************** |
; draw event |
62,97 → 66,156 |
align 4 |
.draw: |
frame_start |
;------------------------------------- |
; in |
; ebx = [coordinate on axis x]*65536 + [size on axis x] |
; ecx = [coordinate on axis y]*65536 + [size on axis y] |
;-------------------------------------- |
; top |
mov eax, fr |
mov edx, fr_ext_fr_col |
mov edi, fr_int_fr_col |
mov esi, edx |
mov ebp, edi |
mov eax, fr_flags |
and eax, 1110b |
.raised: |
cmp eax, FR_RAISED |
je .border_style_selected |
.sunken: |
cmp eax, FR_SUNKEN |
jne .etched |
xchg edx, edi |
xchg esi, ebp |
jmp .border_style_selected |
.etched: |
cmp eax, FR_ETCHED |
jne .ridged |
xchg edx, edi |
jmp .border_style_selected |
.ridged: |
cmp eax, FR_RIDGED |
jne .double |
xchg esi, ebp |
jmp .border_style_selected |
.double: |
cmp eax, FR_DOUBLE |
jne .border_style_selected |
mov edi, edx |
mov esi, ebp |
.border_style_selected: |
; Outer Top Line |
mov eax, fr |
mov bx,fr_start_x |
mov cx, fr_start_y |
shl ebx,16 |
mov bx,fr_start_x |
add bx,fr_size_x |
dec bx |
|
mov cx,fr_start_y |
shl ecx,16 |
mov bx, fr_size_x |
add bx, fr_start_x |
sub ebx, 1 |
mov cx,fr_start_y |
|
mcall 38,,,fr_ext_fr_col |
|
add ecx,1 shl 16 +1 |
add ebx,1 shl 16 |
dec ebx |
|
mcall ,,,fr_int_fr_col |
;-------------------------------------- |
; bottom |
mov eax, 38 |
int 64 |
; Outer Left Line |
mov eax, fr |
mov bx,fr_start_x |
shl ebx,16 |
add cx, fr_size_y |
sub ecx, 1 |
mov eax, 38 |
int 64 |
; Inner Top Line |
mov eax, fr |
mov bx,fr_start_x |
add bx,fr_size_x |
dec bx |
|
mov cx,fr_start_y |
add cx,fr_size_y |
dec cx |
add ebx, 1 |
add ecx, 1 |
shl ebx, 16 |
shl ecx,16 |
mov bx, fr_size_x |
mov cx,fr_start_y |
add bx, fr_start_x |
sub ebx, 2 |
add ecx, 1 |
mov edx, esi |
mov eax, 38 |
int 64 |
; Inner Left Line |
mov eax, fr |
mov bx, fr_start_x |
add cx,fr_size_y |
dec cx |
|
mcall ,,,fr_ext_fr_col |
|
sub ecx,1 shl 16 +1 |
add ebx,1 shl 16 |
dec ebx |
|
mcall ,,,fr_int_fr_col |
;-------------------------------------- |
; left |
mov bx,fr_start_x |
add ebx, 1 |
sub ecx, 3 |
mov edx, esi |
mov eax, 38 |
int 64 |
; Outer Bottom Line |
mov eax, fr |
mov bx, fr_size_x |
mov cx, fr_size_y |
add bx, fr_start_x |
add cx, fr_start_y |
sub ebx, 1 |
sub ecx, 1 |
shl ebx,16 |
mov bx,fr_start_x |
|
mov cx,fr_start_y |
shl ecx,16 |
mov cx,fr_start_y |
add cx,fr_size_y |
dec cx |
|
mcall ,,,fr_ext_fr_col |
|
add ebx,1 shl 16 +1 |
add ecx,1 shl 16 |
dec ecx |
|
mcall ,,,fr_int_fr_col |
|
;-------------------------------------- |
; right |
mov bx,fr_start_x |
mov cx, fr_size_y |
add cx, fr_start_y |
sub ecx, 1 |
mov edx, edi |
mov eax, 38 |
int 64 |
; Outer Right Line |
mov eax, fr |
add bx,fr_size_x |
dec bx |
sub ebx, 1 |
mov cx, fr_start_y |
mov edx, edi |
mov eax, 38 |
int 64 |
; Inner Bottom Line |
mov eax, fr |
mov bx, fr_size_x |
mov cx, fr_size_y |
add bx, fr_start_x |
add cx, fr_start_y |
sub ebx, 2 |
sub ecx, 2 |
shl ebx,16 |
shl ecx, 16 |
mov bx,fr_start_x |
mov cx, fr_size_y |
add cx, fr_start_y |
add ebx, 1 |
sub ecx, 2 |
mov edx, ebp |
mov eax, 38 |
int 64 |
; Inner Right Line |
mov eax, fr |
mov cx, fr_start_y |
add bx,fr_size_x |
dec bx |
sub ebx, 3 |
add ecx, 1 |
mov edx, ebp |
mov eax, 38 |
int 64 |
;---------------------------------------------------------------------- |
mov eax, fr |
test dword fr_flags, FR_FILLED |
je .fill_exit |
|
mov bx, fr_start_x |
mov cx,fr_start_y |
add ebx, 2 |
add ecx, 2 |
shl ebx, 16 |
shl ecx,16 |
mov cx,fr_start_y |
add cx,fr_size_y |
dec cx |
|
mcall ,,,fr_ext_fr_col |
|
sub ebx,1 shl 16 +1 |
add ecx,1 shl 16 |
dec ecx |
|
mcall ,,,fr_int_fr_col |
mov bx, fr_size_x |
mov cx, fr_size_y |
sub ebx, 4 |
sub ecx, 4 |
mov edx, fr_font_backgr_color |
mov eax, 13 |
int 64 |
.fill_exit: |
;---------------------------------------------------------------------- |
cmp fr_draw_text_flag,dword 0 |
mov eax, fr |
test dword fr_flags, FR_CAPTION |
je .exit |
|
mov ecx,0xC0000000 |
160,6 → 223,7 |
and eax,11b |
shl eax,28 |
add ecx,eax |
mov eax, fr |
mov eax,fr_font_color |
and eax,0xffffff |
add ecx,eax |
171,6 → 235,7 |
|
xor esi,esi |
|
mov eax, fr |
mov bx,fr_start_x |
add bx,10 |
shl ebx,16 |
194,10 → 259,9 |
;-------------------------------------- |
align 4 |
.draw_1: |
push edi |
mov edi,eax |
mov edx,fr_text_pointer |
mov edi,fr_font_backgr_color |
mcall 4 |
pop edi |
;---------------------------------------------------------------------- |
align 4 |
.exit: |