Page 1 of 1

Center ScrollArea scroll bars

Posted: Fri Mar 30, 2018 3:56 am
by IdeasVacuum
From the Help:
#PB_ScrollArea_Center : If the inner size is smaller than the outer one,
then the inner area is automatically centered.
That works perfectly, but in my case the inner size is larger than the outer size - how to Center?

Re: Center ScrollArea scroll bars

Posted: Fri Mar 30, 2018 11:57 am
by RASHAD

Code: Select all

   SetGadgetAttribute(gadget,#PB_ScrollArea_Y,(inner_Y-outer_Y)/2)
   SetGadgetAttribute(gadget,#PB_ScrollArea_X,(inner_X-outer_X)/2)

Re: Center ScrollArea scroll bars

Posted: Fri Mar 30, 2018 5:17 pm
by IdeasVacuum
Rashad!

I was playing with:
SendMessage_(GadgetID(#MyScrlArea), #WM_VSCROLL, #SB_THUMBTRACK, 0)

....and you have a PB solution. Thankyou!

Re: Center ScrollArea scroll bars

Posted: Sun Apr 01, 2018 2:29 am
by IdeasVacuum
Hmm - turns out that a tweak is needed. I have applied a tweak that looks right.......

Code: Select all

Enumeration
#Win
#Panel
#Scrl
#Canv
#Temp
EndEnumeration

If OpenWindow(#Win, 0, 0, 700, 650, "ScrollArea scrollbar positions", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

                      ScrollBarGadget(#Temp, 0, 0, 0, 0, 0, 100, 100, #PB_ScrollBar_Vertical)
              iScrlBarW = GadgetWidth(#Temp, #PB_Gadget_RequiredSize)
                           FreeGadget(#Temp)

           SetWindowColor(#Win, RGB(240,240,240))

              PanelGadget(#Panel, 1, 1, 698, 648)

            AddGadgetItem(#Panel, -1, "Tab 0")

         ScrollAreaGadget(#Scrl, 5,  40,  376,  570, 1000, 1000, 10, #PB_ScrollArea_BorderLess | #PB_ScrollArea_Center)
             CanvasGadget(#Canv, 0,   0, 1000, 1000, #PB_Canvas_Container)
          CloseGadgetList() ;#Canv
          CloseGadgetList() ;#Scrl

             StartDrawing(CanvasOutput(#Canv))
                      Box(0, 0, GadgetWidth(#Canv), GadgetHeight(#Canv), RGB(192,192,192))
                   LineXY(500,   0,  500, 1000, RGB(200,000,000))
                   LineXY(  0, 500, 1000,  500, RGB(200,000,000))
              DrawingMode(#PB_2DDrawing_Outlined)
                      Box(332, 235, 336, 530, RGB(000,000,200))

              StopDrawing()

              SetGadgetAttribute(#Scrl, #PB_ScrollArea_X, ((1000 - 376) / 2) + (iScrlBarW / 2))
              SetGadgetAttribute(#Scrl, #PB_ScrollArea_Y, ((1000 - 570) / 2) + (iScrlBarW / 2))

         Repeat
         Until WaitWindowEvent(1) = #PB_Event_CloseWindow
EndIf

Re: Center ScrollArea scroll bars

Posted: Sun Apr 01, 2018 6:59 am
by RASHAD
Right on
Suit all cases (Hal or Val scroll bar not exist)

Code: Select all

Enumeration
#Win
#Panel
#Scrl
#Canv
#Temp
EndEnumeration

If OpenWindow(#Win, 0, 0, 700, 650, "ScrollArea scrollbar positions", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

SetWindowColor(#Win, RGB(240,240,240))

PanelGadget(#Panel, 1, 1, 698, 648)

AddGadgetItem(#Panel, -1, "Tab 0")

ScrollAreaGadget(#Scrl, 5,  40,  376,  570, 1000, 1000, 10, #PB_ScrollArea_BorderLess | #PB_ScrollArea_Center)
   CanvasGadget(#Canv, 0,   0, 1000, 1000, #PB_Canvas_Container)
CloseGadgetList() ;#Canv
CloseGadgetList() ;#Scrl

   StartDrawing(CanvasOutput(#Canv))
            Box(0, 0, GadgetWidth(#Canv), GadgetHeight(#Canv), RGB(192,192,192))
         LineXY(500,   0,  500, 1000, RGB(200,000,000))
         LineXY(  0, 500, 1000,  500, RGB(200,000,000))
    DrawingMode(#PB_2DDrawing_Outlined)
            Box(332, 235, 336, 530, RGB(000,000,200))

    StopDrawing()
    
    SetGadgetAttribute(#Scrl, #PB_ScrollArea_X, 1000)
    hpos = GetGadgetAttribute(#Scrl, #PB_ScrollArea_X)
    
    SetGadgetAttribute(#Scrl, #PB_ScrollArea_Y, 1000)
    vpos = GetGadgetAttribute(#Scrl, #PB_ScrollArea_Y)              

    SetGadgetAttribute(#Scrl, #PB_ScrollArea_X, hpos/2)
    SetGadgetAttribute(#Scrl, #PB_ScrollArea_Y, vpos/2)

Repeat
Until WaitWindowEvent(1) = #PB_Event_CloseWindow
EndIf

Re: Center ScrollArea scroll bars

Posted: Sun Apr 01, 2018 12:36 pm
by IdeasVacuum
That's excellent Rashad - it really should be part of the built-in PB function.

Re: Center ScrollArea scroll bars

Posted: Mon Apr 02, 2018 1:53 am
by Dude
IdeasVacuum wrote:it really should be part of the built-in PB function.
+1 (if Fred sees this).