Apps/plasma: Improved code style and readability. Added support for window resizing
This commit is contained in:
@@ -1,48 +1,104 @@
|
|||||||
; Originally written by Jarek Pelczar
|
; Originally written by Jarek Pelczar
|
||||||
include "lang.inc"
|
include "..\..\macros.inc"
|
||||||
include "..\..\..\macros.inc"
|
include "..\..\KOSfuncs.inc"
|
||||||
|
|
||||||
WND_SIZE_X = 320
|
KOS_APP_START
|
||||||
WND_SIZE_Y = 200
|
|
||||||
|
WND_SIZE_X dd 640
|
||||||
|
WND_SIZE_Y dd 400
|
||||||
|
|
||||||
|
title db 'Plasma',0
|
||||||
|
|
||||||
MEOS_APP_START
|
|
||||||
CODE
|
CODE
|
||||||
|
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||||
|
call OnResize
|
||||||
|
|
||||||
fninit
|
fninit
|
||||||
mcall 40,101b
|
mcall SF_SET_EVENTS_MASK, 101b
|
||||||
call init_palette
|
call init_palette
|
||||||
call init_texture
|
call init_texture
|
||||||
jmp .paint_window
|
jmp .paint_window
|
||||||
.event_loop:
|
.event_loop:
|
||||||
mcall 23,1
|
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||||
test eax,eax
|
test eax,eax
|
||||||
je .draw_screen
|
je .draw_screen
|
||||||
dec eax
|
dec eax
|
||||||
je .paint_window
|
je .paint_window
|
||||||
|
|
||||||
or eax,-1
|
mcall SF_TERMINATE_PROCESS
|
||||||
mcall
|
|
||||||
|
|
||||||
.draw_screen:
|
.draw_screen:
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
mov ecx,[WND_SIZE_X]
|
||||||
|
shl ecx,16
|
||||||
|
add ecx,[WND_SIZE_Y]
|
||||||
|
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||||
call rotate_pal
|
call rotate_pal
|
||||||
jmp .event_loop
|
jmp .event_loop
|
||||||
|
|
||||||
.paint_window:
|
.paint_window:
|
||||||
mcall 12,1
|
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||||
|
|
||||||
mcall 48,4 ; get skin height
|
;if window resize
|
||||||
lea ecx,[eax + (110 shl 16) + WND_SIZE_Y + 4]
|
mcall SF_THREAD_INFO,procinfo,-1
|
||||||
|
cmp dword[procinfo.box.height],0
|
||||||
|
je .resize_end
|
||||||
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||||
|
add eax,4
|
||||||
|
sub eax,[procinfo.box.height]
|
||||||
|
neg eax
|
||||||
|
cmp eax,[WND_SIZE_Y]
|
||||||
|
je .end_h
|
||||||
|
cmp eax,32 ;min height
|
||||||
|
jge @f
|
||||||
|
mov eax,32
|
||||||
|
@@:
|
||||||
|
mov [WND_SIZE_Y],eax
|
||||||
|
xor eax,eax
|
||||||
|
mov [WND_SIZE_X],eax
|
||||||
|
.end_h:
|
||||||
|
|
||||||
|
mov eax,[procinfo.box.width]
|
||||||
|
sub eax,9
|
||||||
|
cmp eax,[WND_SIZE_X]
|
||||||
|
je .resize_end
|
||||||
|
cmp eax,64 ;min width
|
||||||
|
jge @f
|
||||||
|
mov eax,64
|
||||||
|
@@:
|
||||||
|
mov [WND_SIZE_X],eax
|
||||||
|
|
||||||
|
call OnResize
|
||||||
|
call init_texture
|
||||||
|
.resize_end:
|
||||||
|
|
||||||
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||||
|
lea ecx,[eax + (110 shl 16) + 4]
|
||||||
|
add ecx,[WND_SIZE_Y]
|
||||||
mov edi,title
|
mov edi,title
|
||||||
mcall 0,<110,WND_SIZE_X+9>,,0x74000000
|
mov ebx,[WND_SIZE_X]
|
||||||
|
add ebx,(110 shl 16)+9
|
||||||
|
mcall SF_CREATE_WINDOW,,,0x73000000
|
||||||
|
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
mov ecx,[WND_SIZE_X]
|
||||||
|
shl ecx,16
|
||||||
|
add ecx,[WND_SIZE_Y]
|
||||||
|
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||||
|
|
||||||
mcall 12,2
|
mcall SF_REDRAW, SSF_END_DRAW
|
||||||
|
|
||||||
jmp .event_loop
|
jmp .event_loop
|
||||||
|
|
||||||
|
align 4
|
||||||
|
OnResize:
|
||||||
|
mov ecx,[WND_SIZE_X]
|
||||||
|
imul ecx,[WND_SIZE_Y]
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_ALLOC,, [virtual_screen_8]
|
||||||
|
mov [virtual_screen_8],eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
init_palette:
|
init_palette:
|
||||||
mov edi,_palette
|
mov edi,_palette
|
||||||
mov ecx,64
|
mov ecx,64
|
||||||
@@ -92,7 +148,7 @@ init_texture:
|
|||||||
mov [_fpom16],180
|
mov [_fpom16],180
|
||||||
fidiv [_fpom16]
|
fidiv [_fpom16]
|
||||||
fstp [_st_rad]
|
fstp [_st_rad]
|
||||||
mov edi,virtual_screen_8
|
mov edi,[virtual_screen_8]
|
||||||
cdq
|
cdq
|
||||||
.itex_vertical:
|
.itex_vertical:
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
@@ -120,10 +176,10 @@ init_texture:
|
|||||||
inc eax
|
inc eax
|
||||||
stosb
|
stosb
|
||||||
inc ecx
|
inc ecx
|
||||||
cmp ecx,WND_SIZE_X
|
cmp ecx,[WND_SIZE_X]
|
||||||
jne .itex_horizontal
|
jne .itex_horizontal
|
||||||
inc edx
|
inc edx
|
||||||
cmp edx,WND_SIZE_Y
|
cmp edx,[WND_SIZE_Y]
|
||||||
jne .itex_vertical
|
jne .itex_vertical
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -141,7 +197,6 @@ rotate_pal:
|
|||||||
DATA
|
DATA
|
||||||
_multiplier dd 63.5
|
_multiplier dd 63.5
|
||||||
|
|
||||||
title db 'Plasma',0
|
|
||||||
|
|
||||||
UDATA
|
UDATA
|
||||||
_fpom32 rd 1
|
_fpom32 rd 1
|
||||||
@@ -149,7 +204,7 @@ UDATA
|
|||||||
_st_rad rd 1
|
_st_rad rd 1
|
||||||
_palette: rd 256
|
_palette: rd 256
|
||||||
|
|
||||||
virtual_screen_8:
|
virtual_screen_8 rd 1
|
||||||
rb WND_SIZE_X*WND_SIZE_Y
|
procinfo process_information
|
||||||
|
|
||||||
MEOS_APP_END
|
KOS_APP_END
|
||||||
|
Reference in New Issue
Block a user