diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-09-05 16:42:14 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-09-05 18:05:43 +0200 |
commit | d70bf1c4caf37f38166b5f1facc08264cd203f92 (patch) | |
tree | 41deb2dfcf215e59248bcda925500938fa213cbb /vcl/source/window/menuitemlist.cxx | |
parent | a91dfea300a379c2f754dbb1d5a002d093b73032 (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.cxx | 23 |
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() { } |