ResizeScreen()
Posted: Tue Jul 12, 2011 8:19 am
A small example, what i want. I render the screen on a Containergadget, so i can "resize" the screen-size while autostretch is activated. I do this, because i want the correct aspect ration, so a circle is stll a circle and not a ellipse for exaple.
(windos directx only)
it would be easier with a
resizeWindowedScreen(top,left,bottom,right)
(windos directx only)
Code: Select all
#screenw=320
#screenh=200
#win_main=0
#gadget_screen=1
Procedure ResizeContainer()
menuheight=MenuHeight()
w= WindowWidth(#win_main)
h= WindowHeight(#win_main) - MenuHeight
If Int(#ScreenW * h/#ScreenH) <= w
sw=Int(#ScreenW * h/#ScreenH)
sh=h
Else
sw=w
sh=Int(#ScreenH * w/#ScreenW)
EndIf
sx=Int(w-sw)/2
sy=Int(h-sh)/2+MenuHeight()
ResizeGadget(#gadget_screen,sx,sy,sw,sh)
EndProcedure
If InitSprite() = 0
MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
End
EndIf
If OpenWindow(#win_main, 0, 0, 320, 200, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
;CreateStatusBar(0, WindowID(0))
; AddStatusBarField(320)
ContainerGadget(1, 0, 0, 320, 200 ,#PB_Container_BorderLess )
;StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
If OpenWindowedScreen(GadgetID(1), 0, 0, 320, 200, 1, 0, 00)
CreateSprite(0, 50, 50) ; Erstellt ein leeres Sprites, dies wird komplett schwarz sein
Repeat
; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
;
Repeat
Event = WindowEvent():Delay(0)
If event=#PB_Event_SizeWindow
ResizeContainer()
ElseIf Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 200)) ; Ein blauer Hintergrund
DisplaySprite(0, 10, 10) ; Darstellung unserer schwarzen Box in der linken oberen Ecke
DisplaySprite(0, 260, 10) ; Darstellung unserer schwarzen Box in der rechten oberen Ecke
ForEver
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
EndIf
EndIf
resizeWindowedScreen(top,left,bottom,right)