OpenWindowScreen auf Continergadget - Geht das mit Linux und

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

OpenWindowScreen auf Continergadget - Geht das mit Linux und

Beitrag von GPI »

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:

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 
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: OpenWindowScreen auf Continergadget - Geht das mit Linux

Beitrag von NicTheQuick »

Also unter Linux läuft dein Code. Blauer Hintergrund und zwei schwarze Boxen. Wenn ich das Fenster resize, rückt der Container allerdings nach unten. Vermutlich, weil du da irgendwas mit der Menühöhe rumrechnest. Aber er passt sich sonst immer richtig an. Der blaue Screen im Container behält allerdings seine Größe. Also auf Autostretch wird nicht reagiert.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: OpenWindowScreen auf Continergadget - Geht das mit Linux

Beitrag von GPI »

hmmm.... kannst du das mal unter windows laufen lassen und vergleichen (wine oder so?) - unter windows verändert sich der blaue screen je nach fenstergröße. Er wird halt seitenverhältnisgerecht vergrößert und stößt immer an den Fensterrand an - nur oben halt nicht, da ist platz für das Menü ;)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: OpenWindowScreen auf Continergadget - Geht das mit Linux

Beitrag von NicTheQuick »

Windows mit installiertem PB habe ich gerade nicht da und bin jetzt auch zu faul das einzurichten. Muss gerade Mathe machen. :wink:
Antworten