[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - vcl/unx

Jan-Marek Glogowski glogow at fbihome.de
Thu Jul 9 12:50:44 PDT 2015


 vcl/unx/kde4/KDESalGraphics.cxx |   60 +++++++++++++++++++++++++++-------------
 1 file changed, 41 insertions(+), 19 deletions(-)

New commits:
commit 073936d374ded0e2374b4146ec32cb30149ba35e
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Wed Jul 8 18:02:00 2015 +0000

    tdf#92115 KDE4: better listbox theming
    
    This is not a final fix to apply full theming, but it makes
    the listboxes at least usable again.
    
    Change-Id: Ic83b8209208fddafe34e04f4e5e531f0d28e62bd
    (cherry picked from commit 57792314c7b05f71c66834ee47bfaa09003df765)
    Reviewed-on: https://gerrit.libreoffice.org/16900
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
index 25ffb0c..e4412e2 100644
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -101,7 +101,6 @@ bool KDESalGraphics::IsNativeControlSupported( ControlType type, ControlPart par
         case CTRL_EDITBOX:
         case CTRL_COMBOBOX:
         case CTRL_TOOLBAR:
-        case CTRL_LISTBOX:
         case CTRL_FRAME:
         case CTRL_SCROLLBAR:
         case CTRL_WINDOW_BACKGROUND:
@@ -109,6 +108,12 @@ bool KDESalGraphics::IsNativeControlSupported( ControlType type, ControlPart par
         case CTRL_FIXEDLINE:
             return true;
 
+        case CTRL_LISTBOX:
+            return (part == PART_ENTIRE_CONTROL
+                 || part == PART_SUB_EDIT
+                 || part == PART_WINDOW
+                 || part == PART_BUTTON_DOWN);
+
         case CTRL_SPINBOX:
             return (part == PART_ENTIRE_CONTROL || part == HAS_BACKGROUND_TEXTURE);
 
@@ -408,24 +413,26 @@ bool KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
     }
     else if (type == CTRL_LISTBOX)
     {
-        if( part == PART_WINDOW )
-        {
-            lcl_drawFrame( QStyle::PE_Frame, m_image,
-                           vclStateValue2StateFlag(nControlState, value) );
-        }
-        else
-        {
-            QStyleOptionComboBox option;
-            if (part == PART_SUB_EDIT)
-            {
+        QStyleOptionComboBox option;
+        switch (part) {
+            case PART_WINDOW:
+                lcl_drawFrame( QStyle::PE_Frame, m_image,
+                               vclStateValue2StateFlag(nControlState, value) );
+                break;
+            case PART_SUB_EDIT:
                 draw( QStyle::CE_ComboBoxLabel, &option, m_image,
                       vclStateValue2StateFlag(nControlState, value) );
-            }
-            else
-            {
+                break;
+            case PART_ENTIRE_CONTROL:
                 draw( QStyle::CC_ComboBox, &option, m_image,
                       vclStateValue2StateFlag(nControlState, value) );
-            }
+                break;
+            case PART_BUTTON_DOWN:
+                m_image->fill( Qt::transparent );
+                option.subControls = QStyle::SC_ComboBoxArrow;
+                draw( QStyle::CC_ComboBox, &option, m_image,
+                      vclStateValue2StateFlag(nControlState, value) );
+                break;
         }
     }
     else if (type == CTRL_LISTNODE)
@@ -646,6 +653,12 @@ bool KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
                                              const OUString&,
                                              Rectangle &nativeBoundingRegion, Rectangle &nativeContentRegion )
 {
+    bool nativeSupport = IsNativeControlSupported( type, part );
+    if( ! nativeSupport ) {
+        assert( ! nativeSupport && "drawNativeControl called without native support!" );
+        return false;
+    }
+
     bool retVal = false;
 
     QRect boundingRect = region2QRect( controlRegion );
@@ -727,8 +740,6 @@ bool KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
             {
                 case PART_ENTIRE_CONTROL:
                 {
-                    int size = QApplication::style()->pixelMetric(QStyle::PM_ComboBoxFrameWidth) - 2;
-
                     // find out the minimum size that should be used
                     // assume contents is a text ling
                     int nHeight = QApplication::fontMetrics().height();
@@ -741,8 +752,10 @@ bool KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
                     // FIXME: why this difference between comboboxes and listboxes ?
                     // because a combobox has a sub edit and that is positioned
                     // inside the outer bordered control ?
-                    if( type == CTRL_COMBOBOX )
+                    if( type == CTRL_COMBOBOX ) {
+                        int size = QApplication::style()->pixelMetric(QStyle::PM_ComboBoxFrameWidth) - 2;
                         contentRect.adjust(-size,-size,size,size);
+                    }
                     retVal = true;
                     break;
                 }
@@ -755,13 +768,22 @@ bool KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
                     retVal = true;
                     break;
                 case PART_SUB_EDIT:
+                {
                     contentRect = QApplication::style()->subControlRect(
                         QStyle::CC_ComboBox, &cbo, QStyle::SC_ComboBoxEditField );
 
-                    contentRect.translate( boundingRect.left(), boundingRect.top() );
+                    int hmargin = QApplication::style()->pixelMetric(
+                            QStyle::PM_FocusFrameHMargin, &styleOption);
+                    int vmargin = QApplication::style()->pixelMetric(
+                            QStyle::PM_FocusFrameVMargin, &styleOption);
+
+                    contentRect.translate( boundingRect.left() + hmargin, boundingRect.top() + vmargin );
+                    contentRect.adjust( 0, 0, -2 * hmargin, -2 * vmargin );
+                    boundingRect = contentRect;
 
                     retVal = true;
                     break;
+                }
                 case PART_WINDOW:
                     retVal = true;
                     break;


More information about the Libreoffice-commits mailing list