Canvas size limited to 1024x768 ?
BlitzMax Forums/BlitzMax Beginners Area/Canvas size limited to 1024x768 ?
| ||
| Canvas size seems limited to 1024x768 ? Try this :
Const WWX = 1024
Const WWY = 768
Const W = 2048 ' Canvas Size work only with
Const H = 1024 ' W=1024 and H=768
Local window:TGadget=CreateWindow("",0,0,WWX,WWY, Null, WINDOW_MENU|WINDOW_TITLEBAR)
Local panel:Tgadget = CreatePanel(10,10,WWX-40,WWY-80,window,PANEL_ACTIVE)
Global canvas:TGadget=CreateCanvas(0,0,W,H,panel)
While WaitEvent()
Select EventID()
Case EVENT_TIMERTICK
RedrawGadget canvas
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas)
Cls
SetColor 255,255,255
'...
Flip
Case EVENT_WINDOWCLOSE
FreeGadget canvas
End
Case EVENT_APPTERMINATE
End
End Select
Wend
|
| ||
| I just increased the window size and it worked, I had to set W down because 2048 is too big for my monitor. |
| ||
| In fact i want scroll the canvas inside the windows ! |
| ||
Try this (scrollbars)
Const WWX = 800
Const WWY = 600
Const W = 1024 'not work with 2048x1024 !
Const H = 768
Local window:TGadget=CreateWindow("",0,0,WWX,WWY, Null, WINDOW_MENU|WINDOW_TITLEBAR)
Local panel:Tgadget = CreatePanel(10,10,WWX-40,WWY-80,window,PANEL_ACTIVE)
SetGadgetLayout panel,1,1,1,1
SetPanelColor panel,100,0,200
Local sv:Tgadget = CreateSlider(WWX-30,10,20,WWY-80,window,SLIDER_VERTICAL)
Local sh:Tgadget = CreateSlider(10,WWY-70,WWX-40,20,window,SLIDER_HORIZONTAL)
Global canvas:TGadget=CreateCanvas(0,0,W,H,panel)
SetSliderRange sv,ClientWidth(panel),GadgetWidth(canvas)
SetSliderRange sh,ClientHeight(panel),GadgetHeight(canvas)
While WaitEvent()
Select EventID()
Case EVENT_TIMERTICK
RedrawGadget canvas
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas)
Cls
SetColor 255,255,255
'...
Flip
SetGadgetShape canvas,-SliderValue(sh),-SliderValue(sv),GadgetWidth(canvas),GadgetHeight(canvas)
Case EVENT_MOUSEMOVE
SetSliderRange sh,ClientWidth(panel),GadgetWidth(canvas)
SetSliderRange sv,ClientHeight(panel),GadgetHeight(canvas)
SetGadgetShape canvas,-SliderValue(sh),-SliderValue(sv),GadgetWidth(canvas),GadgetHeight(canvas)
Case EVENT_WINDOWCLOSE
FreeGadget canvas
End
Case EVENT_APPTERMINATE
End
End Select
Wend
|
| ||
| I've adapted the code from a blitzplus program. With blitzplus, you can use large canvas (2048x1024) and more ! bmax limitation ? No info about this into the documentation. |
| ||
| Scrolling a canvas isn't needed, as you can just scroll what's be drawn on the canvas... |
| ||
| @Scienthsine : my prog is a spline editor (path for enemies). For a 1024x768 in-game resolution i need a 1224x1224 working area to position some spline points outside the game area. Perhaps a solution will be to use a large image and scroll it. |
| ||
uhm... the large image seems not be the solution. if i do this i can't use command like 'drawline' ! With an image you can only use writepixel !image=CreateImage(256,1) map=LockImage(image) For i=0 To 255 WritePixel(map,i,0,ALPHABITS|i) Next UnlockImage(image) DrawImageRect image,0,0,640,480 |
| ||
| You only need a canvas as big as what you can display at any one time. Use Scroll bars, and offset your drawing onto the canvas by the scollbars. Yes, somethings won't be drawn because they will run over the canvas, but they would be seen at that point anyway... *sigh* It's as smiple as making 2 scrollbars. Make the value range for the scrollbars to their 'working size'-'canvas actual size'. Then, to all of your drawing commands, subtract the scrollbar's current value from it's draw position. |
| ||
| This sounds like there can only be displayed 1024*768 pixels at one time, doesn't it? But there also screens with 1280*1024 pixels or more. And some Windows systems allow you to have more than one screen in a system - if you've two screens with each 1280*1024 pixels, one left, one right, you'll have 2560*1024 pixels. |
| ||
| I think you are limited to the current screen res for your canvases. Or possibly the highest res that your gfx card can support? |
| ||
| But think of the RedrawGadget example: If the user resizes the window the canvas will be resized too because of its layout. So the user could resize the canvas to sizes bigger than screen resultion and the canvas would "freeze". |
| ||
| That is normal behavior at least for OpenGL which does not support to have higher "canvas" than the actual screensize. |