6cdf720037
1) Transfer of parameters to functions of library is copied on the convention stdcall. 2) Now functions link on names. 3)Now, if to guide the mouse on a component and to press the left button of the mouse all messages from the mouse are sent only to this component.If to release(let off) the left button of the mouse messages from the mouse again become accessible to all components. 4) In library new functions are added. int Version (void) - to receive the version of library. The version comes back in a format: year + month + day. The current library has version 71014. void RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates. void ResizeComponent (void *Control, int new_sizex, int new_sizey) - changes the size of a component. Examples of use of these functions look in example Bookmark. 5) The example of work with libGUI in programming language C is added. This example is a part of the interface written by me for my scientific program. git-svn-id: svn://kolibrios.org@648 a494cfbc-eb01-0410-851d-a64ba20cac60
506 lines
12 KiB
NASM
506 lines
12 KiB
NASM
;
|
|
;
|
|
; This is example of using GUI component Scroller from libGUI
|
|
;
|
|
;
|
|
|
|
control_hader_size = 44
|
|
control_scroller_data_size = 29
|
|
control_button_data_size = 50
|
|
|
|
first_child_button_pressed = 1b
|
|
second_child_button_pressed = 10000b
|
|
|
|
|
|
include 'macros.inc'
|
|
use32
|
|
db 'MENUET01'
|
|
dd 1
|
|
dd start
|
|
dd i_end
|
|
dd 4000
|
|
dd 4000
|
|
dd 0
|
|
dd path
|
|
|
|
start:
|
|
;init hepe of memory
|
|
mcall 68,11
|
|
;set current dir as ./
|
|
call GetPath
|
|
|
|
;load dll
|
|
mcall 68,19,path
|
|
|
|
test eax,eax
|
|
jnz libGUI_loaded
|
|
|
|
;load dll from system directory
|
|
mcall 68,19,sys_dll_path
|
|
|
|
test eax,eax
|
|
jnz libGUI_loaded
|
|
|
|
mcall -1
|
|
|
|
libGUI_loaded:
|
|
|
|
mov [myexport],eax
|
|
|
|
;load dll functions
|
|
|
|
push fnDestroyControl
|
|
push [myexport]
|
|
call _ksys_cofflib_getproc
|
|
mov [destroy_control],eax
|
|
|
|
push fnSendMessage
|
|
push [myexport]
|
|
call _ksys_cofflib_getproc
|
|
mov [send_message],eax
|
|
|
|
push fnCraeteButton
|
|
push [myexport]
|
|
call _ksys_cofflib_getproc
|
|
mov [craete_button],eax
|
|
|
|
push fnCraeteScroller
|
|
push [myexport]
|
|
call _ksys_cofflib_getproc
|
|
mov [craete_scroller],eax
|
|
|
|
|
|
;set events mask
|
|
mcall 40,1100111b
|
|
|
|
;get standart colors table
|
|
mcall 48,3,ColorsTable,40
|
|
|
|
;*********************************************
|
|
;****************Init Butttons****************
|
|
;*********************************************
|
|
|
|
mov ecx,[ColorsTable+8]
|
|
and ecx,0xffffff
|
|
|
|
mov [ButtonExit.type],byte 10010001b
|
|
mov [ButtonExit.x],90
|
|
mov [ButtonExit.y],160
|
|
mov [ButtonExit.width],word 70
|
|
mov [ButtonExit.height],word 20
|
|
mov [ButtonExit.color1],dword ecx
|
|
mov [ButtonExit.color2],dword 0xffffff
|
|
mov [ButtonExit.text],text
|
|
|
|
|
|
push ButtonExit
|
|
push Parend
|
|
call [craete_button]
|
|
mov [PointerToControlForButtonExit],eax
|
|
|
|
mov ecx,[ColorsTable+8]
|
|
and ecx,0xffffff
|
|
|
|
;********************************************
|
|
;***************Init scrollers****************
|
|
;********************************************
|
|
|
|
;init vertical scroller
|
|
mov ecx,[ColorsTable+8]
|
|
mov [VerticalScroller.type],byte 11100001b
|
|
mov [VerticalScroller.x],10
|
|
mov [VerticalScroller.y],30
|
|
mov [VerticalScroller.pos],0.2
|
|
mov [VerticalScroller.length],200
|
|
mov [VerticalScroller.size],0.9
|
|
mov [VerticalScroller.color1],ecx
|
|
|
|
|
|
push VerticalScroller
|
|
push Parend
|
|
call [craete_scroller]
|
|
mov [PointerToControlForVerticalScroller],eax
|
|
|
|
;init horizontal scroller
|
|
mov ecx,[ColorsTable+8]
|
|
mov [HorizontalScroller.type],byte 11110010b
|
|
mov [HorizontalScroller.x],30
|
|
mov [HorizontalScroller.y],30
|
|
mov [HorizontalScroller.pos],0.7
|
|
mov [HorizontalScroller.length],200
|
|
mov [HorizontalScroller.size],0.3
|
|
mov [HorizontalScroller.color1],0xaabbccff;ecx
|
|
|
|
push HorizontalScroller
|
|
push Parend
|
|
call [craete_scroller]
|
|
mov [PointerToControlForHorizontalScroller],eax
|
|
|
|
call draw_window
|
|
|
|
;send message 1 for redrawing ALL controls
|
|
mov [Message],dword 1
|
|
|
|
push Message
|
|
push Parend
|
|
call [send_message]
|
|
|
|
still:
|
|
mcall 10
|
|
|
|
mov [SystemEvent],eax
|
|
|
|
;-----------------------
|
|
;check for redraw window
|
|
;-----------------------
|
|
|
|
cmp eax,1
|
|
jne no_window
|
|
|
|
call draw_window
|
|
|
|
mov [Message],dword 1
|
|
|
|
push Message
|
|
push Parend
|
|
call [send_message]
|
|
|
|
jmp still
|
|
no_window:
|
|
|
|
;---------------------
|
|
;check for keys events
|
|
;---------------------
|
|
|
|
cmp eax,2
|
|
jne no_keys
|
|
|
|
mcall 2
|
|
shr eax,8
|
|
|
|
mov [Message],dword 2
|
|
mov [Message+4],eax
|
|
|
|
push Message
|
|
push Parend
|
|
call [send_message]
|
|
|
|
mov eax,[Message+4]
|
|
|
|
cmp al,27
|
|
je exit
|
|
|
|
jmp still
|
|
no_keys:
|
|
|
|
;-------------------------
|
|
;check for events of mouse
|
|
;-------------------------
|
|
|
|
cmp eax,3
|
|
jne no_button_close_window
|
|
|
|
|
|
mcall 17
|
|
shr eax,8
|
|
|
|
jmp still
|
|
no_button_close_window:
|
|
|
|
;check for mouse events
|
|
cmp eax,6
|
|
jne no_mouse
|
|
|
|
;craete message of mouse for controls
|
|
mov [Message],dword 6
|
|
|
|
mcall 37,1
|
|
mov ebx,eax
|
|
shr eax,16 ;x
|
|
and ebx,0xffff ;y
|
|
|
|
mov [Message+4],eax
|
|
mov [Message+8],ebx
|
|
|
|
mcall 37,2
|
|
mov [Message+12],eax
|
|
|
|
;send message to controls
|
|
push Message
|
|
push Parend
|
|
call [send_message]
|
|
|
|
;interraction with button exit
|
|
;copy data of scroller of button from control to structure
|
|
|
|
mov esi,[PointerToControlForButtonExit]
|
|
add esi,control_hader_size
|
|
mov edi,ButtonExit
|
|
mov ecx,control_button_data_size
|
|
rep movsb
|
|
|
|
xor eax,eax
|
|
mov al,[ButtonExit.flag]
|
|
|
|
;check button for pressing
|
|
and al,10b
|
|
test al,al
|
|
jz button_3_not_pressed
|
|
|
|
mov [button_pressed],1
|
|
|
|
jmp no_pressed_button
|
|
|
|
button_3_not_pressed:
|
|
|
|
cmp [button_pressed],1
|
|
jne no_pressed_button
|
|
|
|
jmp exit
|
|
no_pressed_button:
|
|
|
|
;interraction with vertical scroller
|
|
|
|
;copy data of vertical scroller from control to structure
|
|
|
|
mov esi,[PointerToControlForVerticalScroller]
|
|
add esi,control_hader_size
|
|
mov edi,VerticalScroller
|
|
mov ecx,control_scroller_data_size
|
|
rep movsb
|
|
|
|
mov eax,[VerticalScroller.pos]
|
|
mov [PosY_float],eax ;position of scroll bar from 0...1
|
|
|
|
xor edx,edx
|
|
call DrawRectangle
|
|
|
|
xor eax,eax
|
|
mov ax,[VerticalScroller.buttons_flags]
|
|
and ax,first_child_button_pressed
|
|
test ax,ax
|
|
jz vertical_first_child_button_not_pressed
|
|
|
|
mov edx,0xff00
|
|
call DrawRectangle
|
|
|
|
vertical_first_child_button_not_pressed:
|
|
|
|
|
|
xor eax,eax
|
|
mov ax,[VerticalScroller.buttons_flags]
|
|
and ax,second_child_button_pressed
|
|
test ax,ax
|
|
jz vertical_second_child_button_not_pressed
|
|
|
|
mov edx,0xff
|
|
call DrawRectangle
|
|
|
|
vertical_second_child_button_not_pressed:
|
|
|
|
;interraction with horizontal scroller
|
|
|
|
;copy data of horizontal scroller from control to structure
|
|
|
|
mov esi,[PointerToControlForHorizontalScroller]
|
|
add esi,control_hader_size
|
|
mov edi,HorizontalScroller
|
|
mov ecx,control_scroller_data_size
|
|
rep movsb
|
|
|
|
xor eax,eax
|
|
mov ax,[HorizontalScroller.buttons_flags]
|
|
and ax,first_child_button_pressed
|
|
test ax,ax
|
|
jz horizontal_first_child_button_not_pressed
|
|
|
|
mov edx,0xffffff
|
|
call DrawRectangle
|
|
|
|
horizontal_first_child_button_not_pressed:
|
|
|
|
xor eax,eax
|
|
mov ax,[HorizontalScroller.buttons_flags]
|
|
and ax,second_child_button_pressed
|
|
test ax,ax
|
|
jz horizontal_second_child_button_not_pressed
|
|
|
|
mov edx,0xff0000
|
|
call DrawRectangle
|
|
|
|
horizontal_second_child_button_not_pressed:
|
|
|
|
jmp still
|
|
no_mouse:
|
|
|
|
jmp still
|
|
|
|
exit:
|
|
|
|
;free resourses
|
|
push [PointerToControlForVerticalScroller]
|
|
call [destroy_control]
|
|
|
|
push [PointerToControlForHorizontalScroller]
|
|
call [destroy_control]
|
|
|
|
push [PointerToControlForButtonExit]
|
|
call [destroy_control]
|
|
|
|
mcall -1
|
|
|
|
;**********************************************
|
|
;*******************Draw window****************
|
|
;**********************************************
|
|
|
|
draw_window:
|
|
|
|
mcall 12,1
|
|
|
|
xor eax,eax
|
|
mov ebx,50
|
|
mov ecx,50
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,280
|
|
add ecx,280
|
|
mov edx,0x03aabbcc
|
|
mov esi,0x805080d0
|
|
mov edi,0x005080d0
|
|
mcall
|
|
|
|
mcall 12,2
|
|
ret
|
|
|
|
|
|
GetPath:
|
|
|
|
mov ebx,255
|
|
mov ecx,path
|
|
|
|
next_symvol:
|
|
mov edx,ecx
|
|
add edx,ebx
|
|
|
|
xor eax,eax
|
|
mov al,[edx]
|
|
cmp eax,'/'
|
|
je exit_path
|
|
|
|
dec ebx
|
|
jnz next_symvol
|
|
|
|
exit_path:
|
|
|
|
inc edx
|
|
mov esi,dll_name
|
|
mov edi,edx
|
|
mov ecx,10
|
|
rep movsb
|
|
|
|
ret
|
|
|
|
DrawRectangle:
|
|
|
|
mov eax,13
|
|
mov ebx,100*65536+50
|
|
mov ecx,100*65536+50
|
|
int 0x40
|
|
|
|
ret
|
|
|
|
include 'getproc.asm'
|
|
|
|
;************************************************************
|
|
;***************************DATA*****************************
|
|
;************************************************************
|
|
|
|
align 4
|
|
|
|
dll_name db 'libGUI.obj',0
|
|
sys_dll_path db '/sys/lib/libGUI.obj',0
|
|
|
|
text db 'Exit',0
|
|
|
|
fnDestroyControl db 'DestroyControl',0
|
|
fnSendMessage db 'SendMessage',0
|
|
fnCraeteButton db 'CraeteButton',0
|
|
fnCraeteScroller db 'CraeteScroller',0
|
|
|
|
myexport dd 0
|
|
|
|
destroy_control dd 0
|
|
send_message dd 0
|
|
craete_button dd 0
|
|
craete_scroller dd 0
|
|
|
|
PointerToControlForButtonExit dd 0
|
|
|
|
PointerToControlForHorizontalScroller dd 0
|
|
PointerToControlForVerticalScroller dd 0
|
|
|
|
|
|
SystemEvent dd 0
|
|
|
|
PosX_float dd 0
|
|
PosY_float dd 0
|
|
|
|
|
|
button_pressed dd 0
|
|
|
|
IPC_table rd 256
|
|
path rb 256
|
|
ColorsTable rd 10
|
|
|
|
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
|
|
Message rd 4
|
|
x dd 0
|
|
y dd 0
|
|
number dd 0
|
|
|
|
struc BUTTON
|
|
{
|
|
.type db 1
|
|
.flag db 1
|
|
.x dw 1
|
|
.y dw 1
|
|
.width dw 1
|
|
.height dw 1
|
|
.image dd 1
|
|
.imageX dw 1
|
|
.imageY dw 1
|
|
.imageSizeX dw 1
|
|
.imageSizeY dw 1
|
|
.transparentColor dd 1
|
|
.text dd 1
|
|
.textX dw 1
|
|
.textY dw 1
|
|
.textcolor dd 1
|
|
.color1 dd 1
|
|
.color2 dd 1
|
|
.mouseX dw 1
|
|
.mouseY dw 1
|
|
}
|
|
|
|
struc SCROLLER
|
|
{
|
|
.type rb 1
|
|
.x rw 1
|
|
.y rw 1
|
|
.length rw 1
|
|
.color1 rd 1
|
|
.size rd 1
|
|
.pos rd 1
|
|
.buttons_flags rw 1
|
|
.ChildButton1 rd 1
|
|
.ChildButton2 rd 1
|
|
.mouseX rw 1
|
|
.mouseY rw 1
|
|
}
|
|
|
|
ButtonExit BUTTON
|
|
VerticalScroller SCROLLER
|
|
HorizontalScroller SCROLLER
|
|
|
|
|
|
i_end: |