summaryrefslogtreecommitdiff
path: root/vcl/source/window/menuitemlist.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-09-05 16:42:14 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-09-05 18:05:43 +0200
commitd70bf1c4caf37f38166b5f1facc08264cd203f92 (patch)
tree41deb2dfcf215e59248bcda925500938fa213cbb /vcl/source/window/menuitemlist.cxx
parenta91dfea300a379c2f754dbb1d5a002d093b73032 (diff)
vcl: less text layout calls in Menu
Number of GenericSalLayout::LayoutText() calls for each & every menu item till a Writer document is opened: 3 (before) -> 1 (after). Change-Id: I08a3d174bf15bafbcbce612712f2ab773cd5e085 Reviewed-on: https://gerrit.libreoffice.org/60045 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins
Diffstat (limited to 'vcl/source/window/menuitemlist.cxx')
-rw-r--r--vcl/source/window/menuitemlist.cxx23
1 files changed, 23 insertions, 0 deletions
diff --git a/vcl/source/window/menuitemlist.cxx b/vcl/source/window/menuitemlist.cxx
index 1d63118af096..7be1f22f917e 100644
--- a/vcl/source/window/menuitemlist.cxx
+++ b/vcl/source/window/menuitemlist.cxx
@@ -38,6 +38,29 @@ MenuItemData::~MenuItemData()
pSubMenu.disposeAndClear();
}
+SalLayoutGlyphs* MenuItemData::GetTextGlyphs(OutputDevice* pOutputDevice)
+{
+ if (!aTextGlyphs.empty())
+ // Use pre-calculated result.
+ return &aTextGlyphs;
+
+ OUString aNonMnemonicString = OutputDevice::GetNonMnemonicString(aText);
+ std::unique_ptr<SalLayout> pLayout
+ = pOutputDevice->ImplLayout(aNonMnemonicString, 0, aNonMnemonicString.getLength(),
+ Point(0, 0), 0, nullptr, SalLayoutFlags::GlyphItemsOnly);
+ if (!pLayout)
+ return nullptr;
+
+ const SalLayoutGlyphs* pGlyphs = pLayout->GetGlyphs();
+ if (!pGlyphs)
+ return nullptr;
+
+ // Remember the calculation result.
+ aTextGlyphs = *pGlyphs;
+
+ return &aTextGlyphs;
+}
+
MenuItemList::~MenuItemList()
{
}