[Libreoffice-commits] core.git: 2 commits - vcl/unx

Jan-Marek Glogowski glogow at fbihome.de
Thu Jul 9 10:24:21 PDT 2015


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

New commits:
commit 57792314c7b05f71c66834ee47bfaa09003df765
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

diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
index a843269..3e79e1e 100644
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -100,7 +100,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:
@@ -108,6 +107,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);
 
@@ -405,24 +410,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)
@@ -643,6 +650,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 );
@@ -724,8 +737,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();
@@ -738,8 +749,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;
                 }
@@ -752,13 +765,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;
commit 88e16529fc7b0e312b68e38295348c93b437aad8
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date:   Wed Jul 8 07:51:57 2015 +0000

    tdf#92110 KDE4: cleanup IsNativeControlSupported
    
    Be (more) correct about the widgets and parts, we actually can draw
    natively in KDE4.
    
    Also add an assert, so drawNativeControl won't be called with values
    not supported by IsNativeControlSupported.
    
    Change-Id: Iac6c78194191a9cd059ace560c285263ce7c1045

diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
index 1fa06fd..a843269 100644
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -85,47 +85,38 @@ KDESalGraphics::~KDESalGraphics()
 
 bool KDESalGraphics::IsNativeControlSupported( ControlType type, ControlPart part )
 {
-    if (type == CTRL_PUSHBUTTON) return true;
-
-    if (type == CTRL_MENUBAR) return true;
-
-    if (type == CTRL_MENU_POPUP) return true;
-
-    if (type == CTRL_EDITBOX) return true;
-
-    if (type == CTRL_COMBOBOX) return true;
-
-    if (type == CTRL_TOOLBAR) return true;
-
-    if (type == CTRL_CHECKBOX) return true;
-
-    if (type == CTRL_LISTBOX) return true;
-
-    if (type == CTRL_LISTNODE) return true;
-
-    if (type == CTRL_FRAME) return true;
-
-    if (type == CTRL_SCROLLBAR) return true;
-
-    if (type == CTRL_WINDOW_BACKGROUND) return true;
-
-    if (type == CTRL_SPINBOX && (part == PART_ENTIRE_CONTROL || part == HAS_BACKGROUND_TEXTURE) ) return true;
-
-    // no spinbuttons for KDE, paint spinbox complete
-    //if (type == CTRL_SPINBUTTONS) return true;
-
-    if (type == CTRL_GROUPBOX) return true;
-
-    if (type == CTRL_FIXEDLINE) return true;
+    switch (type)
+    {
+        case CTRL_PUSHBUTTON:
+        case CTRL_RADIOBUTTON:
+        case CTRL_CHECKBOX:
+        case CTRL_TOOLTIP:
+        case CTRL_PROGRESS:
+        case CTRL_LISTNODE:
+            return (part == PART_ENTIRE_CONTROL);
 
-    if (type == CTRL_TOOLTIP) return true;
+        case CTRL_MENUBAR:
+        case CTRL_MENU_POPUP:
+        case CTRL_EDITBOX:
+        case CTRL_COMBOBOX:
+        case CTRL_TOOLBAR:
+        case CTRL_LISTBOX:
+        case CTRL_FRAME:
+        case CTRL_SCROLLBAR:
+        case CTRL_WINDOW_BACKGROUND:
+        case CTRL_GROUPBOX:
+        case CTRL_FIXEDLINE:
+            return true;
 
-    if (type == CTRL_RADIOBUTTON) return true;
+        case CTRL_SPINBOX:
+            return (part == PART_ENTIRE_CONTROL || part == HAS_BACKGROUND_TEXTURE);
 
-    if (type == CTRL_SLIDER && (part == PART_TRACK_HORZ_AREA || part == PART_TRACK_VERT_AREA) )
-        return true;
+        case CTRL_SLIDER:
+            return (part == PART_TRACK_HORZ_AREA || part == PART_TRACK_VERT_AREA);
 
-    if ( (type == CTRL_PROGRESS) && (part == PART_ENTIRE_CONTROL) ) return true;
+        default:
+            break;
+    }
 
     return false;
 }
@@ -221,15 +212,15 @@ bool KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
                                         const ImplControlValue& value,
                                         const OUString& )
 {
-    if( lastPopupRect.isValid() && ( type != CTRL_MENU_POPUP || part != PART_MENU_ITEM ))
-        lastPopupRect = QRect();
-
-    // put not implemented types here
-    if (type == CTRL_SPINBUTTONS)
-    {
+    bool nativeSupport = IsNativeControlSupported( type, part );
+    if( ! nativeSupport ) {
+        assert( ! nativeSupport && "drawNativeControl called without native support!" );
         return false;
     }
 
+    if( lastPopupRect.isValid() && ( type != CTRL_MENU_POPUP || part != PART_MENU_ITEM ))
+        lastPopupRect = QRect();
+
     bool returnVal = true;
 
     QRect widgetRect = region2QRect(rControlRegion);


More information about the Libreoffice-commits mailing list