vcl/unx/kde4/KDESalGraphics.cxx | 60 +++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 19 deletions(-)
New commits: commit 073936d374ded0e2374b4146ec32cb30149ba35e Author: Jan-Marek Glogowski <glo...@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 <c...@libreoffice.org> Reviewed-by: Katarina Behrens <katarina.behr...@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; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits