[Libreoffice-commits] .: sc/source vcl/source vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 19 05:53:07 PDT 2012


 sc/source/ui/inc/tabview.hxx             |    2 -
 sc/source/ui/view/tabview.cxx            |   27 +++++------------------
 sc/source/ui/view/tabview4.cxx           |   36 +++++++++----------------------
 vcl/source/control/scrbar.cxx            |   12 +++++-----
 vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx |    5 ++--
 5 files changed, 27 insertions(+), 55 deletions(-)

New commits:
commit bfa21ce5fa08f2c634ccb6162914be55aef9f3c2
Author: Jan Holesovsky <kendy at suse.cz>
Date:   Fri Oct 19 01:21:22 2012 +0200

    fdo#44657 Remove hack that "simulates" a mirrored horizontal scrollbar.
    
    We are able to paint mirrored scrolbars with the 'gen' plugin, so just fix the
    rendering of the scroolbar with the Gtk+ plugin.
    
    Change-Id: I5dbd13420c6290e165ed2f5827769979298abf37

diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx
index 4d2a540..218c506 100644
--- a/sc/source/ui/inc/tabview.hxx
+++ b/sc/source/ui/inc/tabview.hxx
@@ -192,7 +192,7 @@ private:
     void            UpdateVarZoom();
 
     static void     SetScrollBar( ScrollBar& rScroll, long nRangeMax, long nVisible, long nPos, bool bLayoutRTL );
-    static long     GetScrollBarPos( ScrollBar& rScroll, bool bLayoutRTL );
+    static long     GetScrollBarPos( ScrollBar& rScroll );
 
     void            GetPageMoveEndPosition(SCsCOL nMovX, SCsROW nMovY, SCsCOL& rPageX, SCsROW& rPageY);
     void            GetAreaMoveEndPosition(SCsCOL nMovX, SCsROW nMovY, ScFollowMode eMode,
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index a9e85e3..6752ad2 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -282,6 +282,8 @@ void ScTabView::InitScrollBar( ScrollBar& rScrollBar, long nMaxVal )
 
     rScrollBar.SetScrollHdl( LINK(this, ScTabView, ScrollHdl) );
     rScrollBar.SetEndScrollHdl( LINK(this, ScTabView, EndScrollHdl) );
+
+    rScrollBar.EnableRTL( aViewData.GetDocument()->IsLayoutRTL( aViewData.GetTabNo() ) );
 }
 
 //  Scroll-Timer
@@ -1035,15 +1037,14 @@ IMPL_LINK( ScTabView, EndScrollHdl, ScrollBar*, pScroll )
 
             if ( pScroll == &aHScrollLeft || pScroll == &aHScrollRight )
             {
-                bool bMirror = aViewData.GetDocument()->IsLayoutRTL( aViewData.GetTabNo() ) != Application::GetSettings().GetLayoutRTL();
                 ScHSplitPos eWhich = (pScroll == &aHScrollLeft) ? SC_SPLIT_LEFT : SC_SPLIT_RIGHT;
-                long nDelta = GetScrollBarPos( *pScroll, bMirror ) + nScrollMin - aViewData.GetPosX(eWhich);
+                long nDelta = GetScrollBarPos( *pScroll ) + nScrollMin - aViewData.GetPosX(eWhich);
                 if (nDelta) ScrollX( nDelta, eWhich );
             }
             else                            // VScroll...
             {
                 ScVSplitPos eWhich = (pScroll == &aVScrollTop) ? SC_SPLIT_TOP : SC_SPLIT_BOTTOM;
-                long nDelta = GetScrollBarPos( *pScroll, false ) + nScrollMin - aViewData.GetPosY(eWhich);
+                long nDelta = GetScrollBarPos( *pScroll ) + nScrollMin - aViewData.GetPosY(eWhich);
                 if (nDelta) ScrollY( nDelta, eWhich );
             }
         }
@@ -1066,7 +1067,6 @@ IMPL_LINK( ScTabView, ScrollHdl, ScrollBar*, pScroll )
                                         SC_SPLIT_TOP : SC_SPLIT_BOTTOM );
 
     bool bLayoutRTL = aViewData.GetDocument()->IsLayoutRTL( aViewData.GetTabNo() );
-    bool bMirror = bHoriz && (bLayoutRTL != Application::GetSettings().GetLayoutRTL());
 
     ScrollType eType = pScroll->GetType();
     if ( eType == SCROLL_DRAG )
@@ -1104,7 +1104,7 @@ IMPL_LINK( ScTabView, ScrollHdl, ScrollBar*, pScroll )
                 nScrollMin = aViewData.GetFixPosX();
             if ( aViewData.GetVSplitMode()==SC_SPLIT_FIX && pScroll == &aVScrollBottom )
                 nScrollMin = aViewData.GetFixPosY();
-            long nScrollPos = GetScrollBarPos( *pScroll, bMirror ) + nScrollMin;
+            long nScrollPos = GetScrollBarPos( *pScroll ) + nScrollMin;
 
             String aHelpStr;
             Rectangle aRect;
@@ -1139,21 +1139,6 @@ IMPL_LINK( ScTabView, ScrollHdl, ScrollBar*, pScroll )
 
     if ( bOnlineScroll || eType != SCROLL_DRAG )
     {
-        if ( bMirror )
-        {
-            // change scroll type so visible/previous cells calculation below remains the same
-            switch ( eType )
-            {
-                case SCROLL_LINEUP:     eType = SCROLL_LINEDOWN;    break;
-                case SCROLL_LINEDOWN:   eType = SCROLL_LINEUP;      break;
-                case SCROLL_PAGEUP:     eType = SCROLL_PAGEDOWN;    break;
-                case SCROLL_PAGEDOWN:   eType = SCROLL_PAGEUP;      break;
-                default:
-                {
-                    // added to avoid warnings
-                }
-            }
-        }
         long nDelta = pScroll->GetDelta();
         switch ( eType )
         {
@@ -1188,7 +1173,7 @@ IMPL_LINK( ScTabView, ScrollHdl, ScrollBar*, pScroll )
                     if ( aViewData.GetVSplitMode()==SC_SPLIT_FIX && pScroll == &aVScrollBottom )
                         nScrollMin = aViewData.GetFixPosY();
 
-                    long nScrollPos = GetScrollBarPos( *pScroll, bMirror ) + nScrollMin;
+                    long nScrollPos = GetScrollBarPos( *pScroll ) + nScrollMin;
                     nDelta = nScrollPos - nViewPos;
                     if ( nScrollPos > nPrevDragPos )
                     {
diff --git a/sc/source/ui/view/tabview4.cxx b/sc/source/ui/view/tabview4.cxx
index 342880a..311ef3c 100644
--- a/sc/source/ui/view/tabview4.cxx
+++ b/sc/source/ui/view/tabview4.cxx
@@ -330,30 +330,16 @@ void ScTabView::SetScrollBar( ScrollBar& rScroll, long nRangeMax, long nVisible,
     if ( nVisible == 0 )
         nVisible = 1;       // #i59893# don't use visible size 0
 
-    //  RTL layout uses a negative range to simulate a mirrored scroll bar.
-    //  SetScrollBar/GetScrollBarPos hide this so outside of these functions normal cell
-    //  addresses can be used.
+    rScroll.SetRange( Range( 0, nRangeMax ) );
+    rScroll.SetVisibleSize( nVisible );
+    rScroll.SetThumbPos( nPos );
 
-    if ( bLayoutRTL )
-    {
-        rScroll.SetRange( Range( -nRangeMax, 0 ) );
-        rScroll.SetVisibleSize( nVisible );
-        rScroll.SetThumbPos( -nPos - nVisible );
-    }
-    else
-    {
-        rScroll.SetRange( Range( 0, nRangeMax ) );
-        rScroll.SetVisibleSize( nVisible );
-        rScroll.SetThumbPos( nPos );
-    }
+    rScroll.EnableRTL( bLayoutRTL );
 }
 
-long ScTabView::GetScrollBarPos( ScrollBar& rScroll, bool bLayoutRTL )
+long ScTabView::GetScrollBarPos( ScrollBar& rScroll )
 {
-    if ( bLayoutRTL )
-        return -rScroll.GetThumbPos() - rScroll.GetVisibleSize();
-    else
-        return rScroll.GetThumbPos();
+    return rScroll.GetThumbPos();
 }
 
 //  UpdateScrollBars - sichtbaren Bereich und Scrollweite der Scrollbars einstellen
@@ -393,7 +379,7 @@ void ScTabView::UpdateScrollBars()
     sal_Bool        bRight = ( aViewData.GetHSplitMode() != SC_SPLIT_NONE );
     ScDocument* pDoc = aViewData.GetDocument();
     SCTAB       nTab = aViewData.GetTabNo();
-    sal_Bool        bMirror = pDoc->IsLayoutRTL( nTab ) != Application::GetSettings().GetLayoutRTL();
+    bool        bLayoutRTL = pDoc->IsLayoutRTL( nTab );
     SCCOL       nUsedX;
     SCROW       nUsedY;
     pDoc->GetTableArea( nTab, nUsedX, nUsedY );     //! cachen !!!!!!!!!!!!!!!
@@ -412,24 +398,24 @@ void ScTabView::UpdateScrollBars()
 
     nVisXL = aViewData.VisibleCellsX( SC_SPLIT_LEFT );
     long nMaxXL = lcl_GetScrollRange( nUsedX, aViewData.GetPosX(SC_SPLIT_LEFT), nVisXL, MAXCOL, 0 );
-    SetScrollBar( aHScrollLeft, nMaxXL, nVisXL, aViewData.GetPosX( SC_SPLIT_LEFT ), bMirror );
+    SetScrollBar( aHScrollLeft, nMaxXL, nVisXL, aViewData.GetPosX( SC_SPLIT_LEFT ), bLayoutRTL );
 
     nVisYB = aViewData.VisibleCellsY( SC_SPLIT_BOTTOM );
     long nMaxYB = lcl_GetScrollRange( nUsedY, aViewData.GetPosY(SC_SPLIT_BOTTOM), nVisYB, MAXROW, nStartY );
-    SetScrollBar( aVScrollBottom, nMaxYB, nVisYB, aViewData.GetPosY( SC_SPLIT_BOTTOM ) - nStartY, false );
+    SetScrollBar( aVScrollBottom, nMaxYB, nVisYB, aViewData.GetPosY( SC_SPLIT_BOTTOM ) - nStartY, bLayoutRTL );
 
     if (bRight)
     {
         nVisXR = aViewData.VisibleCellsX( SC_SPLIT_RIGHT );
         long nMaxXR = lcl_GetScrollRange( nUsedX, aViewData.GetPosX(SC_SPLIT_RIGHT), nVisXR, MAXCOL, nStartX );
-        SetScrollBar( aHScrollRight, nMaxXR, nVisXR, aViewData.GetPosX( SC_SPLIT_RIGHT ) - nStartX, bMirror );
+        SetScrollBar( aHScrollRight, nMaxXR, nVisXR, aViewData.GetPosX( SC_SPLIT_RIGHT ) - nStartX, bLayoutRTL );
     }
 
     if (bTop)
     {
         nVisYT = aViewData.VisibleCellsY( SC_SPLIT_TOP );
         long nMaxYT = lcl_GetScrollRange( nUsedY, aViewData.GetPosY(SC_SPLIT_TOP), nVisYT, MAXROW, 0 );
-        SetScrollBar( aVScrollTop, nMaxYT, nVisYT, aViewData.GetPosY( SC_SPLIT_TOP ), false );
+        SetScrollBar( aVScrollTop, nMaxYT, nVisYT, aViewData.GetPosY( SC_SPLIT_TOP ), bLayoutRTL );
     }
 
     //      Bereich testen
diff --git a/vcl/source/control/scrbar.cxx b/vcl/source/control/scrbar.cxx
index b5ff6c8..07140c7 100644
--- a/vcl/source/control/scrbar.cxx
+++ b/vcl/source/control/scrbar.cxx
@@ -859,7 +859,7 @@ void ScrollBar::ImplDoMouseAction( const Point& rMousePos, sal_Bool bCallAction
     switch ( meScrollType )
     {
         case SCROLL_LINEUP:
-            if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_LEFT: PART_BUTTON_UP,
+            if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_RIGHT: PART_BUTTON_LEFT): PART_BUTTON_UP,
                         aControlRegion, rMousePos, bIsInside )?
                     bIsInside:
                     maBtn1Rect.IsInside( rMousePos ) )
@@ -872,7 +872,7 @@ void ScrollBar::ImplDoMouseAction( const Point& rMousePos, sal_Bool bCallAction
             break;
 
         case SCROLL_LINEDOWN:
-            if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_RIGHT: PART_BUTTON_DOWN,
+            if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_LEFT: PART_BUTTON_RIGHT): PART_BUTTON_DOWN,
                         aControlRegion, rMousePos, bIsInside )?
                     bIsInside:
                     maBtn2Rect.IsInside( rMousePos ) )
@@ -966,7 +966,7 @@ void ScrollBar::MouseButtonDown( const MouseEvent& rMEvt )
         Point aPoint( 0, 0 );
         Rectangle aControlRegion( aPoint, GetOutputSizePixel() );
 
-        if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_LEFT: PART_BUTTON_UP,
+        if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_RIGHT: PART_BUTTON_LEFT): PART_BUTTON_UP,
                     aControlRegion, rMousePos, bIsInside )?
                 bIsInside:
                 maBtn1Rect.IsInside( rMousePos ) )
@@ -978,7 +978,7 @@ void ScrollBar::MouseButtonDown( const MouseEvent& rMEvt )
                 mnDragDraw      = SCRBAR_DRAW_BTN1;
             }
         }
-        else if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_RIGHT: PART_BUTTON_DOWN,
+        else if ( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_LEFT: PART_BUTTON_RIGHT): PART_BUTTON_DOWN,
                     aControlRegion, rMousePos, bIsInside )?
                 bIsInside:
                 maBtn2Rect.IsInside( rMousePos ) )
@@ -1317,12 +1317,12 @@ Rectangle* ScrollBar::ImplFindPartRect( const Point& rPt )
     Point aPoint( 0, 0 );
     Rectangle aControlRegion( aPoint, GetOutputSizePixel() );
 
-    if( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_LEFT: PART_BUTTON_UP,
+    if( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_RIGHT: PART_BUTTON_LEFT): PART_BUTTON_UP,
                 aControlRegion, rPt, bIsInside )?
             bIsInside:
             maBtn1Rect.IsInside( rPt ) )
         return &maBtn1Rect;
-    else if( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_BUTTON_RIGHT: PART_BUTTON_DOWN,
+    else if( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? (IsRTLEnabled()? PART_BUTTON_LEFT: PART_BUTTON_RIGHT): PART_BUTTON_DOWN,
                 aControlRegion, rPt, bIsInside )?
             bIsInside:
             maBtn2Rect.IsInside( rPt ) )
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index 945ae0b..8c603ed 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -1794,6 +1794,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKScrollbar( ControlType, ControlPart nPart,
     {
         unsigned int sliderHeight = slider_width + (trough_border * 2);
         vShim = (pixmapRect.GetHeight() - sliderHeight) / 2;
+        bool bRTLSwap = button11BoundRect.Left() > button22BoundRect.Left();
 
         scrollbarRect.Move( 0, vShim );
         scrollbarRect.SetSize( Size( scrollbarRect.GetWidth(), sliderHeight ) );
@@ -1801,8 +1802,8 @@ sal_Bool GtkSalGraphics::NWPaintGTKScrollbar( ControlType, ControlPart nPart,
         scrollbarWidget = GTK_SCROLLBAR( gWidgetData[m_nXScreen].gScrollHorizWidget );
         scrollbarOrientation = GTK_ORIENTATION_HORIZONTAL;
         scrollbarTag = scrollbarTagH;
-        button1Type = GTK_ARROW_LEFT;
-        button2Type = GTK_ARROW_RIGHT;
+        button1Type = bRTLSwap? GTK_ARROW_RIGHT: GTK_ARROW_LEFT;
+        button2Type = bRTLSwap? GTK_ARROW_LEFT: GTK_ARROW_RIGHT;
 
         if ( has_backward )
         {


More information about the Libreoffice-commits mailing list