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
384 lines
8.2 KiB
PHP
384 lines
8.2 KiB
PHP
|
|
nm_control_data_size = 22
|
|
nm_redraw_all = 10000000b
|
|
nm_redraw_off = 01111111b
|
|
nm_special_redraw_on = 100b
|
|
nm_special_redraw_off = 11111011b
|
|
nm_integer_type = 10b
|
|
nm_no_show_number = 1b
|
|
|
|
;****************************************************
|
|
;********************craete Number**********************
|
|
;****************************************************
|
|
;IN
|
|
;pointer to parend
|
|
;pointer to Number's structure
|
|
;OUT
|
|
;pointer to initialized Number's structure
|
|
align 4
|
|
|
|
craete_number:
|
|
|
|
mov ebx,[esp+4]
|
|
mov eax,[esp+8]
|
|
|
|
mov [PointerToStructureForNumber],eax
|
|
|
|
mov eax,control_header_size+nm_control_data_size
|
|
call craete_control
|
|
|
|
;set all image's parameters in control
|
|
mov [eax],dword number
|
|
|
|
mov ecx,nm_control_data_size
|
|
mov esi,[PointerToStructureForNumber]
|
|
mov edi,eax
|
|
add edi,control_header_size
|
|
rep movsb
|
|
|
|
call get_skin_height
|
|
|
|
mov ebx,[PointerToStructureForNumber]
|
|
mov ecx,[ebx+6] ;x
|
|
mov edx,[ebx+10] ;y
|
|
add ecx,border_width
|
|
add edx,[skin_height]
|
|
;copy information to control
|
|
mov [eax+24],ecx
|
|
mov [eax+28],edx
|
|
|
|
ret 8
|
|
|
|
;****************************************************
|
|
;********************Draw Number*********************
|
|
;****************************************************
|
|
;IN
|
|
;pointer to control of number
|
|
;message
|
|
;OUT
|
|
;not returned value
|
|
align 4
|
|
|
|
number:
|
|
|
|
;get message
|
|
mov eax,[esp+8]
|
|
|
|
;get pointer to control of image
|
|
mov esi,[esp+4]
|
|
mov [PointerForNumber],esi
|
|
;copy control to local control
|
|
add esi,control_header_size
|
|
mov edi,dword Number
|
|
mov ecx,nm_control_data_size
|
|
rep movsb
|
|
|
|
|
|
cmp [eax],dword 1
|
|
jne no_redraw_all_number
|
|
|
|
xor ebx,ebx
|
|
mov bl,[Number.type]
|
|
and bl,nm_no_show_number
|
|
test bl,bl
|
|
jnz no_redraw_all_number
|
|
|
|
or [Number.type],nm_redraw_all
|
|
|
|
no_redraw_all_number:
|
|
|
|
cmp [eax],dword 3
|
|
jne no_special_message_for_number
|
|
|
|
xor ebx,ebx
|
|
mov bl,[Number.type]
|
|
and bl,nm_special_redraw_on
|
|
test bl,bl
|
|
jz no_special_message_for_number
|
|
|
|
or [Number.type],nm_redraw_all
|
|
and [Number.type],nm_special_redraw_off
|
|
|
|
no_special_message_for_number:
|
|
|
|
cmp [eax],dword -1
|
|
jne no_destroy_control_of_number
|
|
|
|
jmp exit_number
|
|
no_destroy_control_of_number:
|
|
|
|
;load coordinats and size from control
|
|
mov eax,[PointerForNumber]
|
|
mov ebx,[eax+24] ;x
|
|
mov ecx,[eax+28] ;y
|
|
;set current coordinats and sizes in zakladka
|
|
mov [Number.x],ebx
|
|
mov [Number.y],ecx
|
|
|
|
xor eax,eax
|
|
mov al,[Number.type]
|
|
and al,nm_redraw_all
|
|
test al,al
|
|
jz no_redraw_number_
|
|
|
|
and [Number.type],nm_redraw_off
|
|
|
|
mov esi,dword Number
|
|
mov edi,[PointerForNumber]
|
|
add edi,control_header_size
|
|
mov ecx,2
|
|
rep movsb
|
|
|
|
;get standart colors table
|
|
mov eax,48
|
|
mov ebx,3
|
|
mov ecx,dword pointer2
|
|
mov edx,40
|
|
mcall
|
|
|
|
xor eax,eax
|
|
mov al,[Number.type]
|
|
and al,nm_integer_type
|
|
test al,al
|
|
jnz no_integer_number
|
|
|
|
mov eax,47
|
|
mov ebx,[Number.parameters]
|
|
mov ecx,[Number.number]
|
|
mov edx,[Number.x]
|
|
shl edx,16
|
|
add edx,[Number.y]
|
|
mov esi,[Number.color]
|
|
mov edi,[pointer2+8]
|
|
mcall
|
|
|
|
jmp no_redraw_number_
|
|
no_integer_number:
|
|
;---------------------------------------
|
|
|
|
mov ebx,[Number.parameters]
|
|
mov ecx,ebx
|
|
shr ebx,16 ;format for integer
|
|
and ecx,0xffff ;format for float
|
|
|
|
;get integer part of float number
|
|
mov eax,1
|
|
mov edi,ecx
|
|
pow_10__:
|
|
|
|
;eax=eax*10
|
|
lea eax,[eax+eax*4]
|
|
shl eax,1
|
|
|
|
dec edi
|
|
jnz pow_10__
|
|
mov edx,eax
|
|
|
|
;check for signum
|
|
mov [v2],0
|
|
fld [Number.number]
|
|
fcom [v2]
|
|
fstsw ax
|
|
sahf
|
|
jae no_signum_float_number
|
|
|
|
fabs
|
|
mov [signum_float_number],byte 1
|
|
|
|
no_signum_float_number:
|
|
fstp [Number.number]
|
|
|
|
mov [v2],edx ;v2=10^ecx
|
|
fild [v2]
|
|
fld [Number.number]
|
|
fmul st0,st1
|
|
fistp [v]
|
|
fstp st0
|
|
|
|
mov esi,edx
|
|
mov eax,[v]
|
|
cdq
|
|
idiv esi
|
|
mov [v],eax
|
|
|
|
and [integer_part],0
|
|
and [tochnost1],0
|
|
|
|
;save v in v2
|
|
mov eax,[v]
|
|
mov [v2],eax
|
|
|
|
mov [Number.flag],0
|
|
mov esi,ebx
|
|
get_next_razryd_of_number_integer:
|
|
|
|
mov eax,1
|
|
|
|
mov edi,esi
|
|
pow_10_integer:
|
|
|
|
;eax=eax*10
|
|
lea eax,[eax+eax*4]
|
|
shl eax,1
|
|
|
|
dec edi
|
|
jnz pow_10_integer
|
|
|
|
mov edi,eax
|
|
mov eax,[v]
|
|
cdq
|
|
idiv edi
|
|
and eax,0xf
|
|
|
|
test eax,eax
|
|
jz no_save_pos_for_integer
|
|
|
|
cmp [Number.flag],0
|
|
jne no_save_pos_for_integer
|
|
|
|
mov [Number.flag],1b
|
|
mov [tochnost1],esi
|
|
add [tochnost1],1
|
|
|
|
no_save_pos_for_integer:
|
|
|
|
imul eax,edi
|
|
sub [v],eax
|
|
add [integer_part],eax
|
|
|
|
dec esi
|
|
jnz get_next_razryd_of_number_integer
|
|
mov eax,[v]
|
|
add [integer_part],eax
|
|
|
|
cmp [tochnost1],0
|
|
jnz all_ok_with_tochnost
|
|
|
|
mov [tochnost1],1
|
|
all_ok_with_tochnost:
|
|
|
|
;get float part of float number
|
|
mov eax,[v2]
|
|
mov [v],eax
|
|
|
|
mov eax,1
|
|
mov edi,ecx
|
|
pow_10_float__:
|
|
|
|
;eax=eax*10
|
|
lea eax,[eax+eax*4]
|
|
shl eax,1
|
|
|
|
dec edi
|
|
jnz pow_10_float__
|
|
|
|
mov [v2],eax ;v2=10^ecx
|
|
|
|
fild [v2]
|
|
fild [v]
|
|
fld [Number.number]
|
|
fsub st0,st1
|
|
fmul st0,st2
|
|
fistp [v]
|
|
fstp st0
|
|
fstp st0
|
|
|
|
and [float_part],0
|
|
|
|
mov esi,ecx
|
|
get_next_razryd_of_number_float:
|
|
|
|
mov eax,1
|
|
|
|
mov edi,esi
|
|
pow_10_float:
|
|
|
|
;eax=eax*10
|
|
lea eax,[eax+eax*4]
|
|
shl eax,1
|
|
|
|
dec edi
|
|
jnz pow_10_float
|
|
|
|
mov edi,eax
|
|
mov eax,[v]
|
|
cdq
|
|
idiv edi
|
|
and eax,0xf
|
|
imul eax,edi
|
|
sub [v],eax
|
|
add [float_part],eax
|
|
|
|
dec esi
|
|
jnz get_next_razryd_of_number_float
|
|
mov eax,[v]
|
|
add [float_part],eax
|
|
|
|
mov [tochnost2],ecx
|
|
cmp [signum_float_number],byte 1
|
|
jne no_draw_signum_for_float_number
|
|
|
|
;draw signum
|
|
mov eax,4
|
|
mov ebx,[Number.x]
|
|
mov ecx,[Number.color]
|
|
mov edx,dword signum
|
|
mov esi,1
|
|
mov edi,[pointer2+8]
|
|
shl ebx,16
|
|
add ebx,[Number.y]
|
|
mcall
|
|
|
|
add [Number.x],6
|
|
mov [signum_float_number],0
|
|
no_draw_signum_for_float_number:
|
|
|
|
;draw integer part of float number
|
|
mov eax,47
|
|
mov ebx,[tochnost1]
|
|
mov ecx,[integer_part]
|
|
mov edx,[Number.x]
|
|
mov esi,[Number.color]
|
|
mov edi,[pointer2+8]
|
|
shl edx,16
|
|
shl ebx,16
|
|
add edx,[Number.y]
|
|
mcall
|
|
|
|
mov edx,[tochnost1]
|
|
add edx,1
|
|
lea edx,[edx+edx*2]
|
|
shl edx,1 ;edx=edx*6
|
|
add edx,[Number.x]
|
|
mov [x],edx
|
|
|
|
;draw float part of float number
|
|
mov eax,47
|
|
mov ebx,[tochnost2]
|
|
mov ecx,[float_part]
|
|
mov esi,[Number.color]
|
|
mov edi,[pointer2+8]
|
|
shl edx,16
|
|
shl ebx,16
|
|
add edx,[Number.y]
|
|
mcall
|
|
|
|
;draw point betwen integer part of number and float part of number
|
|
mov eax,4
|
|
mov ebx,[x]
|
|
mov ecx,[Number.color]
|
|
mov edx,dword point
|
|
mov esi,1
|
|
mov edi,[pointer2+8]
|
|
sub ebx,6
|
|
shl ebx,16
|
|
add ebx,[Number.y]
|
|
mcall
|
|
|
|
no_redraw_number_:
|
|
;-----------------------------------------
|
|
|
|
exit_number:
|
|
|
|
ret 8
|