forked from KolibriOS/kolibrios
pixlib 0.2
git-svn-id: svn://kolibrios.org@881 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
193
programs/develop/sdk/trunk/pixlib/demo3.asm
Normal file
193
programs/develop/sdk/trunk/pixlib/demo3.asm
Normal file
@@ -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:
|
||||
|
Reference in New Issue
Block a user