OpenWindowScreen auf Continergadget - Geht das mit Linux und
Verfasst: 07.07.2011 00:33
Mac?
Problem: Ich möchte ein Windowed-Screen haben und das Fenster soll größenveränderbar sein. Mein Problem ist, das der Screen sein Seitenverhältnis beibehalten soll, so das bspw. ein Kreis immer noch ein Kreis ist. - notfalls soll der Screen halt einen Rand haben (wie bspw. Kinofilme in Fernsehen).
Die unelegante Methode ist, den Screen zu schließen und einen neuen zu eröffnen. Dabei muss ich aber bspw. alle Sprites neu laden - das will ich vermeiden.
Unter Windows kann ich das einfach lösen, indem ich den Screen nicht in ein Fenster, sondern in ein Containergadget öffne. Für Windows ist es ja das ein und das selbe. Nur, läuft das dann auch Mac und Linux?
hier ein Beispielcode:
Problem: Ich möchte ein Windowed-Screen haben und das Fenster soll größenveränderbar sein. Mein Problem ist, das der Screen sein Seitenverhältnis beibehalten soll, so das bspw. ein Kreis immer noch ein Kreis ist. - notfalls soll der Screen halt einen Rand haben (wie bspw. Kinofilme in Fernsehen).
Die unelegante Methode ist, den Screen zu schließen und einen neuen zu eröffnen. Dabei muss ich aber bspw. alle Sprites neu laden - das will ich vermeiden.
Unter Windows kann ich das einfach lösen, indem ich den Screen nicht in ein Fenster, sondern in ein Containergadget öffne. Für Windows ist es ja das ein und das selbe. Nur, läuft das dann auch Mac und Linux?
hier ein Beispielcode:
Code: Alles auswählen
#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