files
KOS_qrcodes/programs/develop/libGUI/src/draw.inc
andrew_programmer 6cdf720037 That new in this version:
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
2007-10-15 10:45:36 +00:00

596 lines
10 KiB
PHP

DrawLine:
mov eax,38
mov ebx,[Line.x1]
mov ecx,[Line.y1]
mov edx,[Line.color]
shl ebx,16
shl ecx,16
add ebx,[Line.x2]
add ecx,[Line.y2]
mcall
ret
DrawPixel:
xor eax,eax
inc al
mov ebx,[Pixel.x]
mov ecx,[Pixel.y]
mov edx,[Pixel.color]
mcall
ret
RectangleContour:
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ebx,[Rectangle.width]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
add ecx,[Rectangle.height]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ebx,[Rectangle.width]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ecx,[Rectangle.height]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
add ebx,[Rectangle.width]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ecx,[Rectangle.height]
mcall
ret
;eax -first color
;ebx- second color
;OUT
;eax - averege color
calculate_average_color:
and eax,0xffffff
and ebx,0xffffff
mov [b_min],al
mov [b_max],bl
shr eax,8
shr ebx,8
mov [g_min],al
mov [g_max],bl
shr eax,8
shr ebx,8
mov [r_min],al
mov [r_max],bl
xor eax,eax
xor ebx,ebx
mov al,[r_max]
mov bl,[r_min]
add eax,ebx
shr eax,1
mov [r],al
xor eax,eax
xor ebx,ebx
mov al,[g_max]
mov bl,[g_min]
add eax,ebx
shr eax,1
mov [g],al
xor eax,eax
xor ebx,ebx
mov al,[b_max]
mov bl,[b_min]
add eax,ebx
shr eax,1
mov [b],al
xor eax,eax
mov al,[r]
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
ret
;eax -color
;ebx- sub value
;OUT
;eax - sabved color
calculate_sabved_color:
and eax,0xffffff
mov [b],al
shr eax,8
mov [g],al
shr eax,8
mov [r],al
sub [r],bl
sub [g],bl
sub [b],bl
xor eax,eax
mov al,[r]
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
ret
DrawString:
mov ebx,[Button.text]
call GetLengthString
mov esi,eax
mov eax,4
mov ebx,[Font.x]
shl ebx,16
add ebx,[Font.y]
mov ecx,[Button.textcolor]
mov edx,[Button.text]
mcall
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_right:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,esi
mov edx,dword pointer
call gradient
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
add ecx,[line_size_y]
mov eax,[line_size_x]
add [line_coordinat_x],eax
mov esi,dword pointer
mov edi,[line_size_x]
next_vertical_line_draw_right:
mov eax,38
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
sub [line_coordinat_x],1
dec edi
jnz next_vertical_line_draw_right
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_left:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,esi
mov edx,dword pointer
call gradient
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
add ecx,[line_size_y]
mov esi,dword pointer
mov edi,[line_size_x]
next_vertical_line_draw_left:
mov eax,38
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
add [line_coordinat_x],1
dec edi
jnz next_vertical_line_draw_left
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_up:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,edi
mov edx,dword pointer
call gradient
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
add ebx,[line_size_x]
mov eax,[line_size_y]
add [line_coordinat_y],eax
mov esi,dword pointer
mov edi,[line_size_y]
next_horizontal_line_draw_up:
mov eax,38
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
sub [line_coordinat_y],1
dec edi
jnz next_horizontal_line_draw_up
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_down:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,edi
mov edx,dword pointer
call gradient
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
add ebx,[line_size_x]
mov esi,dword pointer
mov edi,[line_size_y]
next_horizontal_line_draw_down:
mov eax,38
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
add [line_coordinat_y],1
dec edi
jnz next_horizontal_line_draw_down
ret
;eax -first color
;ebx- second color
;ecx- length of line
;edx- pointer to memory for colors of gradient
gradient:
mov [length],ecx
and eax,0xffffff
and eax,0xffffff
mov [b_min],al
mov [b_max],bl
shr eax,8
shr ebx,8
mov [g_min],al
mov [g_max],bl
shr eax,8
shr ebx,8
mov [r_min],al
mov [r_max],bl
mov eax,[length]
dec eax
mov [v],eax
fild [v]
xor eax,eax
mov al,[r_max]
sub al,[r_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_r]
xor eax,eax
mov al,[g_max]
sub al,[g_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_g]
xor eax,eax
mov al,[b_max]
sub al,[b_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_b]
fstp [v]
xor eax,eax
mov al,[r_min]
mov [r],al
mov [v],eax
fild [v]
fstp [r_f]
xor eax,eax
mov al,[g_min]
mov [g],al
mov [v],eax
fild [v]
fstp [g_f]
xor eax,eax
mov al,[b_min]
mov [b],al
mov [v],eax
fild [v]
fstp [b_f]
next_gradient_color_save:
xor ebx,ebx
xor eax,eax
mov al,[r]
mov bl,al
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
mov [edx],ax
mov [edx+2],bl
fld [step_r]
fld [r_f]
fadd st0,st1
fst [r_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [r],al
fstp [v]
fld [step_g]
fld [g_f]
fadd st0,st1
fst [g_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [g],al
fstp [v]
fld [step_b]
fld [b_f]
fadd st0,st1
fst [b_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [b],al
fstp [v]
add edx,3
dec ecx
jnz next_gradient_color_save
ret
;IN
;NON
;OUT
;variable [skin_height]
get_skin_height:
pushad
mov eax,48
mov ebx,4
int 0x40
mov [skin_height],eax
popad
ret
;eax - x
;ebx - y
;ecx - size x
;edx - size y
;esi - pointer to memory for rectangle
SaveFonForRectangle:
mov [Rectangle.x],eax
mov [Rectangle.y],ebx
mov [Rectangle.width],ecx
mov [Rectangle.height],edx
mov [PointerToMem],esi
;get bytes per string
mov eax,61
mov ebx,2
mcall
mov [BitsPerPixel],eax
mov eax,61
mov ebx,3
mcall
mov [BytesPerString],eax
;get window coordinats
mov eax,9
mov ebx,dword IPC_table
or ecx,-1
mcall
mov eax,dword[IPC_table+34]
mov ebx,dword[IPC_table+38]
;mov ecx,dword[IPC_table+42]
;mov edx,dword[IPC_table+46]
;mov [WindowCoordinatX],eax
;mov [WindowCoordinatY],ebx
;mov [WindowSizeX],ecx
;mov [WindowSizeY],edx
add eax,[Rectangle.x]
add ebx,[Rectangle.y]
imul ebx,[BytesPerString]
mov esi,[Rectangle.width]
cmp [BitsPerPixel],24
jne no_24
lea eax,[eax+eax*2]
lea esi,[esi+esi*2]
mov edi,3
jmp exit_bits_per_pixel
no_24:
shl eax,2
shl esi,2
mov edi,4
exit_bits_per_pixel:
add eax,ebx
mov ebx,[BytesPerString]
sub ebx,esi
mov [offset],ebx
mov esi,[PointerToMem]
mov edx,[Rectangle.height]
next_string_pixels_save:
mov ecx,[Rectangle.width]
next_pixel_save:
mov ebx,[gs:eax]
and ebx,0xffffff
mov [esi],bx
shr ebx,16
mov [esi+2],bl
add esi,3
add eax,edi
dec ecx
jnz next_pixel_save
add eax,[offset]
dec edx
jnz next_string_pixels_save
exit_:
ret