From 63cd6f0ac856a8e9adb19393aaf2f19c53134da0 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 17 Mar 2025 00:43:15 +0200 Subject: [PATCH] Movback: Added support window resizing --- programs/demos/movback/Tupfile.lua | 7 +- programs/demos/movback/movback.asm | 107 +++++++++++++++++++++-------- 2 files changed, 81 insertions(+), 33 deletions(-) diff --git a/programs/demos/movback/Tupfile.lua b/programs/demos/movback/Tupfile.lua index dd4f17306..01198600b 100644 --- a/programs/demos/movback/Tupfile.lua +++ b/programs/demos/movback/Tupfile.lua @@ -1,7 +1,2 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") -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") +tup.rule("movback.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "movback") \ No newline at end of file diff --git a/programs/demos/movback/movback.asm b/programs/demos/movback/movback.asm index 040a9714b..ee5e5712e 100644 --- a/programs/demos/movback/movback.asm +++ b/programs/demos/movback/movback.asm @@ -7,14 +7,18 @@ include "../../macros.inc" include "../../KOSfuncs.inc" -WND_SIZE_X = 320 -WND_SIZE_Y = 200 +KOS_APP_START + +Screen_W dd 600-10 ;10 px for borders +Screen_H dd 400 VC_DELTA = 1 HC_DELTA = 2 -MEOS_APP_START + CODE + mcall SF_SYS_MISC,SSF_HEAP_INIT + call OnResize fninit call init_sinus_table call init_background @@ -22,6 +26,7 @@ CODE mcall SF_SET_EVENTS_MASK, 101b jmp .paint_window +align 4 .event_loop: mcall SF_WAIT_EVENT_TIMEOUT, 1 @@ -39,24 +44,63 @@ CODE add word [hor_counter],HC_DELTA call handle_animation xor ebp,ebp - mcall SF_PUT_IMAGE_EXT, virtual_screen_8,,<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 .paint_window: 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_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 - 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 jnz @f xor ebp,ebp - mcall SF_PUT_IMAGE_EXT, virtual_screen_8,,<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 jmp .event_loop @@ -110,8 +154,16 @@ init_background: jne .ib_vertical ret -s_OFFX = 0 -s_OFFY = 2 +align 4 +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: sub esp,4 @@ -125,10 +177,12 @@ handle_animation: add ebx,ebx mov ax,[sinetable+ebx] mov [esp+s_OFFX],ax - mov edi,virtual_screen_8 - mov edx,WND_SIZE_Y-1 + mov edi,[virtual_screen_8] + mov edx,[Screen_H] + dec edx .a_ver: - mov ecx,WND_SIZE_X-1 + mov ecx,[Screen_W] + dec ecx mov bx,[esp+s_OFFY] add bx,dx and ebx,255 @@ -147,26 +201,25 @@ handle_animation: ret DATA - delta_angle dd 0.0245436926066 ; pi/128 - scale_sin dd 128.0 + delta_angle dd 0.0245436926066 ; pi/128 + scale_sin dd 128.0 - title db 'MoveBack',0 + title db 'MoveBack',0 UDATA - ver_counter dd ? - hor_counter dd ? + ver_counter dd ? + hor_counter dd ? - _palette: rd 256 + _palette: rd 256 - virtual_screen_8: - rb WND_SIZE_X*WND_SIZE_Y + virtual_screen_8 dd ? - background: - rb 256*256 +background: + rb 256*256 - sinetable: - rw 256 +sinetable: + rw 256 - proc_info process_information + proc_info process_information -MEOS_APP_END +KOS_APP_END