[Libreoffice-commits] core.git: 2 commits - vcl/inc vcl/win
Khaled Hosny
khaledhosny at eglug.org
Mon Oct 31 02:54:39 UTC 2016
vcl/inc/win/winlayout.hxx | 2 +-
vcl/win/gdi/winlayout.cxx | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
New commits:
commit 4b4abb73fcd7f2802e73102b3e7c30face8d309c
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Mon Oct 31 04:46:34 2016 +0200
Avoid excessive text clipping on Windows
Use a better rounding strategy so that when the bounding box involves
part of a pixel we include the full pixel, so floor for -ve values and
ceil for +ve ones. Without this I see lots of cut text on Windows.
Change-Id: I258f63eb37911574cd3f6f08da22349756c0775c
diff --git a/vcl/win/gdi/winlayout.cxx b/vcl/win/gdi/winlayout.cxx
index 50f6602..5655785 100644
--- a/vcl/win/gdi/winlayout.cxx
+++ b/vcl/win/gdi/winlayout.cxx
@@ -3611,10 +3611,10 @@ std::vector<Rectangle> D2DWriteTextOutRenderer::GetGlyphInkBoxes(uint16_t * pGid
bottom = INT32(m.advanceHeight) - m.verticalOriginY - m.bottomSideBearing;
// Scale to screen space.
- pOut->Left() = std::lround(left * mlfEmHeight / aFontMetrics.designUnitsPerEm);
- pOut->Top() = std::lround(top * mlfEmHeight / aFontMetrics.designUnitsPerEm);
- pOut->Right() = std::lround(right * mlfEmHeight / aFontMetrics.designUnitsPerEm);
- pOut->Bottom() = std::lround(bottom * mlfEmHeight / aFontMetrics.designUnitsPerEm);
+ pOut->Left() = std::floor(left * mlfEmHeight / aFontMetrics.designUnitsPerEm);
+ pOut->Top() = std::floor(top * mlfEmHeight / aFontMetrics.designUnitsPerEm);
+ pOut->Right() = std::ceil(right * mlfEmHeight / aFontMetrics.designUnitsPerEm);
+ pOut->Bottom() = std::ceil(bottom * mlfEmHeight / aFontMetrics.designUnitsPerEm);
++pOut;
}
commit ebe3fd529195ae1edf5daeab197bbb3cfec4143c
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Mon Oct 31 04:37:25 2016 +0200
Reduce number of arguments
The font is already a member of the class, and the EM height is unused.
Change-Id: Ice2eb2bb3e4b491bcb93123e1c3a08170cdaa50b
diff --git a/vcl/inc/win/winlayout.hxx b/vcl/inc/win/winlayout.hxx
index 04fc135..c025351 100755
--- a/vcl/inc/win/winlayout.hxx
+++ b/vcl/inc/win/winlayout.hxx
@@ -501,7 +501,7 @@ private:
D2DWriteTextOutRenderer & operator = (const D2DWriteTextOutRenderer &) = delete;
bool GetDWriteFaceFromHDC(HDC hDC, IDWriteFontFace ** ppFontFace, float * lfSize) const;
- bool GetDWriteInkBox(IDWriteFontFace & rFontFace, SalLayout const &rLayout, float const lfEmHeight, Rectangle &) const;
+ bool GetDWriteInkBox(SalLayout const &rLayout, Rectangle &) const;
ID2D1Factory * mpD2DFactory;
IDWriteFactory * mpDWriteFactory;
diff --git a/vcl/win/gdi/winlayout.cxx b/vcl/win/gdi/winlayout.cxx
index 658641e..50f6602 100644
--- a/vcl/win/gdi/winlayout.cxx
+++ b/vcl/win/gdi/winlayout.cxx
@@ -3455,7 +3455,7 @@ bool D2DWriteTextOutRenderer::operator ()(SalLayout const &rLayout, HDC hDC,
}
Rectangle bounds;
- bool succeeded = GetDWriteInkBox(*mpFontFace, rLayout, mlfEmHeight, bounds);
+ bool succeeded = GetDWriteInkBox(rLayout, bounds);
succeeded &= BindDC(hDC, bounds); // Update the bounding rect.
ID2D1SolidColorBrush* pBrush = nullptr;
@@ -3652,12 +3652,12 @@ bool D2DWriteTextOutRenderer::GetDWriteFaceFromHDC(HDC hDC, IDWriteFontFace ** p
return succeeded;
}
-bool D2DWriteTextOutRenderer::GetDWriteInkBox(IDWriteFontFace & rFontFace, SalLayout const &rLayout, float const /*lfEmHeight*/, Rectangle & rOut) const
+bool D2DWriteTextOutRenderer::GetDWriteInkBox(SalLayout const &rLayout, Rectangle & rOut) const
{
rOut.SetEmpty();
DWRITE_FONT_METRICS aFontMetrics;
- rFontFace.GetMetrics(&aFontMetrics);
+ mpFontFace->GetMetrics(&aFontMetrics);
Point aPos;
sal_GlyphId nLGlyph;
@@ -3685,7 +3685,7 @@ bool D2DWriteTextOutRenderer::GetDWriteInkBox(IDWriteFontFace & rFontFace, SalLa
if (bVertical)
{
DWRITE_FONT_METRICS aFM;
- rFontFace.GetMetrics(&aFM);
+ mpFontFace->GetMetrics(&aFM);
nYDiff = (aFM.ascent - aFM.descent) * mlfEmHeight / aFM.designUnitsPerEm;
}
More information about the Libreoffice-commits
mailing list