Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/1907 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/07/1907/1 fdo#54629 MultiSalLayout::GetBoundRect always uses level 0 fallback font ...in X11SalGraphics::GetGlyphBoundRect In MultiSalLayout::GetBoundRect we loop through each fallback font and union each level's GetBoundRect to get the result, which seems reasonable, except that for each level that means a call to SalLayout::GetBoundRect which calls X11SalGraphics::GetGlyphBoundRect. Those sublevel SalLayouts don't know that they are sublevels so they never set the level bits on their glyphs. Which results in X11SalGraphics::GetGlyphBoundRect always searching for that glyph in the level 0 font, so there's a mismatch between the font the SalLayout's are created to use and the font that gets used. Now, SalLayout::GetBoundRect is a fairly simple thing, it just calls GetNextGlyphs 1 by 1 and X11SalGraphics::GetGlyphBoundRect on the result of that. So I *think* that if we remove the specialized MultiSalLayout::GetBoundRect in favour of the default implementation, then because MultiSalLayout::GetNextGlyphs is specialized to do-the-right-thing and set up the glyph ids correctly, then we bubble the ids down to X11SalGraphics::GetGlyphBoundRect correctly to get it to use the right font and we get the correct bounding size. defb4d60a2d22fd36a0ff3f077faa6a0932b45a4 defb4d60a2d22fd36a0ff3f077faa6a0932b45a4 Change-Id: Idefb4d60a2d22fd36a0ff3f077faa6a0932b45a4 --- M vcl/inc/sallayout.hxx M vcl/source/gdi/sallayout.cxx 2 files changed, 0 insertions(+), 27 deletions(-) diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx index bef64af..b45d122 100644 --- a/vcl/inc/sallayout.hxx +++ b/vcl/inc/sallayout.hxx @@ -253,7 +253,6 @@ virtual int GetNextGlyphs( int nLen, sal_GlyphId* pGlyphIdxAry, Point& rPos, int&, sal_Int32* pGlyphAdvAry, int* pCharPosAry ) const; virtual bool GetOutline( SalGraphics&, ::basegfx::B2DPolyPolygonVector& ) const; - virtual bool GetBoundRect( SalGraphics&, Rectangle& ) const; // used only by OutputDevice::ImplLayout, TODO: make friend explicit MultiSalLayout( SalLayout& rBaseLayout, diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index 140037d..fe5cf8b 100644 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -2080,30 +2080,4 @@ return bRet; } -// ----------------------------------------------------------------------- - -bool MultiSalLayout::GetBoundRect( SalGraphics& rGraphics, Rectangle& rRect ) const -{ - bool bRet = false; - - Rectangle aRectangle; - for( int i = mnLevel; --i >= 0; ) - { - SalLayout& rLayout = *mpLayouts[ i ]; - rLayout.DrawBase() = maDrawBase; - rLayout.DrawOffset() += maDrawOffset; - rLayout.InitFont(); - if( rLayout.GetBoundRect( rGraphics, aRectangle ) ) - { - rRect.Union( aRectangle ); - bRet = true; - } - rLayout.DrawOffset() -= maDrawOffset; - } - - return bRet; -} - -// ======================================================================= - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- To view, visit https://gerrit.libreoffice.org/1907 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Idefb4d60a2d22fd36a0ff3f077faa6a0932b45a4 Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: libreoffice-4-0 Gerrit-Owner: Lior Kaplan <kaplanl...@gmail.com> Gerrit-Reviewer: Caolán McNamara <caol...@redhat.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice