forked from KolibriOS/kolibrios
Libs-dev: libio, libini, libgfx, libimg
git-svn-id: svn://kolibrios.org@717 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
442
programs/develop/libraries/libs-dev/libgfx/libgfx.asm
Normal file
442
programs/develop/libraries/libs-dev/libgfx/libgfx.asm
Normal file
@@ -0,0 +1,442 @@
|
||||
;;================================================================================================;;
|
||||
;;//// libgfx.asm //// (c) mike.dld, 2006-2008 ///////////////////////////////////////////////////;;
|
||||
;;================================================================================================;;
|
||||
;; ;;
|
||||
;; This file is part of Common development libraries (Libs-Dev). ;;
|
||||
;; ;;
|
||||
;; Libs-Dev is free software: you can redistribute it and/or modify it under the terms of the GNU ;;
|
||||
;; General Public License as published by the Free Software Foundation, either version 3 of the ;;
|
||||
;; License, or (at your option) any later version. ;;
|
||||
;; ;;
|
||||
;; Libs-Dev is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without ;;
|
||||
;; even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;
|
||||
;; General Public License for more details. ;;
|
||||
;; ;;
|
||||
;; You should have received a copy of the GNU General Public License along with Libs-Dev. If not, ;;
|
||||
;; see <http://www.gnu.org/licenses/>. ;;
|
||||
;; ;;
|
||||
;;================================================================================================;;
|
||||
|
||||
|
||||
format MS COFF
|
||||
|
||||
public @EXPORT as 'EXPORTS'
|
||||
|
||||
include '../../../../proc32.inc'
|
||||
include '../../../../macros.inc'
|
||||
purge section;mov,add,sub
|
||||
|
||||
include 'libgfx_p.inc'
|
||||
|
||||
section '.flat' code readable align 16
|
||||
|
||||
mem.alloc dd ?
|
||||
mem.free dd ?
|
||||
mem.realloc dd ?
|
||||
dll.load dd ?
|
||||
|
||||
;;================================================================================================;;
|
||||
proc lib_init ;///////////////////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? Library entry point (called after library load) ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> eax = pointer to memory allocation routine ;;
|
||||
;> ebx = pointer to memory freeing routine ;;
|
||||
;> ecx = pointer to memory reallocation routine ;;
|
||||
;> edx = pointer to library loading routine ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< eax = 1 (fail) / 0 (ok) (library initialization result) ;;
|
||||
;;================================================================================================;;
|
||||
mov [mem.alloc], eax
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
mov [dll.load], edx
|
||||
xor eax,eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.open _open? ;////////////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push ebx ecx
|
||||
xor ecx, ecx
|
||||
cmp byte[_open?], 0
|
||||
je .lp1
|
||||
mov eax, 12
|
||||
mov ebx, 1
|
||||
int 0x40
|
||||
jmp @f
|
||||
.lp1: or ecx, GFX_FLAG_DONT_CLOSE
|
||||
@@: invoke mem.alloc, sizeof.AGfxContext
|
||||
xor ebx,ebx
|
||||
mov [eax + AGfxContext.Flags], ecx
|
||||
mov [eax + AGfxContext.NullPoint.X], ebx
|
||||
mov [eax + AGfxContext.NullPoint.Y], ebx
|
||||
mov [eax + AGfxContext.Caret.X], ebx
|
||||
mov [eax + AGfxContext.Caret.Y], ebx
|
||||
mov [eax + AGfxContext.Pen.Color], ebx
|
||||
mov [eax + AGfxContext.Brush.Color], 0x00FFFFFF
|
||||
pop ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.close _ctx ;/////////////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx
|
||||
mov ebx, [_ctx]
|
||||
mov ebx, [ebx + AGfxContext.Flags]
|
||||
invoke mem.free, [_ctx]
|
||||
test ebx, GFX_FLAG_DONT_CLOSE
|
||||
jnz @f
|
||||
mov eax, 12
|
||||
mov ebx, 2
|
||||
int 0x40
|
||||
@@: pop ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.pen.color _ctx, _color ;/////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_ctx]
|
||||
push [_color]
|
||||
pop [eax + AGfxContext.Pen.Color]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.brush.color _ctx, _color ;///////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_ctx]
|
||||
push [_color]
|
||||
pop [eax + AGfxContext.Brush.Color]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.pixel _ctx, _x, _y ;/////////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx edx
|
||||
mov eax, 1
|
||||
mov ebx, [_x]
|
||||
mov ecx, [_y]
|
||||
mov edx, [_ctx]
|
||||
mov edx, [edx + AGfxContext.Pen.Color]
|
||||
int 0x40
|
||||
pop edx ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.move.to _ctx, _x, _y ;///////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_ctx]
|
||||
push [_x] [_y]
|
||||
pop [eax + AGfxContext.Caret.Y] [eax+AGfxContext.Caret.X]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.line.to _ctx, _x, _y ;///////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_ctx]
|
||||
stdcall gfx.line, eax, [eax + AGfxContext.Caret.X], [eax + AGfxContext.Caret.Y], [_x], [_y]
|
||||
pop eax
|
||||
stdcall gfx.move.to, [_ctx], [_x], [_y]
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.line _ctx, _x1, _y1, _x2, _y2 ;//////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx edx
|
||||
mov eax, 38
|
||||
mov ebx, [_x1 - 2]
|
||||
mov bx, word[_x2]
|
||||
mov ecx, [_y1 - 2]
|
||||
mov cx, word[_y2]
|
||||
mov edx, [_ctx]
|
||||
mov edx, [edx + AGfxContext.Pen.Color]
|
||||
int 0x40
|
||||
pop edx ecx ebx eax
|
||||
stdcall gfx.move.to, [_ctx], [_x2], [_y2]
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.polyline _ctx, _points, _count ;/////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ecx
|
||||
mov eax, [_points]
|
||||
stdcall gfx.move.to, [_ctx], [eax + 0], [eax + 4]
|
||||
mov ecx, [_count]
|
||||
dec ecx
|
||||
add eax, 8
|
||||
stdcall gfx.polyline.to, [_ctx], eax, ecx
|
||||
pop ecx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.polyline.to _ctx, _points, _count ;//////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ecx
|
||||
mov eax, [_points]
|
||||
mov ecx, [_count]
|
||||
@@: stdcall gfx.line.to, [_ctx], [eax + 0], [eax + 4]
|
||||
add eax, 8
|
||||
loop @b
|
||||
pop ecx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.fillrect _ctx, _x1, _y1, _x2, _y2 ;//////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx edx
|
||||
mov eax, 13
|
||||
mov ebx, [_x1 - 2]
|
||||
mov bx, word[_x2]
|
||||
sub bx, word[_x1]
|
||||
inc bx
|
||||
mov ecx, [_y1 - 2]
|
||||
mov cx, word[_y2]
|
||||
sub cx, word[_y1]
|
||||
inc cx
|
||||
mov edx, [_ctx]
|
||||
mov edx, [edx + AGfxContext.Brush.Color]
|
||||
int 0x40
|
||||
pop edx ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.fillrect.ex _ctx, _rect ;////////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_rect]
|
||||
stdcall gfx.fillrect, [_ctx], [eax + ARect.Left], [eax + ARect.Top], \
|
||||
[eax + ARect.Right], [eax + ARect.Bottom]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.framerect _ctx, _x1, _y1, _x2, _y2 ;/////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
stdcall gfx.move.to, [_ctx], [_x1], [_y1]
|
||||
stdcall gfx.line.to, [_ctx], [_x2], [_y1]
|
||||
stdcall gfx.line.to, [_ctx], [_x2], [_y2]
|
||||
stdcall gfx.line.to, [_ctx], [_x1], [_y2]
|
||||
stdcall gfx.line.to, [_ctx], [_x1], [_y1]
|
||||
pop edx ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.framerect.ex _ctx, _rect ;///////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_rect]
|
||||
stdcall gfx.framerect, [_ctx], [eax + ARect.Left], [eax + ARect.Top], \
|
||||
[eax + ARect.Right], [eax + ARect.Bottom]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.rectangle _ctx, _x1, _y1, _x2, _y2 ;/////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
stdcall gfx.framerect, [_ctx], [_x1], [_y1], [_x2], [_y2]
|
||||
push [_y2] [_x2] [_y1] [_x1]
|
||||
inc dword[esp + 0x00]
|
||||
inc dword[esp + 0x04]
|
||||
dec dword[esp + 0x08]
|
||||
dec dword[esp + 0x0C]
|
||||
stdcall gfx.fillrect, [_ctx]
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.rectangle.ex _ctx, _rect ;///////////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax
|
||||
mov eax, [_rect]
|
||||
stdcall gfx.rectangle, [_ctx], [eax + ARect.Left], [eax + ARect.Top], \
|
||||
[eax + ARect.Right], [eax + ARect.Bottom]
|
||||
pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.text _ctx, _text, _len, _x, _y ;/////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.text.width _ctx, _text, _len ;///////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
proc gfx.text.height _ctx, _text, _len ;//////////////////////////////////////////////////////////;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;? --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;> --- TBD --- ;;
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
;;================================================================================================;;
|
||||
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
|
||||
;;================================================================================================;;
|
||||
;! Exported functions section ;;
|
||||
;;================================================================================================;;
|
||||
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
|
||||
;;================================================================================================;;
|
||||
|
||||
|
||||
align 16
|
||||
@EXPORT:
|
||||
|
||||
export \
|
||||
lib_init , 'lib_init' , \
|
||||
0x01000000 , 'version' , \
|
||||
gfx.open , 'gfx.open' , \
|
||||
gfx.close , 'gfx.close' , \
|
||||
gfx.pen.color , 'gfx.pen.color' , \
|
||||
gfx.brush.color , 'gfx.brush.color' , \
|
||||
gfx.pixel , 'gfx.pixel' , \
|
||||
gfx.move.to , 'gfx.move.to' , \
|
||||
gfx.line.to , 'gfx.line.to' , \
|
||||
gfx.line , 'gfx.line' , \
|
||||
gfx.polyline , 'gfx.polyline' , \
|
||||
gfx.polyline.to , 'gfx.polyline.to' , \
|
||||
gfx.fillrect , 'gfx.fillrect' , \
|
||||
gfx.fillrect.ex , 'gfx.fillrect.ex' , \
|
||||
gfx.framerect , 'gfx.framerect' , \
|
||||
gfx.framerect.ex , 'gfx.framerect.ex' , \
|
||||
gfx.rectangle , 'gfx.rectangle' , \
|
||||
gfx.rectangle.ex , 'gfx.rectangle.ex'
|
Reference in New Issue
Block a user