Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 880 → Rev 881

/programs/develop/sdk/trunk/pixlib/demo3.asm
0,0 → 1,193
 
include 'proc32.inc'
 
struc system_colors
{
.frame dd ?
.grab dd ?
.grab_button dd ?
.grab_button_text dd ?
.grab_text dd ?
.work dd ?
.work_button dd ?
.work_button_text dd ?
.work_text dd ?
.work_graph dd ?
}
 
macro _read_file path, offset, data, count
{
mov eax, dword path
mov ebx, dword data
mov ecx, dword offset
mov edx, dword count
 
push 0
push 0
mov [esp+1], eax
push ebx
push edx
push 0
push ecx
push 0
mov ebx, esp
mov eax, 70
int 0x40
add esp, 28
}
 
use32
 
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd app_path
 
include 'pixlib.inc'
 
align 4
start:
fix_cwd app_path
 
call load_pxlib
test eax, eax
jz .fail
 
mov eax,48 ; get system colors
mov ebx,3
mov ecx,sc
mov edx,10*4
int 0x40
 
CreatePixmap 640, 384, ARGB32, PX_MEM_LOCAL ; animation
mov [pix_0], eax
test eax, eax
jz .fail
 
CreatePixmap 64, 64, ARGB32, PX_MEM_LOCAL ; saved screen
mov [pix_1], eax
test eax, eax
jz .fail
 
CreatePixmap 64, 64, ARGB32, PX_MEM_LOCAL ; back buffer
mov [pix_2], eax
 
Blit [pix_1], 0,0, SCR_PIXMAP, 0,0, 64,64
 
LockPixmap [pix_0]
mov ebx, eax
_read_file szfile, 128, ebx, 640*384*4
UnlockPixmap [pix_0]
 
 
.redraw:
call draw_window
 
.wait_event:
 
mov ebx, 2
mov eax, 23
int 0x40
 
 
dec eax ; if event = 1
jz .redraw ; jump to redraw handler
dec eax ; else if event = 2
jz .key ; jump to key handler
dec eax
jz .button
 
Blit [pix_2], 0,0, [pix_1], 0,0, 64,64
 
mov eax, [count]
inc eax
cmp eax, 60
jb @F
xor eax, eax
@@:
mov [count], eax
 
xor edx, edx
mov ebx, 10
div ebx
 
shl eax, 6
shl edx, 6
 
TransparentBlit [pix_2], 0,0, [pix_0], edx,eax, 64,64 ,0xFF000000
Blit SCR_PIXMAP, 0,0, [pix_2], 0, 0, 64,64
 
jmp .wait_event
 
.button: ; button event handler
mov al, 17 ; get button identifier
int 0x40
 
cmp ah, 1
jne .wait_event ; return if button id != 1
.exit:
; restore old screen and cleanup
 
Blit SCR_PIXMAP, 0,0, [pix_1], 0, 0, 64,64
 
DestroyPixmap [pix_2]
DestroyPixmap [pix_1]
DestroyPixmap [pix_0]
.fail:
or eax, -1 ; exit application
int 0x40
.key: ; key event handler
mov al, 2 ; get key code
int 0x40
 
jmp .wait_event
 
draw_window:
mov eax, 12 ; start drawing
mov ebx, 1
int 0x40
 
xor eax, eax ; create and draw the window
mov ebx, 200*65536+200 ; (window_cx)*65536+(window_sx)
mov ecx, 200*65536+100 ; (window_cy)*65536+(window_sy)
mov edx, [sc.work] ; work area color
or edx, 0x33000000 ; & window type 3
mov edi, title ; window title
int 0x40
 
mov eax, 12 ; finish drawing
mov ebx, 2
int 0x40
 
ret
 
align 4
 
count dd 0
 
title db 'Transparent blit',0
 
szfile db 'donut.dds',0
 
i_end:
 
align 4
 
pix_0 rd 1
pix_1 rd 1
pix_2 rd 1
 
sc system_colors
 
 
align 4
 
app_path:
 
rb 2048 ; stack
mem:
 
/programs/develop/sdk/trunk/pixlib/pixlib.inc
141,6 → 141,24
add esp, 9*4
}
 
macro fix_cwd path
{
pushd path
 
push '/'
push path
call _strrchr
 
mov byte [eax], 0
 
mov eax, 30
mov ebx, 1
mov ecx, [esp+8]
int 0x40
 
add esp, 12
}
 
szPxlib db '/rd/1/lib/pixlib.obj',0
 
szStart db 'START',0
257,4 → 275,31
xor eax, eax
ret
 
 
align 4
_strrchr:
push ebp
mov ebp, esp
push edi
mov edi, [8+ebp]
mov ecx, -1
xor al, al
cld
repne
scasb
not ecx
dec edi
mov al, [12+ebp]
std
repne
scasb
cld
jne .failure
lea eax, [edi+1]
pop edi
pop ebp
ret
.failure:
xor eax, eax
pop edi
pop ebp
ret
/programs/develop/sdk/trunk/pixlib/readme.txt
92,6 → 92,44
 
 
 
void* LockPixmap(handle pixmap)
 
Ïîëó÷èòü äîñòóï ê äàííûì áèòìàïà.
 
pixmap ëîãè÷åñêèé íîìåð áèòìàïà. SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà.
 
 
Áëîêèðîâàíèå áèòìàïà ìîæåò ñíèçèòü áûñòðîäåéñòâèå åñëè áèòìàï
ñîçäàí ñ ôëàãàìè PX_MEM_LOCAL èëè PX_MEM_GART.
 
 
Âîçâðàùàåìîå çíà÷åíèå: óêàçàòåëü íà íà÷àëî äàííûõ áèòìàïà
èëè NULL â ñëó÷àå íåóäà÷è.
 
 
 
 
int GetPixmapPitch(handle pixmap)
 
Ïîëó÷èòü øèðèíó ñòðîêè áèòìàïà â áàéòàõ.
 
pixmap ëîãè÷åñêèé íîìåð áèòìàïà. SCR_PIXMAP äëÿ ïåðâè÷íîãî ýêðàíà.
 
 
Áèòìàï äîëæåí áûòü çàáëîêèðîâàí âûçîâîì LockPixmap
 
Âîçâðàùàåìîå çíà÷åíèå: øèðèíà ñòðîêè áèòìàïà â áàéòàõ èëè 0 â ñëó÷àå íåóäà÷è.
 
 
 
 
int UnlockPixmap(handle pixmap)
 
 
Âîçâðàùàåìîå çíà÷åíèå: ERR_OK â ñëó÷àå óñïåõà èëè ERR_PARAM â ñëó÷àå íåóäà÷è.
 
 
 
int ClearPixmap(handle pixmap, color_t color)
 
Çàïîëíÿåò áèòìàï óêàçàííûì öâåòîì;