forked from KolibriOS/kolibrios
Movback: Added support window resizing
This commit is contained in:
@@ -1,7 +1,2 @@
|
|||||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
tup.rule("movback.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "movback")
|
||||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
|
||||||
add_include(tup.getvariantdir())
|
|
||||||
|
|
||||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
|
||||||
tup.rule({"movback.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "movback")
|
|
@@ -7,14 +7,18 @@
|
|||||||
include "../../macros.inc"
|
include "../../macros.inc"
|
||||||
include "../../KOSfuncs.inc"
|
include "../../KOSfuncs.inc"
|
||||||
|
|
||||||
WND_SIZE_X = 320
|
KOS_APP_START
|
||||||
WND_SIZE_Y = 200
|
|
||||||
|
Screen_W dd 600-10 ;10 px for borders
|
||||||
|
Screen_H dd 400
|
||||||
|
|
||||||
VC_DELTA = 1
|
VC_DELTA = 1
|
||||||
HC_DELTA = 2
|
HC_DELTA = 2
|
||||||
|
|
||||||
MEOS_APP_START
|
|
||||||
CODE
|
CODE
|
||||||
|
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||||
|
call OnResize
|
||||||
fninit
|
fninit
|
||||||
call init_sinus_table
|
call init_sinus_table
|
||||||
call init_background
|
call init_background
|
||||||
@@ -22,6 +26,7 @@ CODE
|
|||||||
mcall SF_SET_EVENTS_MASK, 101b
|
mcall SF_SET_EVENTS_MASK, 101b
|
||||||
jmp .paint_window
|
jmp .paint_window
|
||||||
|
|
||||||
|
align 4
|
||||||
.event_loop:
|
.event_loop:
|
||||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||||
|
|
||||||
@@ -39,24 +44,63 @@ CODE
|
|||||||
add word [hor_counter],HC_DELTA
|
add word [hor_counter],HC_DELTA
|
||||||
call handle_animation
|
call handle_animation
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
|
mov ecx,[Screen_W]
|
||||||
|
shl ecx,16
|
||||||
|
add ecx,[Screen_H]
|
||||||
|
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
|
||||||
jmp .event_loop
|
jmp .event_loop
|
||||||
|
|
||||||
.paint_window:
|
.paint_window:
|
||||||
mcall SF_THREAD_INFO, proc_info,-1
|
mcall SF_THREAD_INFO, proc_info,-1
|
||||||
|
cmp dword[proc_info.box.height],0
|
||||||
|
je .resize_end
|
||||||
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||||
|
add eax,4
|
||||||
|
sub eax,[proc_info.box.height]
|
||||||
|
neg eax
|
||||||
|
cmp eax,[Screen_H]
|
||||||
|
je .end_h
|
||||||
|
cmp eax,32 ;min height
|
||||||
|
jge @f
|
||||||
|
mov eax,32
|
||||||
|
@@:
|
||||||
|
mov [Screen_H],eax
|
||||||
|
xor eax,eax
|
||||||
|
mov [Screen_W],eax
|
||||||
|
.end_h:
|
||||||
|
|
||||||
|
mov eax,[proc_info.box.width]
|
||||||
|
sub eax,9
|
||||||
|
cmp eax,[Screen_W]
|
||||||
|
je .resize_end
|
||||||
|
cmp eax,64 ;min width
|
||||||
|
jge @f
|
||||||
|
mov eax,64
|
||||||
|
@@:
|
||||||
|
mov [Screen_W],eax
|
||||||
|
|
||||||
|
call OnResize
|
||||||
|
.resize_end:
|
||||||
|
|
||||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||||
|
|
||||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||||
lea ecx,[eax + (100 shl 16) + WND_SIZE_Y+4]
|
lea ecx,[eax + (100 shl 16) +4]
|
||||||
|
add ecx,[Screen_H]
|
||||||
mov edi,title
|
mov edi,title
|
||||||
mcall SF_CREATE_WINDOW, <100,WND_SIZE_X+9>,,0x74000000
|
mov ebx,(100 shl 16)+9
|
||||||
|
add ebx,[Screen_W]
|
||||||
|
mcall SF_CREATE_WINDOW,,,0x73000000
|
||||||
|
|
||||||
test [proc_info.wnd_state], 0x04
|
test [proc_info.wnd_state], 0x04
|
||||||
jnz @f
|
jnz @f
|
||||||
|
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
|
mov ecx,[Screen_W]
|
||||||
@@:
|
shl ecx,16
|
||||||
|
add ecx,[Screen_H]
|
||||||
|
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,<0,0>,8,_palette
|
||||||
|
@@:
|
||||||
mcall SF_REDRAW, SSF_END_DRAW
|
mcall SF_REDRAW, SSF_END_DRAW
|
||||||
|
|
||||||
jmp .event_loop
|
jmp .event_loop
|
||||||
@@ -110,8 +154,16 @@ init_background:
|
|||||||
jne .ib_vertical
|
jne .ib_vertical
|
||||||
ret
|
ret
|
||||||
|
|
||||||
s_OFFX = 0
|
align 4
|
||||||
s_OFFY = 2
|
OnResize:
|
||||||
|
mov ecx,[Screen_W]
|
||||||
|
imul ecx,[Screen_H]
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[virtual_screen_8]
|
||||||
|
mov [virtual_screen_8],eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
s_OFFX = 0
|
||||||
|
s_OFFY = 2
|
||||||
|
|
||||||
handle_animation:
|
handle_animation:
|
||||||
sub esp,4
|
sub esp,4
|
||||||
@@ -125,10 +177,12 @@ handle_animation:
|
|||||||
add ebx,ebx
|
add ebx,ebx
|
||||||
mov ax,[sinetable+ebx]
|
mov ax,[sinetable+ebx]
|
||||||
mov [esp+s_OFFX],ax
|
mov [esp+s_OFFX],ax
|
||||||
mov edi,virtual_screen_8
|
mov edi,[virtual_screen_8]
|
||||||
mov edx,WND_SIZE_Y-1
|
mov edx,[Screen_H]
|
||||||
|
dec edx
|
||||||
.a_ver:
|
.a_ver:
|
||||||
mov ecx,WND_SIZE_X-1
|
mov ecx,[Screen_W]
|
||||||
|
dec ecx
|
||||||
mov bx,[esp+s_OFFY]
|
mov bx,[esp+s_OFFY]
|
||||||
add bx,dx
|
add bx,dx
|
||||||
and ebx,255
|
and ebx,255
|
||||||
@@ -147,26 +201,25 @@ handle_animation:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
DATA
|
DATA
|
||||||
delta_angle dd 0.0245436926066 ; pi/128
|
delta_angle dd 0.0245436926066 ; pi/128
|
||||||
scale_sin dd 128.0
|
scale_sin dd 128.0
|
||||||
|
|
||||||
title db 'MoveBack',0
|
title db 'MoveBack',0
|
||||||
|
|
||||||
UDATA
|
UDATA
|
||||||
ver_counter dd ?
|
ver_counter dd ?
|
||||||
hor_counter dd ?
|
hor_counter dd ?
|
||||||
|
|
||||||
_palette: rd 256
|
_palette: rd 256
|
||||||
|
|
||||||
virtual_screen_8:
|
virtual_screen_8 dd ?
|
||||||
rb WND_SIZE_X*WND_SIZE_Y
|
|
||||||
|
|
||||||
background:
|
background:
|
||||||
rb 256*256
|
rb 256*256
|
||||||
|
|
||||||
sinetable:
|
sinetable:
|
||||||
rw 256
|
rw 256
|
||||||
|
|
||||||
proc_info process_information
|
proc_info process_information
|
||||||
|
|
||||||
MEOS_APP_END
|
KOS_APP_END
|
||||||
|
Reference in New Issue
Block a user