GUI: window resizing will scale contents?
BlitzMax Forums/BlitzMax Programming/GUI: window resizing will scale contents?
| ||
| Is it possible using MaxGUI to program so that resizing the window will scale contents that are being drawn to it's canvas? |
| ||
Local Res_W:Int = 320 local Res_H:Int = 240 SetViewport(0,0,GraphicsWidth(),GraphicsHeight()) glLoadIdentity glScalef(Float(GraphicsWidth())/Float(Res_W),Float(GraphicsHeight())/Float(Res_H),1) That helpfull? Just stick Res_W and Res_H to the width and height you created your canvas with, and run it each time the window is resized. |
| ||
| The short answer is no. The long answer is that it is possible to detect the resizing event, you will then need to resize the contents yourself using scaling factors |
| ||
| Here's an example which scales a single image to fill the canvas area. It uses SetViewport and SetScale so you need to ensure you reset these if you have other drawing operations:
AppTitle$="Canvas - Scale image to window"
Const winstyle%=WINDOW_TITLEBAR|WINDOW_RESIZABLE
Global win:TGadget=CreateWindow(AppTitle$, 80, 50, 256, 256 ,Null,winstyle)
Global can:TGadget=CreateCanvas(0,0,win.ClientWidth(),win.ClientHeight(),win)
SetGadgetLayout can,1,1,1,1
SetMinWindowSize win,96,96
RedrawGadget can
Global img:TImage=LoadImage("testimage.png")
If Not img End
Repeat
' DebugLog currentevent.ToString()
Select WaitEvent()
Case EVENT_GADGETPAINT
DrawImageToCanvas img,can
Case EVENT_WINDOWCLOSE
Exit
End Select
Forever
End
' draw an image scaled to fill the canvas
Function DrawImageToCanvas(i:TImage,c:TGadget)
SetGraphics CanvasGraphics(c)
SetViewport 0,0,c.Width,c.Height
Local sx#=Float(c.ClientWidth())/Float(i.Width)
Local sy#=Float(c.ClientHeight())/Float(i.Height)
Cls
SetScale sx,sy
DrawImage i,0,0
Flip
End Function
|
| ||
| Thanks My worries are that this approach will not be fast enough to do every frame? This was done as standard in B+, why is it so difficult in BMX? |
| ||
| It is not difficult. You simply have to change the setscale according the new canvas size, that are 2 simple calculations (width / original_width , height / original_height) Can't see why this should be a problem as it is a regular state setting. |