[MAXGUI]Scrolling image on Canvas

BlitzMax Forums/BlitzMax Tutorials/[MAXGUI]Scrolling image on Canvas

assari(Posted 2006) [#1]
I thought I take a diversion from writing my MaxGUI Beginner Tutorial Series to write a short tutorial on how to scroll images using the scroll bars on a MaxGUI canvas. I've seen a few questions on this topic on the forums so I hope this will be useful to somebody.

http://2dgamecreators.com/maxgui/Scrolling%20Canvas.html


Booticus(Posted 2006) [#2]
Amazing! Thanks for all your hard work towards the MaxGUI tutorials and your examples like this one. You really are cool!


assari(Posted 2006) [#3]
Thank you for the nice comments.


Grisu(Posted 2014) [#4]
This only works with OpenGL or the latest DX11 module. Otherwise you get an DX error... "D3DERR: Unable to lock render target surface"!

SuperStrict

Framework MaxGui.Drivers
	Import BRL.Max2D
	Import BRL.Pixmap
	Import BRL.Graphics
	Import Maxgui.ProxyGadgets
	Import Brl.EventQueue
	Import Brl.Pixmap  
	Import Brl.Pngloader
	Import Brl.Jpgloader

	Import SRS.D3D11Max2D
	Import BRL.D3D7Max2D
	Import BRL.D3D9Max2D
	Import BRL.GLGraphics
	Import BRL.GLMax2D

' Working...

'SetGraphicsDriver GLMax2DDriver()
'SetGraphicsDriver D3D11Max2DDriver()

'D3DERR: Unable To lock render target surface

'SetGraphicsDriver D3D9Max2DDriver()
'SetGraphicsDriver D3D7Max2DDriver()

Local Pix:TPixmap=LoadPixmap("image2.jpg")
Local MyWindow:TGadget=CreateWindow("Scrolling Canvas Example",  100, 10, 400,400)
Local MyPanel:TGadget=CreatePanel(30, 20, 320, 240, MyWindow, PANEL_ACTIVE|PANEL_BORDER)

Local CanvasHeight:Int=600
Local CanvasWidth:Int=800
Local MyCanvas:TGadget=CreateCanvas(0, 0, CanvasWidth, CanvasHeight, MyPanel)
SetGraphics CanvasGraphics(MyCanvas)
DrawPixmap Pix,0,0

Local ImgX:Int=0
Local ImgY:Int=0

Local VScroller:TGadget=CreateSlider(GadgetWidth(MyPanel)+30, 20, 20, GadgetHeight(MyPanel), MyWindow, SLIDER_VERTICAL)
Local HScroller:TGadget=CreateSlider(30,GadgetHeight(MyPanel)+20, GadgetWidth(MyPanel), 20, MyWindow, SLIDER_HORIZONTAL)
SetSliderRange VScroller, GadgetHeight(MyPanel), CanvasHeight
SetSliderRange HScroller, GadgetWidth(MyPanel), CanvasWidth


Repeat
  WaitEvent()
  Select EventID()
  Case EVENT_WINDOWCLOSE
     End

  Case EVENT_GADGETACTION
     Select EventSource()
        Case HScroller
          ImgX=EventData()
        Case VScroller
           ImgY=EventData()
        End Select         
     RedrawGadget(MyCanvas)

  Case EVENT_GADGETPAINT
    SetGraphics CanvasGraphics (MyCanvas)
    SetGadgetShape MyCanvas,-ImgX, -ImgY,GadgetWidth(MyCanvas),GadgetHeight(MyCanvas)    
    Flip
   End Select
   SetStatusText MyWindow, "ImgX="+ImgX+", ImgY="+ImgY
Forever