Crossplatform scrollable Canvas Gadget (Win + OSX done)
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
It's possible to use a ScrolledWindow (a kind of container that adds scrollbar to the child): http://developer.gnome.org/gtk/2.24/Gtk ... indow.html
But I'd recommend adding scrollbars separately. The scrolled window is really more like a scrollarea gadget in the sense that it pans around on a big gadget.
But I'd recommend adding scrollbars separately. The scrolled window is really more like a scrollarea gadget in the sense that it pans around on a big gadget.
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
The scrolled window requires support from the contained widget to work properly. Adding ScrollBarGadgets manually is probably the simpler solution.
quidquid Latine dictum sit altum videtur
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
It's looking like Linux might well be the easiest of the 3 implementations. I might dual boot my old desktop with a copy of Ubuntu and have a crack at it after all.
Thanks again.
Thanks again.
I may look like a mule, but I'm not a complete ass.
-
- Enthusiast
- Posts: 536
- Joined: Mon Feb 16, 2009 10:42 am
- Location: sweden
- Contact:
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
My schedulegadget does the same but with two (or three) gadgets and all in a list.
http://www.purebasic.fr/english/viewtop ... 12&t=50113
http://www.purebasic.fr/english/viewtop ... 12&t=50113
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
Not quite, that uses a scrollarea gadget which is not suitable for very large documents because the inner container is limited in size (at least under Windows it is).jesperbrannmark wrote:My schedulegadget does the same but with two (or three) gadgets and all in a list.
http://www.purebasic.fr/english/viewtop ... 12&t=50113
I may look like a mule, but I'm not a complete ass.
-
- Addict
- Posts: 1309
- Joined: Fri Aug 28, 2015 6:10 pm
- Location: Portugal
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
Needed a scrollable canvas gadget so wrote this. No API.
The canvas is in a container gadget and is simply moved around.
I can get the scroll bars to move the canvas and I can set the start point of the canvas from the main programme.
I can also get the canvas to move with the left mouse button down, the vertical scroll can also be done with the mouse wheel the only thing I cannot get hold of is horizontal movement from say a rollerball or the mac magic mouse.
If anyone looks at this are there any limitations I should be aware of?
First the module ScrollCanvas.pbi
Now a little test programme. ScrollCanvastest.pb
Any use?
CD
The canvas is in a container gadget and is simply moved around.
I can get the scroll bars to move the canvas and I can set the start point of the canvas from the main programme.
I can also get the canvas to move with the left mouse button down, the vertical scroll can also be done with the mouse wheel the only thing I cannot get hold of is horizontal movement from say a rollerball or the mac magic mouse.
If anyone looks at this are there any limitations I should be aware of?
First the module ScrollCanvas.pbi
Code: Select all
DeclareModule ScrollCanvas
Declare.i Create(Vx,Vy,Vw,Vh,Cw,Ch)
Declare ProgScrollx(x.i)
Declare ProgScrollY(Y.i)
EndDeclareModule
Module ScrollCanvas
Global ViewHeight.i,ViewWidth.i
Global Canvas,CanvasWidth.i,CanvasHeight.i
Global VScroll.i,HScroll.i
Global VScrollValue
Procedure HandleVScroll()
VScrollValue = GetGadgetState(VScroll); - (GetGadgetState(VScroll) * 2)
If VScrollValue < 0
VScrollValue = 0
EndIf
If VScrollValue > CanvasHeight - ViewHeight
VScrollValue = CanvasHeight - ViewHeight
EndIf
VScrollValue = GetGadgetState(VScroll) - (GetGadgetState(VScroll) * 2)
ResizeGadget(Canvas,#PB_Ignore,VScrollValue,#PB_Ignore,#PB_Ignore)
EndProcedure
Procedure HandleHScroll()
HScrollValue = GetGadgetState(HScroll); - (GetGadgetState(VScroll) * 2)
If HScrollValue < 0
HScrollValue = 0
EndIf
If HScrollValue > CanvasWidth - ViewWidth
HScrollValue = CanvasWidth - ViewWidth
EndIf
HScrollValue = GetGadgetState(HScroll) - (GetGadgetState(HScroll) * 2)
ResizeGadget(Canvas,HScrollValue,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndProcedure
Procedure ProgScrollx(x.i)
ResizeGadget(Canvas,x,#PB_Ignore,#PB_Ignore,#PB_Ignore)
SetGadgetState(HScroll,-x)
EndProcedure
Procedure ProgScrollY(y.i)
ResizeGadget(Canvas,#PB_Ignore,Y,#PB_Ignore,#PB_Ignore)
SetGadgetState(VScroll,-y)
EndProcedure
Procedure.i Create(Vx,Vy,Vw,Vh,Cw,Ch)
CanvasWidth = Cw
CanvasHeight = Ch
ViewHeight= Vh - 20
ViewWidth = Vw - 20
View = ContainerGadget(#PB_Any, Vx, Vy, ViewWidth, ViewHeight, #PB_Container_Single)
Canvas = CanvasGadget(#PB_Any, 0, 0, Cw, Ch)
CloseGadgetList()
HScroll = ScrollBarGadget(#PB_Any, Vx,Vy + ViewHeight,ViewWidth, 20,0, CanvasWidth - ViewWidth,1)
VScroll = ScrollBarGadget(#PB_Any, Vx + ViewWidth,Vy,20, ViewHeight,0, CanvasHeight - ViewHeight,1)
BindGadgetEvent(VScroll,@HandleVScroll())
BindGadgetEvent(HScroll,@HandleHScroll())
Debug CanvasHeight - ViewHeight
Debug CanvasWidth - ViewWidth
ProcedureReturn Canvas
EndProcedure
EndModule
Code: Select all
IncludeFile "ScrollCanvas.pbi"
Global Window_0
Global DrawCanvas.i
Procedure TestDraw()
StartVectorDrawing(CanvasVectorOutput(DrawCanvas))
MovePathCursor(0,0)
AddPathLine(800,900)
MovePathCursor(800,0)
AddPathLine(0,900)
StrokePath(1)
EndProcedure
Window_0 = OpenWindow(#PB_Any, 0, 0, 850, 450, "Scroll Canvas", #PB_Window_SystemMenu)
DrawCanvas = ScrollCanvas::Create(20,25,700,400,800,900)
TestDraw()
;Show Centre of canvas
ScrollCanvas::ProgScrollY(-260)
ScrollCanvas::ProgScrollX(-60)
Define Event.i
Repeat
Event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ForEver
CD
Any intelligent fool can make things bigger and more complex. It takes a touch of genius — and a lot of courage to move in the opposite direction.
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
A similar approach to that taken by a ScrollAreaGadget and is limited by the size restrictions placed on a gadget by the OS in question. Windows 7 certainly has such limitations.
I may look like a mule, but I'm not a complete ass.
- RichAlgeni
- Addict
- Posts: 914
- Joined: Wed Sep 22, 2010 1:50 am
- Location: Bradenton, FL
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
Is SROD still around???
Re: Crossplatform scrollable Canvas Gadget (Win + OSX done)
no
Edit
Sorry, I didn't want to keep it like that, but I had to search an old post => viewtopic.php?p=581928#p581928
Edit
Sorry, I didn't want to keep it like that, but I had to search an old post => viewtopic.php?p=581928#p581928
{Home}.:|:.{Dialog Design0R}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}