Canvas Refresh when resizing a window
BlitzMax Forums/MaxGUI Module/Canvas Refresh when resizing a window
| ||
| Hi there, I have the following program:
SuperStrict
Local MyWindow:TGadget=CreateWindow("Canvas Example", 200,200,320,240)
Local MyCanvas:TGadget=CreateCanvas(0,0,ClientWidth(MyWindow),ClientHeight(MyWindow),MyWindow)
SetGadgetLayout MyCanvas,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics (MyCanvas)
Cls
DrawRect 20,20,50,80
Flip
End Select
Forever
Problem is: when I resize I have garbage on the bottom and on the right of the canvas... I think the real canvas zone is not resized but I am not able to tweak this program to make it work.... Can somebody help me? thanks in advance. |
| ||
Try this example:
SuperStrict
Local window:TGadget = CreateWindow("",200,100,400,400)
Local canvas:TGadget = CreateCanvas(0, 0, ClientWidth(window), ClientHeight(window), window)
SetGadgetLayout canvas, EDGE_CENTERED, EDGE_ALIGNED, EDGE_CENTERED, EDGE_ALIGNED
SetGraphics CanvasGraphics(canvas)
Local rectsize:Int = 33
Repeat
PollEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_WINDOWSIZE
SetGadgetShape(canvas, 0, 0, ClientWidth(window), ClientHeight(window))
SetViewport 0, 0, ClientWidth(window), ClientHeight(window)
RedrawGadget(canvas)
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas)
Cls
EndSelect
SetColor Rnd(255), 0, 0
DrawRect Rand(GadgetWidth(canvas) - rectsize), Rand(GadgetHeight(canvas) - rectsize), rectsize ,rectsize
Flip
Forever
|
| ||
| I found that I needed to delete a canvas and create a new larger one when the window size was increased. Is the SetViewPort command the one that solves the problem? |
| ||
| Yes, it will set the drawing area to the correct one. Problem with resizing is that you alter the viewable area, but not the area that the graphic context will actually draw onto :) thats what setviewport is for. |
| ||
| thanks for the tip. |
| ||
| Use SetGraphics CanvasGraphics(canvas) before each render. |
| ||
| Sorry to bring back an old topic, but I was just trying this, and the method Grisu posted has a nasty side effect of changing the origin, so that it is no longer in the top left corner. I draw text at 0,0 then as I resize the window bigger, the text moves down the window, even though it is suppose to be drawn at 0,0/. My solution was to do this: FreeGadget(Canvas) Canvas=CreateCanvas(0,0,ClientWidth(Window),ClientHeight(Window),Window) SetGadgetLayout (Canvas, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED, EDGE_ALIGNED) SetGraphics(CanvasGraphics(Canvas)) This leaves the origin in the upper left where it belongs. Is there something I am missing with the other method? Also, why would you need to call "SetGraphics CanvasGraphics(canvas)" before each render? |