summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/inc/qt5/Qt5Graphics_Controls.hxx12
-rw-r--r--vcl/qt5/Qt5Graphics_Controls.cxx101
2 files changed, 69 insertions, 44 deletions
diff --git a/vcl/inc/qt5/Qt5Graphics_Controls.hxx b/vcl/inc/qt5/Qt5Graphics_Controls.hxx
index 325e5c351046..b9034fd8ea03 100644
--- a/vcl/inc/qt5/Qt5Graphics_Controls.hxx
+++ b/vcl/inc/qt5/Qt5Graphics_Controls.hxx
@@ -67,13 +67,15 @@ private:
static QRect subElementRect(QStyle::SubElement element, const QStyleOption* option);
void draw(QStyle::ControlElement element, QStyleOption* option, QImage* image,
- QStyle::State const state = QStyle::State_None, QRect rect = QRect());
+ const Color& rBackgroundColor, QStyle::State const state = QStyle::State_None,
+ QRect rect = QRect());
void draw(QStyle::PrimitiveElement element, QStyleOption* option, QImage* image,
- QStyle::State const state = QStyle::State_None, QRect rect = QRect());
+ const Color& rBackgroundColor, QStyle::State const state = QStyle::State_None,
+ QRect rect = QRect());
void draw(QStyle::ComplexControl element, QStyleOptionComplex* option, QImage* image,
- QStyle::State const state = QStyle::State_None);
- void drawFrame(QStyle::PrimitiveElement element, QImage* image, QStyle::State const& state,
- bool bClip = true,
+ const Color& rBackgroundColor, QStyle::State const state = QStyle::State_None);
+ void drawFrame(QStyle::PrimitiveElement element, QImage* image, const Color& rBackGroundColor,
+ QStyle::State const& state, bool bClip = true,
QStyle::PixelMetric eLineMetric = QStyle::PM_DefaultFrameWidth);
static void fillQStyleOptionTab(const ImplControlValue& value, QStyleOptionTab& sot);
diff --git a/vcl/qt5/Qt5Graphics_Controls.cxx b/vcl/qt5/Qt5Graphics_Controls.cxx
index dce9c1687e42..361050929d77 100644
--- a/vcl/qt5/Qt5Graphics_Controls.cxx
+++ b/vcl/qt5/Qt5Graphics_Controls.cxx
@@ -63,6 +63,17 @@ static QStyle::State vclStateValue2StateFlag(ControlState nControlState,
return nState;
}
+static void lcl_ApplyBackgroundColorToStyleOption(QStyleOption* pOption,
+ const Color& rBackgroundColor)
+{
+ if (rBackgroundColor != COL_AUTO)
+ {
+ QColor aColor = toQColor(rBackgroundColor);
+ for (QPalette::ColorRole role : { QPalette::Window, QPalette::Button, QPalette::Base })
+ pOption->palette.setColor(role, aColor);
+ }
+}
+
Qt5Graphics_Controls::Qt5Graphics_Controls(const Qt5GraphicsBase& rGraphics)
: m_rGraphics(rGraphics)
{
@@ -144,44 +155,53 @@ inline QRect Qt5Graphics_Controls::subElementRect(QStyle::SubElement element,
}
void Qt5Graphics_Controls::draw(QStyle::ControlElement element, QStyleOption* option, QImage* image,
- QStyle::State const state, QRect rect)
+ const Color& rBackgroundColor, QStyle::State const state,
+ QRect rect)
{
const QRect& targetRect = !rect.isNull() ? rect : image->rect();
option->state |= state;
option->rect = downscale(targetRect);
+ lcl_ApplyBackgroundColorToStyleOption(option, rBackgroundColor);
+
QPainter painter(image);
QApplication::style()->drawControl(element, option, &painter);
}
void Qt5Graphics_Controls::draw(QStyle::PrimitiveElement element, QStyleOption* option,
- QImage* image, QStyle::State const state, QRect rect)
+ QImage* image, const Color& rBackgroundColor,
+ QStyle::State const state, QRect rect)
{
const QRect& targetRect = !rect.isNull() ? rect : image->rect();
option->state |= state;
option->rect = downscale(targetRect);
+ lcl_ApplyBackgroundColorToStyleOption(option, rBackgroundColor);
+
QPainter painter(image);
QApplication::style()->drawPrimitive(element, option, &painter);
}
void Qt5Graphics_Controls::draw(QStyle::ComplexControl element, QStyleOptionComplex* option,
- QImage* image, QStyle::State const state)
+ QImage* image, const Color& rBackgroundColor,
+ QStyle::State const state)
{
const QRect& targetRect = image->rect();
option->state |= state;
option->rect = downscale(targetRect);
+ lcl_ApplyBackgroundColorToStyleOption(option, rBackgroundColor);
+
QPainter painter(image);
QApplication::style()->drawComplexControl(element, option, &painter);
}
void Qt5Graphics_Controls::drawFrame(QStyle::PrimitiveElement element, QImage* image,
- QStyle::State const& state, bool bClip,
- QStyle::PixelMetric eLineMetric)
+ const Color& rBackgroundColor, QStyle::State const& state,
+ bool bClip, QStyle::PixelMetric eLineMetric)
{
const int fw = pixelMetric(eLineMetric);
QStyleOptionFrame option;
@@ -192,6 +212,8 @@ void Qt5Graphics_Controls::drawFrame(QStyle::PrimitiveElement element, QImage* i
QRect aRect = downscale(image->rect());
option.rect = aRect;
+ lcl_ApplyBackgroundColorToStyleOption(&option, rBackgroundColor);
+
QPainter painter(image);
if (bClip)
painter.setClipRegion(QRegion(aRect).subtracted(aRect.adjusted(fw, fw, -fw, -fw)));
@@ -225,7 +247,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
const tools::Rectangle& rControlRegion,
ControlState nControlState,
const ImplControlValue& value, const OUString&,
- const Color& /*rBackgroundColor*/)
+ const Color& rBackgroundColor)
{
bool nativeSupport = isNativeControlSupported(type, part);
if (!nativeSupport)
@@ -286,7 +308,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
{
assert(part == ControlPart::Entire);
QStyleOptionButton option;
- draw(QStyle::CE_PushButton, &option, m_image.get(),
+ draw(QStyle::CE_PushButton, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::Menubar)
@@ -303,12 +325,12 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
& ControlState::SELECTED) // Passing State_Sunken is currently not documented.
option.state |= QStyle::State_Sunken; // But some kinds of QStyle interpret it.
- draw(QStyle::CE_MenuBarItem, &option, m_image.get());
+ draw(QStyle::CE_MenuBarItem, &option, m_image.get(), rBackgroundColor);
}
else if (part == ControlPart::Entire)
{
QStyleOptionMenuItem option;
- draw(QStyle::CE_MenuBarEmptyArea, &option, m_image.get(),
+ draw(QStyle::CE_MenuBarEmptyArea, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else
@@ -323,7 +345,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
if (part == ControlPart::MenuItem)
{
QStyleOptionMenuItem option;
- draw(QStyle::CE_MenuItem, &option, m_image.get(),
+ draw(QStyle::CE_MenuItem, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
// HACK: LO core first paints the entire popup and only then it paints menu items,
// but QMenu::paintEvent() paints popup frame after all items. That means highlighted
@@ -333,7 +355,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
QRect framerect(m_lastPopupRect.topLeft() - widgetRect.topLeft(),
widgetRect.size().expandedTo(m_lastPopupRect.size()));
QStyleOptionFrame frame;
- draw(QStyle::PE_FrameMenu, &frame, m_image.get(),
+ draw(QStyle::PE_FrameMenu, &frame, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value), framerect);
}
else if (part == ControlPart::Separator)
@@ -377,18 +399,18 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
// checkboxes are always displayed next to images in menus, so are never centered
const int focus_size = pixelMetric(QStyle::PM_FocusFrameHMargin);
rect.moveTo(-focus_size, rect.y());
- draw(QStyle::CE_MenuItem, &option, m_image.get(),
+ draw(QStyle::CE_MenuItem, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState & ~ControlState::PRESSED, value), rect);
}
else if (part == ControlPart::Entire)
{
QStyleOptionMenuItem option;
option.state = vclStateValue2StateFlag(nControlState, value);
- draw(QStyle::PE_PanelMenu, &option, m_image.get());
+ draw(QStyle::PE_PanelMenu, &option, m_image.get(), rBackgroundColor);
// Try hard to get any frame!
QStyleOptionFrame frame;
- draw(QStyle::PE_FrameMenu, &frame, m_image.get());
- draw(QStyle::PE_FrameWindow, &frame, m_image.get());
+ draw(QStyle::PE_FrameMenu, &frame, m_image.get(), rBackgroundColor);
+ draw(QStyle::PE_FrameWindow, &frame, m_image.get(), rBackgroundColor);
m_lastPopupRect = widgetRect;
}
else
@@ -403,12 +425,12 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
option.state = vclStateValue2StateFlag(nControlState, value);
option.state |= QStyle::State_Raised | QStyle::State_Enabled | QStyle::State_AutoRaise;
- draw(QStyle::CC_ToolButton, &option, m_image.get());
+ draw(QStyle::CC_ToolButton, &option, m_image.get(), rBackgroundColor);
}
else if ((type == ControlType::Toolbar) && (part == ControlPart::Entire))
{
QStyleOptionToolBar option;
- draw(QStyle::CE_ToolBar, &option, m_image.get(),
+ draw(QStyle::CE_ToolBar, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if ((type == ControlType::Toolbar)
@@ -425,19 +447,19 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
}
else
aRect.setHeight(handleExtend);
- draw(QStyle::PE_IndicatorToolBarHandle, &option, m_image.get(),
+ draw(QStyle::PE_IndicatorToolBarHandle, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value), aRect);
}
else if (type == ControlType::Editbox || type == ControlType::MultilineEditbox)
{
- drawFrame(QStyle::PE_FrameLineEdit, m_image.get(),
+ drawFrame(QStyle::PE_FrameLineEdit, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value), false);
}
else if (type == ControlType::Combobox)
{
QStyleOptionComboBox option;
option.editable = true;
- draw(QStyle::CC_ComboBox, &option, m_image.get(),
+ draw(QStyle::CC_ComboBox, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::Listbox)
@@ -447,21 +469,21 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
switch (part)
{
case ControlPart::ListboxWindow:
- drawFrame(QStyle::PE_Frame, m_image.get(),
+ drawFrame(QStyle::PE_Frame, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value), true,
QStyle::PM_ComboBoxFrameWidth);
break;
case ControlPart::SubEdit:
- draw(QStyle::CE_ComboBoxLabel, &option, m_image.get(),
+ draw(QStyle::CE_ComboBoxLabel, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
break;
case ControlPart::Entire:
- draw(QStyle::CC_ComboBox, &option, m_image.get(),
+ draw(QStyle::CC_ComboBox, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
break;
case ControlPart::ButtonDown:
option.subControls = QStyle::SC_ComboBoxArrow;
- draw(QStyle::CC_ComboBox, &option, m_image.get(),
+ draw(QStyle::CC_ComboBox, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
break;
default:
@@ -478,12 +500,12 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
if (value.getTristateVal() == ButtonValue::On)
option.state |= QStyle::State_Open;
- draw(QStyle::PE_IndicatorBranch, &option, m_image.get());
+ draw(QStyle::PE_IndicatorBranch, &option, m_image.get(), rBackgroundColor);
}
else if (type == ControlType::ListHeader)
{
QStyleOptionHeader option;
- draw(QStyle::CE_HeaderSection, &option, m_image.get(),
+ draw(QStyle::CE_HeaderSection, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::Checkbox)
@@ -493,13 +515,13 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
QStyleOptionButton option;
// clear FOCUSED bit, focus is drawn separately
nControlState &= ~ControlState::FOCUSED;
- draw(QStyle::CE_CheckBox, &option, m_image.get(),
+ draw(QStyle::CE_CheckBox, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (part == ControlPart::Focus)
{
QStyleOptionFocusRect option;
- draw(QStyle::PE_FrameFocusRect, &option, m_image.get(),
+ draw(QStyle::PE_FrameFocusRect, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
}
@@ -542,7 +564,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
if (sbVal->mnThumbState & ControlState::ROLLOVER)
option.activeSubControls = QStyle::SC_ScrollBarSlider;
- draw(QStyle::CC_ScrollBar, &option, m_image.get(),
+ draw(QStyle::CC_ScrollBar, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else
@@ -573,7 +595,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
option.state = QStyle::State_MouseOver;
}
- draw(QStyle::CC_SpinBox, &option, m_image.get(),
+ draw(QStyle::CC_SpinBox, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::Radiobutton)
@@ -583,25 +605,26 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
QStyleOptionButton option;
// clear FOCUSED bit, focus is drawn separately
nControlState &= ~ControlState::FOCUSED;
- draw(QStyle::CE_RadioButton, &option, m_image.get(),
+ draw(QStyle::CE_RadioButton, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (part == ControlPart::Focus)
{
QStyleOptionFocusRect option;
- draw(QStyle::PE_FrameFocusRect, &option, m_image.get(),
+ draw(QStyle::PE_FrameFocusRect, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
}
else if (type == ControlType::Tooltip)
{
QStyleOption option;
- draw(QStyle::PE_PanelTipLabel, &option, m_image.get(),
+ draw(QStyle::PE_PanelTipLabel, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::Frame)
{
- drawFrame(QStyle::PE_Frame, m_image.get(), vclStateValue2StateFlag(nControlState, value));
+ drawFrame(QStyle::PE_Frame, m_image.get(), rBackgroundColor,
+ vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::WindowBackground)
{
@@ -614,7 +637,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
option.state = vclStateValue2StateFlag(nControlState, value);
option.state |= QStyle::State_Item;
- draw(QStyle::CE_MenuItem, &option, m_image.get());
+ draw(QStyle::CE_MenuItem, &option, m_image.get(), rBackgroundColor);
}
else if (type == ControlType::Slider
&& (part == ControlPart::TrackHorzArea || part == ControlPart::TrackVertArea))
@@ -632,7 +655,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
if (horizontal)
option.state |= QStyle::State_Horizontal;
- draw(QStyle::CC_Slider, &option, m_image.get());
+ draw(QStyle::CC_Slider, &option, m_image.get(), rBackgroundColor);
}
else if (type == ControlType::Progress && part == ControlPart::Entire)
{
@@ -643,14 +666,14 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
option.maximum = widgetRect.width();
option.progress = value.getNumericVal();
- draw(QStyle::CE_ProgressBar, &option, m_image.get(),
+ draw(QStyle::CE_ProgressBar, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::TabItem && part == ControlPart::Entire)
{
QStyleOptionTab sot;
fillQStyleOptionTab(value, sot);
- draw(QStyle::CE_TabBarTabShape, &sot, m_image.get(),
+ draw(QStyle::CE_TabBarTabShape, &sot, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value));
}
else if (type == ControlType::TabPane && part == ControlPart::Entire)
@@ -670,7 +693,7 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
option.tabBarSize = toQSize(rValue.m_aTabHeaderRect.GetSize());
option.rect = m_image->rect();
QRect aRect = subElementRect(QStyle::SE_TabWidgetTabPane, &option);
- draw(QStyle::PE_FrameTabWidget, &option, m_image.get(),
+ draw(QStyle::PE_FrameTabWidget, &option, m_image.get(), rBackgroundColor,
vclStateValue2StateFlag(nControlState, value), aRect);
}
else