[Libreoffice-commits] .: 2 commits - vcl/inc vcl/source vcl/unx

Andras Timar timar at kemper.freedesktop.org
Thu Jun 7 05:05:37 PDT 2012


 vcl/inc/unx/gtk/gtkgdi.hxx               |    5 ++
 vcl/source/window/decoview.cxx           |   11 +++++
 vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx |   61 ++++++++++++++++++++++++++++---
 3 files changed, 73 insertions(+), 4 deletions(-)

New commits:
commit 866599ab5ce091de56094d4d458e010ba56d22d0
Author: Ruslan Kabatsayev <b7.10110111 at gmail.com>
Date:   Thu Jun 7 03:54:43 2012 +0400

    Implement native FixedLine render, add GTK support for it
    
    Change-Id: I142cc8c48331aaed0d157b4b0f81e7c021005624

diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx
index b4fe837..a8d6584 100644
--- a/vcl/inc/unx/gtk/gtkgdi.hxx
+++ b/vcl/inc/unx/gtk/gtkgdi.hxx
@@ -165,6 +165,11 @@ protected:
     GdkPixmap* NWGetPixmapFromScreen( Rectangle srcRect );
     sal_Bool NWRenderPixmapToScreen( GdkPixmap* pPixmap, Rectangle dstRect );
 
+    sal_Bool NWPaintGTKFixedLine( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
+                           const Rectangle& rControlRectangle,
+                           const clipList& rClipList,
+                           ControlState nState, const ImplControlValue& aValue,
+                           const OUString& rCaption );
     sal_Bool NWPaintGTKFrame( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart,
                            const Rectangle& rControlRectangle,
                            const clipList& rClipList,
diff --git a/vcl/source/window/decoview.cxx b/vcl/source/window/decoview.cxx
index 381043e..3e85e2e 100644
--- a/vcl/source/window/decoview.cxx
+++ b/vcl/source/window/decoview.cxx
@@ -1087,6 +1087,17 @@ void DecorationView::DrawSeparator( const Point& rStart, const Point& rStop, boo
 {
     Point aStart( rStart ), aStop( rStop );
     const StyleSettings& rStyleSettings = mpOutDev->GetSettings().GetStyleSettings();
+    Window *const pWin = (mpOutDev->GetOutDevType()==OUTDEV_WINDOW) ? (Window*) mpOutDev: NULL;
+    if(pWin)
+    {
+        ControlPart nPart = ( bVertical ? PART_SEPARATOR_VERT : PART_SEPARATOR_HORZ );
+        bool nativeSupported = pWin->IsNativeControlSupported( CTRL_FIXEDLINE, nPart );
+        ImplControlValue    aValue;
+        ControlState        nState = 0;
+        Rectangle aRect(rStart,rStop);
+        if(nativeSupported && pWin->DrawNativeControl(CTRL_FIXEDLINE,nPart,aRect,nState,aValue,rtl::OUString()))
+            return;
+    }
 
     mpOutDev->Push( PUSH_LINECOLOR );
     if ( rStyleSettings.GetOptions() & STYLE_OPTION_MONO )
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index 6ffbb8c..2b5d3c8 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -635,6 +635,11 @@ sal_Bool GtkSalGraphics::IsNativeControlSupported( ControlType nType, ControlPar
             if(nPart == PART_TRACK_HORZ_AREA || nPart == PART_TRACK_VERT_AREA)
                 return true;
             break;
+
+        case CTRL_FIXEDLINE:
+            if(nPart == PART_SEPARATOR_VERT || nPart == PART_SEPARATOR_HORZ)
+                return true;
+            break;
     }
 
     return false;
@@ -921,6 +926,10 @@ sal_Bool GtkSalGraphics::drawNativeControl(    ControlType nType,
     {
         returnVal = NWPaintGTKWindowBackground( gdkDrawable, nType, nPart, aCtrlRect, aClip, nState, aValue, rCaption );
     }
+    else if( nType == CTRL_FIXEDLINE )
+    {
+        returnVal = NWPaintGTKFixedLine( gdkDrawable, nType, nPart, aCtrlRect, aClip, nState, aValue, rCaption );
+    }
 
     if(nType==CTRL_FRAME)
     {
@@ -1187,6 +1196,22 @@ sal_Bool GtkSalGraphics::getNativeControlRegion(  ControlType nType,
 /************************************************************************
  * Individual control drawing functions
  ************************************************************************/
+sal_Bool GtkSalGraphics::NWPaintGTKFixedLine(
+            GdkDrawable* gdkDrawable,
+            ControlType, ControlPart nPart,
+            const Rectangle& rControlRectangle,
+            const clipList&,
+            ControlState, const ImplControlValue&,
+            const OUString& )
+{
+    if(nPart == PART_SEPARATOR_HORZ)
+        gtk_paint_hline(m_pWindow->style,gdkDrawable,GTK_STATE_NORMAL,NULL,m_pWindow,"hseparator",rControlRectangle.Left(),rControlRectangle.Right(),rControlRectangle.Top());
+    else
+        gtk_paint_vline(m_pWindow->style,gdkDrawable,GTK_STATE_NORMAL,NULL,m_pWindow,"vseparator",rControlRectangle.Top(),rControlRectangle.Bottom(),rControlRectangle.Left());
+
+    return true;
+}
+
 sal_Bool GtkSalGraphics::NWPaintGTKFrame(
             GdkDrawable* gdkDrawable,
             ControlType, ControlPart,
commit 7d0d52fb758249a7d6b8fc5e36c0e77354e5f5c3
Author: Ruslan Kabatsayev <b7.10110111 at gmail.com>
Date:   Wed Jun 6 19:40:23 2012 +0400

    Render bg correctly for widgets without theme-visible position
    
    Change-Id: I8c9d2a86ee545788d40a27538e583a8dac21095f

diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index b21f12c..6ffbb8c 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -1813,10 +1813,11 @@ sal_Bool GtkSalGraphics::NWPaintGTKScrollbar( ControlType, ControlPart nPart,
                                         x, y, w, h );
 
     // ----------------- TROUGH
-    gtk_paint_flat_box( m_pWindow->style, gdkDrawable,
+    // Pass coordinates of draw rect: window(0,0) -> widget(bottom-right) (coords relative to widget)
+    gtk_paint_flat_box(m_pWindow->style, gdkDrawable,
                         GTK_STATE_NORMAL, GTK_SHADOW_NONE, gdkRect,
-                        m_pWindow, "base", x, y,
-                        w, h );
+                        m_pWindow, "base", x-pixmapRect.Left(),y-pixmapRect.Top(),x+pixmapRect.Right(),y+pixmapRect.Bottom());
+
     gtk_paint_box( style, gdkDrawable, GTK_STATE_ACTIVE, GTK_SHADOW_IN,
                    gdkRect, GTK_WIDGET(scrollbarWidget), "trough",
                    x, y,
@@ -2179,6 +2180,13 @@ sal_Bool GtkSalGraphics::NWPaintGTKSpinBox( ControlType nType, ControlPart nPart
     if ( !pixmap )
         return( sal_False );
 
+    // First render background
+    gtk_paint_flat_box(m_pWindow->style,pixmap,GTK_STATE_NORMAL,GTK_SHADOW_NONE,NULL,m_pWindow,"base",
+            -pixmapRect.Left(),
+            -pixmapRect.Top(),
+            pixmapRect.Right(),
+            pixmapRect.Bottom() );
+
     upBtnRect = NWGetSpinButtonRect( m_nXScreen, nType, upBtnPart, pixmapRect, upBtnState, aValue, rCaption );
     downBtnRect = NWGetSpinButtonRect( m_nXScreen, nType, downBtnPart, pixmapRect, downBtnState, aValue, rCaption );
 
@@ -2547,7 +2555,11 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
     paintRect.height = pixmapRect.GetHeight();
 
     gtk_paint_flat_box( m_pWindow->style, pixmap, GTK_STATE_NORMAL,
-                        GTK_SHADOW_NONE, &paintRect, m_pWindow, "base", 0, 0, -1, -1);
+                        GTK_SHADOW_NONE, &paintRect, m_pWindow, "base",
+                        -rControlRectangle.Left(),
+                        -rControlRectangle.Top(),
+                        pixmapRect.GetWidth()+rControlRectangle.Left(),
+                        pixmapRect.GetHeight()+rControlRectangle.Top());
 
     NWSetWidgetState( gWidgetData[m_nXScreen].gNotebookWidget, nState, stateType );
 
@@ -2563,8 +2575,18 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
             break;
 
         case CTRL_TAB_ITEM:
+        {
             stateType = ( nState & CTRL_STATE_SELECTED ) ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE;
 
+            // First draw the background
+            gtk_paint_flat_box(gWidgetData[m_nXScreen].gNotebookWidget->style, pixmap,
+                                   GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, m_pWindow, "base",
+                                   -rControlRectangle.Left(),
+                                   -rControlRectangle.Top(),
+                                   pixmapRect.GetWidth()+rControlRectangle.Left(),
+                                   pixmapRect.GetHeight()+rControlRectangle.Top());
+
+            // Now the tab itself
             if( nState & CTRL_STATE_ROLLOVER )
                 g_object_set_data(G_OBJECT(pixmap),tabPrelitDataName,(gpointer)TRUE);
 
@@ -2580,6 +2602,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
                     "base", 0, (pixmapRect.GetHeight() - 1), pixmapRect.GetWidth(), 1 );
             }
             break;
+        }
 
         default:
             break;
@@ -3236,6 +3259,11 @@ sal_Bool GtkSalGraphics::NWPaintGTKProgress(
     GdkDrawable* const &pixDrawable = GDK_DRAWABLE( pixmap );
 
     // paint background
+    gtk_paint_flat_box(gWidgetData[m_nXScreen].gProgressBar->style, pixDrawable,
+                           GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, m_pWindow, "base",
+                           -rControlRectangle.Left(),-rControlRectangle.Top(),
+                           rControlRectangle.Left()+w,rControlRectangle.Top()+h);
+
     gtk_paint_flat_box( gWidgetData[m_nXScreen].gProgressBar->style,
                         pixDrawable,
                         GTK_STATE_NORMAL,


More information about the Libreoffice-commits mailing list