Apps/tube: Added support for window resizing
This commit is contained in:
@@ -20,11 +20,13 @@ include '../../KOSfuncs.inc'
|
|||||||
|
|
||||||
title db 'Tube - FPU',0
|
title db 'Tube - FPU',0
|
||||||
|
|
||||||
SCREEN_W equ (640-10) ;10 px for borders
|
SCREEN_W dd 640-10 ;10 px for borders
|
||||||
SCREEN_H equ (400-10)
|
SCREEN_H dd 400-10
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
START:
|
START:
|
||||||
|
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||||
|
call OnResize
|
||||||
call draw_window
|
call draw_window
|
||||||
call init_tube
|
call init_tube
|
||||||
push ebx
|
push ebx
|
||||||
@@ -47,8 +49,19 @@ still:
|
|||||||
|
|
||||||
mcall SF_TERMINATE_PROCESS
|
mcall SF_TERMINATE_PROCESS
|
||||||
|
|
||||||
EYE equ EYE_P-4
|
align 4
|
||||||
|
OnResize:
|
||||||
|
mov ecx,[SCREEN_W]
|
||||||
|
imul ecx,[SCREEN_H]
|
||||||
|
;ecx = SCREEN_W*SCREEN_H
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[PIXBUF]
|
||||||
|
mov [PIXBUF],eax
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf1]
|
||||||
|
mov [buf1],eax
|
||||||
|
lea ecx,[ecx+2*ecx]
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf2]
|
||||||
|
mov [buf2],eax
|
||||||
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
MAIN:
|
MAIN:
|
||||||
@@ -56,17 +69,27 @@ MAIN:
|
|||||||
;ebp - coord x
|
;ebp - coord x
|
||||||
;edi - pixel buffer
|
;edi - pixel buffer
|
||||||
add ebx,10 shl 8
|
add ebx,10 shl 8
|
||||||
mov edi,PIXBUF
|
mov edi,[PIXBUF]
|
||||||
fadd dword [TEXUV-4]
|
fadd dword [TEXUV-4]
|
||||||
push edi
|
push edi
|
||||||
mov edx,-SCREEN_H/2
|
mov edx,[SCREEN_H]
|
||||||
|
inc edx ;fix (height%2)==1
|
||||||
|
shr edx,1
|
||||||
|
neg edx ;edx=-SCREEN_H/2
|
||||||
|
align 4
|
||||||
TUBEY:
|
TUBEY:
|
||||||
mov ebp,-SCREEN_W/2
|
mov ebp,[SCREEN_W]
|
||||||
|
inc ebp ;fix (width%2)==1
|
||||||
|
shr ebp,1
|
||||||
|
neg ebp ;ebp=-SCREEN_W/2
|
||||||
|
align 4
|
||||||
TUBEX:
|
TUBEX:
|
||||||
mov esi,TEXUV
|
mov esi,TEXUV
|
||||||
fild word [EYE]
|
fild dword [SCREEN_W]
|
||||||
|
fld1
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fdivp ;st0=SCREEN_W/2
|
||||||
mov [esi],ebp
|
mov [esi],ebp
|
||||||
fild word [esi]
|
fild word [esi]
|
||||||
mov [esi],edx
|
mov [esi],edx
|
||||||
@@ -123,18 +146,22 @@ STORE_1:
|
|||||||
add [edi],al
|
add [edi],al
|
||||||
inc edi
|
inc edi
|
||||||
inc ebp
|
inc ebp
|
||||||
cmp ebp,SCREEN_W/2
|
mov eax,[SCREEN_W]
|
||||||
|
shr eax,1 ;eax=SCREEN_W/2
|
||||||
|
cmp ebp,eax
|
||||||
|
|
||||||
EYE_P:
|
|
||||||
jnz TUBEX
|
jnz TUBEX
|
||||||
inc edx
|
inc edx
|
||||||
cmp edx,SCREEN_H/2
|
mov eax,[SCREEN_H]
|
||||||
|
shr eax,1 ;eax=SCREEN_H/2
|
||||||
|
cmp edx,eax
|
||||||
jnz TUBEY
|
jnz TUBEY
|
||||||
|
|
||||||
call display_image
|
call display_image
|
||||||
|
|
||||||
pop esi
|
pop esi
|
||||||
mov ecx,SCREEN_H*SCREEN_W
|
mov ecx,[SCREEN_W]
|
||||||
|
imul ecx,[SCREEN_H]
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
BLUR:
|
BLUR:
|
||||||
@@ -148,8 +175,11 @@ align 4
|
|||||||
display_image:
|
display_image:
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov esi,PIXBUF
|
mov esi,[PIXBUF]
|
||||||
mov edi,buf2
|
mov edi,[buf2]
|
||||||
|
mov eax,[SCREEN_W]
|
||||||
|
imul eax,[SCREEN_H]
|
||||||
|
add eax,esi
|
||||||
align 4
|
align 4
|
||||||
newp:
|
newp:
|
||||||
movzx edx,byte [esi]
|
movzx edx,byte [esi]
|
||||||
@@ -160,11 +190,14 @@ newp:
|
|||||||
add edi,3
|
add edi,3
|
||||||
inc esi
|
inc esi
|
||||||
|
|
||||||
cmp esi,PIXBUF+SCREEN_W*SCREEN_H
|
cmp esi,eax
|
||||||
jbe newp
|
jbe newp
|
||||||
|
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
mcall SF_PUT_IMAGE,buf2,<SCREEN_W,SCREEN_H>
|
mov ecx,[SCREEN_W]
|
||||||
|
shl ecx,16
|
||||||
|
add ecx,[SCREEN_H]
|
||||||
|
mcall SF_PUT_IMAGE,[buf2]
|
||||||
|
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
@@ -176,9 +209,41 @@ draw_window:
|
|||||||
|
|
||||||
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
|
||||||
add eax,SCREEN_H
|
add eax,[SCREEN_H]
|
||||||
lea ecx,[100*65536+4+eax]
|
lea ecx,[100*65536+4+eax]
|
||||||
mcall SF_CREATE_WINDOW,100*65536+SCREEN_W+9,, 0x74000000,,title
|
mov ebx,[SCREEN_W]
|
||||||
|
add ebx,(100 shl 16)+9
|
||||||
|
mcall SF_CREATE_WINDOW,,, 0x73000000,,title
|
||||||
|
|
||||||
|
mcall SF_THREAD_INFO,procinfo,-1
|
||||||
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||||
|
add eax,4
|
||||||
|
sub eax,[procinfo.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,[procinfo.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_END_DRAW
|
mcall SF_REDRAW, SSF_END_DRAW
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
@@ -191,6 +256,7 @@ TEXUV:
|
|||||||
align 4
|
align 4
|
||||||
init_tube:
|
init_tube:
|
||||||
mov ecx,256
|
mov ecx,256
|
||||||
|
mov edi,[buf1]
|
||||||
|
|
||||||
PAL1:
|
PAL1:
|
||||||
mov edx,3C8h
|
mov edx,3C8h
|
||||||
@@ -210,7 +276,7 @@ PAL2:
|
|||||||
|
|
||||||
PAL3:
|
PAL3:
|
||||||
mov ebx,ecx
|
mov ebx,ecx
|
||||||
mov [ebx+buf1],bh
|
mov [ebx+edi],bh
|
||||||
loop PAL1
|
loop PAL1
|
||||||
mov ecx,256
|
mov ecx,256
|
||||||
|
|
||||||
@@ -221,11 +287,11 @@ TEX:
|
|||||||
mov dh,al
|
mov dh,al
|
||||||
sar dh,5
|
sar dh,5
|
||||||
adc dl,dh
|
adc dl,dh
|
||||||
adc dl,[ebx+255+buf1]
|
adc dl,[ebx+255+edi]
|
||||||
shr dl,1
|
shr dl,1
|
||||||
mov [ebx+buf1],dl
|
mov [ebx+edi],dl
|
||||||
not bh
|
not bh
|
||||||
mov [ebx+buf1],dl
|
mov [ebx+edi],dl
|
||||||
loop TEX
|
loop TEX
|
||||||
|
|
||||||
fninit
|
fninit
|
||||||
@@ -236,9 +302,10 @@ TEX:
|
|||||||
align 4
|
align 4
|
||||||
image_end:
|
image_end:
|
||||||
|
|
||||||
PIXBUF rb SCREEN_W*SCREEN_H
|
PIXBUF rd 1
|
||||||
buf1 rb SCREEN_W*SCREEN_H
|
buf1 rd 1
|
||||||
buf2 rb SCREEN_W*SCREEN_H*3
|
buf2 rd 1
|
||||||
|
procinfo process_information
|
||||||
|
|
||||||
rb 1024
|
rb 1024
|
||||||
align 4
|
align 4
|
||||||
|
Reference in New Issue
Block a user