summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2016-09-22 18:27:49 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2016-09-22 20:13:09 +0200
commit843b9d5dba5098c2676491dda66bed31e57f4329 (patch)
tree45f5e6fc2d7b448c230a35551ebbe7710e9b492d /vcl
parent0de3368e4d82d579b8e2550391e142607cbb6aa8 (diff)
VCL add support for rollover menubars
KDE theme engines can explicitly support rollover menubars via styleHint( QStyle::SH_MenuBar_MouseTracking ). So this adds support for this feature to the vcl::Menu. Change-Id: Ica923ff2d06cfd54e548ba858b3d90f70d9c255a
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/svdata.hxx1
-rw-r--r--vcl/source/window/menu.cxx18
-rw-r--r--vcl/source/window/menubarwindow.cxx16
3 files changed, 29 insertions, 6 deletions
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index a1a76a13468f..128cebf2cdd6 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -278,6 +278,7 @@ struct ImplSVNWFData
bool mbDDListBoxNoTextArea:1;
bool mbEnableAccel:1; // whether or not accelerators are shown
bool mbAutoAccel:1; // whether accelerators are only shown when Alt is held down
+ bool mbRolloverMenubar:1; // theming engine supports rollover in menubar
};
struct BlendFrameCache
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index b185a16f40e3..579e993e14a1 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -1804,11 +1804,21 @@ void Menu::ImplPaint(vcl::RenderContext& rRenderContext,
{
if (IsMenuBar())
{
- if (bRollover)
- rRenderContext.SetTextColor(rSettings.GetMenuBarRolloverTextColor());
- else if (bHighlighted)
- rRenderContext.SetTextColor(rSettings.GetMenuBarHighlightTextColor());
+ if (!ImplGetSVData()->maNWFData.mbRolloverMenubar)
+ {
+ if (bRollover)
+ rRenderContext.SetTextColor(rSettings.GetMenuBarRolloverTextColor());
+ else if (bHighlighted)
+ rRenderContext.SetTextColor(rSettings.GetMenuBarHighlightTextColor());
+ }
else
+ {
+ if (bHighlighted)
+ rRenderContext.SetTextColor(rSettings.GetMenuBarHighlightTextColor());
+ else if (bRollover)
+ rRenderContext.SetTextColor(rSettings.GetMenuBarRolloverTextColor());
+ }
+ if (!bRollover && !bHighlighted)
rRenderContext.SetTextColor(rSettings.GetMenuBarTextColor());
}
else if (bHighlighted)
diff --git a/vcl/source/window/menubarwindow.cxx b/vcl/source/window/menubarwindow.cxx
index 812fff476862..6ab3f8b5b84a 100644
--- a/vcl/source/window/menubarwindow.cxx
+++ b/vcl/source/window/menubarwindow.cxx
@@ -592,7 +592,17 @@ void MenuBarWindow::HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16
Rectangle aRect = Rectangle(Point(nX, 1), Size(pData->aSz.Width(), GetOutputSizePixel().Height() - 2));
rRenderContext.Push(PushFlags::CLIPREGION);
rRenderContext.IntersectClipRegion(aRect);
- bool bRollover = nPos != nHighlightedItem;
+ bool bRollover, bHighlight;
+ if (!ImplGetSVData()->maNWFData.mbRolloverMenubar)
+ {
+ bHighlight = true;
+ bRollover = nPos != nHighlightedItem;
+ }
+ else
+ {
+ bRollover = nPos == nRolloveredItem;
+ bHighlight = nPos == nHighlightedItem;
+ }
if (rRenderContext.IsNativeControlSupported(ControlType::Menubar, ControlPart::MenuItem) &&
rRenderContext.IsNativeControlSupported(ControlType::Menubar, ControlPart::Entire))
{
@@ -630,7 +640,7 @@ void MenuBarWindow::HighlightItem(vcl::RenderContext& rRenderContext, sal_uInt16
rRenderContext.DrawRect(aRect);
}
rRenderContext.Pop();
- pMenu->ImplPaint(rRenderContext, 0, 0, pData, true/*bHighlight*/, false, bRollover);
+ pMenu->ImplPaint(rRenderContext, 0, 0, pData, bHighlight, false, bRollover);
}
return;
}
@@ -875,6 +885,8 @@ void MenuBarWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
pMenu->ImplPaint(rRenderContext, 0);
if (nHighlightedItem != ITEMPOS_INVALID)
HighlightItem(rRenderContext, nHighlightedItem);
+ else if (ImplGetSVData()->maNWFData.mbRolloverMenubar && nRolloveredItem != ITEMPOS_INVALID)
+ HighlightItem(rRenderContext, nRolloveredItem);
// in high contrast mode draw a separating line on the lower edge
if (!rRenderContext.IsNativeControlSupported( ControlType::Menubar, ControlPart::Entire) &&