Nifty trick with canvas

BlitzPlus Forums/BlitzPlus Programming/Nifty trick with canvas

skn3(Posted 2003) [#1]
You can make a windowed game, that will run at any resolution... (yet still retain to a speciffic game resolution)

Global GfxWidth =ClientWidth(Desktop())
Global GfxHeight=ClientHeight(Desktop())

Const ResWidth# =640
Const ResHeight#=480

Win   =CreateWindow("Test",0,0,GfxWidth,GfxHeight,0,0)
Buffer=CreateCanvas(0,0,ResWidth#,ResHeight#,Win)
BackgroundBuffer=CreateCanvas(0,0,GfxWidth,GfxHeight,Win)
SetBuffer CanvasBuffer(Buffer)

TextString$="This is a test"
SetFont(LoadFont("Arial",58,True,False,False))
Color 255,255,255
Text (ResWidth#/2)-(StringWidth(TextString$)/2),(ResHeight#/2)-(StringHeight(TextString$)/2),TextString$

For i=1 To 30
	Color Rand(0,255),Rand(0,255),Rand(0,255)
	Size=Rand(0,250)
	Oval Rand(0,ResWidth),Rand(0,ResHeight),Size,Size,0
Next

SizeVertStep#=Float#(GfxHeight)/Float#(GfxWidth)
SizeVert#=0
For SizeHorz#=0 To GfxWidth Step 1
	SetBuffer CanvasBuffer(Buffer)
	SetGadgetShape(Buffer,(GfxWidth/2)-(SizeHorz#/2),(GfxHeight/2)-(SizeVert#/2),SizeHorz#,SizeVert#)
	SizeVert#=SizeVert#+SizeVertStep#
	FlipCanvas(Buffer)
	MoveMouse gfxwidth+200,gfxheight+200
	Delay 1
Next


SetGadgetShape(Buffer,0,0,GfxWidth,GfxHeight)
Repeat
	Select WaitEvent()
		Case $803 : End
		Case $202
			Color 255,0,0
			Rect 0,0,640,480,0
			FlipCanvas(Buffer)
		Case $203
			SetBuffer CanvasBuffer(Buffer)
			Cls
			TextString$="MouseX="+MouseX()+" MouseY="+MouseY()
			SetFont(LoadFont("Arial",58,True,False,False))
			Color 255,255,255
			Text (ResWidth#/2)-(StringWidth(TextString$)/2),(ResHeight#/2)-(StringHeight(TextString$)/2),TextString$
			
			For i=1 To 5
				Color Rand(0,255),Rand(0,255),Rand(0,255)
				Size=Rand(0,250)
				Oval Rand(0,ResWidth),Rand(0,ResHeight),Size,Size,0
			Next
			Color 255,255,255
			Rect 0,0,reswidth#,resheight#,0
			FlipCanvas(Buffer)
			SetGadgetShape(Buffer,0,0,MouseX(),MouseY())
	End Select
Forever