Re: box_lib.obj - библиотека gui компонентов
Posted: Sat Oct 19, 2013 9:30 pm
О, спасибо, кое-что начало доходить.
Official KolibriOS board
http://board.kolibrios.org/
Я нигде не нашёл таких требований к этой библиотеке, но, думаю, что лучше было бы переделать.; ............................
mov [.last_esp], esp
; ............................
mov esp, [.last_esp]
; ............................
.last_esp dd 0
Code: Select all
progressbar_draw:
pushad
mov ebp, esp
; draw frame
push ebp
mov [.last_esp], esp
mov eax, pb
mov esi, [eax + PB_LEFT]
mov edi, [eax + PB_TOP]
mov ebp, [eax + PB_WIDTH]
add ebp, esi
dec ebp
mov esp, [eax + PB_HEIGHT]
add esp, edi
dec esp
mov edx, [eax + PB_FRAME_COLOR]
mov eax, 38
mov ebx, esi
shl ebx, 16
add ebx, ebp
mov ecx, edi
shl ecx, 16
add ecx, edi
int 64
mov ecx, esp
shl ecx, 16
add ecx, esp
int 64
mov bx, si
mov ecx, edi
shl ecx, 16
add ecx, esp
int 64
mov ebx, ebp
shl ebx, 16
add ebx, ebp
int 64
mov esp, [.last_esp]
pop ebp
; if min > max then .skip
mov eax, pb
mov edx, [eax + PB_MAX]
mov ecx, [eax + PB_MIN]
cmp ecx, edx
; jg .skip
jne .min_no_eq_max
dec edx
.min_no_eq_max:
; draw all progress rectangle
call get_progress_width
mov edi, eax
mov eax, pb
mov ebx, [eax + PB_LEFT]
inc ebx
shl ebx, 16
add ebx, edi
mov ecx, [eax + PB_TOP]
inc ecx
shl ecx, 16
add ecx, [eax + PB_HEIGHT]
dec ecx
dec ecx
mov edx, [eax + PB_PROGRESS_COLOR]
mov eax, 13
int 64
; draw last part of non-progress rectangle
; edi = pW, esi = W - 2
sub esi, edi ; width
shr ebx, 16
add ebx, edi
shl ebx, 16
add ebx, esi
mov esi, pb
mov edx, [esi + PB_BACK_COLOR]
int 64
; .skip:
popad
ret 4
.last_esp dd 0
Code: Select all
struct slidebox
x dd ? ; 000 ; Начало блока
y dd ? ; 004 ;
width dd ? ; 008 ; Ширина блока (высота равна 20px)
text dd ? ; 012 ; Текст
_button dd ? ; 016 ; 0x60000000 + ID кнопки, автоматически устанавливается библиотекой, МЕНЯТЬ НЕЛЬЗЯ!!!!
on_click dd ? ; 020 ; Адрес процедуры, которая будет вызываться при клике, если 0, то вызывается пустая процедура(определена в библиотеке)
color dd ? ; 024 ; Адрес на структуру system_colors
value db ? ; 028 ; Значение (1/0). Динамически меняется
ends
Code: Select all
use32
org 0x0
;-------------------------------------------------------------------------------
db "MENUET01"
dd 1, @code, @data, @mem, @stack, 0, 0
;-------------------------------------------------------------------------------
include "macros.inc"
include "slidebox_flat.inc"
;===============================================================================
@code:
mcall 48, 3, color, 40
;-------------------------------------------------------------------------------
mov [slidebox1.x], 10
mov [slidebox1.y], 10
mov [slidebox1.width], 226
mov [slidebox1.text], slidebox1_text
mov [slidebox1.value], 0
mov [slidebox1.color], color
push slidebox1
call slidebox.init
;-------------------------------------------------------------------------------
main_loop:
mcall 10
cmp eax, EV_REDRAW
je event_redraw
cmp eax, EV_BUTTON
je event_button
jmp main_loop
;-------------------------------------------------------------------------------
exit:
mcall -1
;-------------------------------------------------------------------------------
event_redraw:
call win.draw
jmp main_loop
;-------------------------------------------------------------------------------
event_button:
mcall 17
cmp ah, 1
je exit
cmp ah, 2
je .header_apply
push slidebox1
push eax
call slidebox.update_button
jmp main_loop
.header_apply:
cmp [slidebox1.value], byte 1
je @f
mcall 71, 1, 0
jmp main_loop
@@:
mcall 71, 1, win.title
jmp main_loop
;-------------------------------------------------------------------------------
win.draw:
mcall 12, 1
mov edx, [color.work]
or edx, 0x34000000
mcall 0, <128, 256>, <128, 96>
mcall 8, <168, 64>, <42, 20>, 2, [color.work_button]
mcall 4, <186, 49>, [color.work_button_text], button1_text, 5
push slidebox1
call slidebox.draw
mcall 12, 2
ret
;===============================================================================
slidebox1_text:
db "Draw header", 0
button1_text:
db "Apply", 0
win.title:
db "Slidebox example", 0
@data:
;===============================================================================
rb 2048
@stack:
;-------------------------------------------------------------------------------
color system_colors
slidebox1 slidebox
@mem:
Code: Select all
use32
org 0x0
;-------------------------------------------------------------------------------
db "MENUET01"
dd 1, @code, @data, @mem, @stack, 0, 0
;-------------------------------------------------------------------------------
include "macros.inc"
include "slidebox.inc"
;===============================================================================
@code:
mcall 48, 3, color, 40
;-------------------------------------------------------------------------------
mov [slidebox1.x], 10
mov [slidebox1.y], 10
mov [slidebox1.width], 226
mov [slidebox1.text], slidebox1_text
mov [slidebox1.value], 0
mov [slidebox1.color], color
mov [slidebox1.on_click], slidebox1.event_click
push slidebox1
call slidebox.init
;-------------------------------------------------------------------------------
main_loop:
mcall 10
cmp eax, EV_REDRAW
je event_redraw
cmp eax, EV_BUTTON
je event_button
jmp main_loop
;-------------------------------------------------------------------------------
exit:
mcall -1
;-------------------------------------------------------------------------------
event_redraw:
call win.draw
jmp main_loop
;-------------------------------------------------------------------------------
event_button:
mcall 17
cmp ah, 0x01
je exit
push slidebox1
push eax
call slidebox.update_button
jmp main_loop
;-------------------------------------------------------------------------------
win.draw:
mcall 12, 1
mov edx, [color.work]
or edx, 0x34000000
mcall 0, <128, 256>, <128, 64>
push slidebox1
call slidebox.draw
mcall 12, 2
ret
;-------------------------------------------------------------------------------
slidebox1.event_click:
cmp [slidebox1.value], byte 1
je @f
mcall 71, 1, 0
ret
@@:
mcall 71, 1, win.title
ret
;===============================================================================
slidebox1_text:
db "Draw header", 0
win.title:
db "Slidebox example", 0
@data:
;===============================================================================
rb 2048
@stack:
;-------------------------------------------------------------------------------
color system_colors
slidebox1 slidebox
@mem: