summaryrefslogtreecommitdiff
path: root/vcl/qa/cppunit
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2024-03-31 00:45:25 +0500
committerMike Kaganski <mike.kaganski@collabora.com>2024-04-01 13:06:05 +0200
commitdff57d2b4f5abd1b51ebfb0015339471f61e72f9 (patch)
tree7b14e261fe2e798ef2ca03210936fbfbbd7f663e /vcl/qa/cppunit
parent8962141a12c966b2d891829925e6203bf8d51852 (diff)
tdf#160436: fix glyph bounds calculation for vertical glyphs
It is unclear if LogicalFontInstance::GetGlyphBoundRect can be called for both normal and rotated variants of the same glyph in the same font. If yes, then the normal and vertical variants must be cached separately, or possibly vertical variant can be not cached, but always calculated. This problem already existed before, so this change doesn't introduce a new issue. Change-Id: I9b50ef340c9e38db7bef890165519aadc96d3ffa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165581 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'vcl/qa/cppunit')
-rw-r--r--vcl/qa/cppunit/logicalfontinstance.cxx25
1 files changed, 25 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/logicalfontinstance.cxx b/vcl/qa/cppunit/logicalfontinstance.cxx
index 2a0e30d50c34..eb803ed40363 100644
--- a/vcl/qa/cppunit/logicalfontinstance.cxx
+++ b/vcl/qa/cppunit/logicalfontinstance.cxx
@@ -46,6 +46,7 @@ void VclLogicalFontInstanceTest::testglyphboundrect()
basegfx::B2DRectangle aBoundRect;
const auto LATIN_SMALL_LETTER_B = 0x0062;
+ const auto SECTION_SIGN = 0x00A7; // UTR#50: Vertical_Orientation (vo) property value U
pFontInstance->GetGlyphBoundRect(pFontInstance->GetGlyphIndex(LATIN_SMALL_LETTER_B), aBoundRect,
false);
@@ -54,6 +55,14 @@ void VclLogicalFontInstanceTest::testglyphboundrect()
CPPUNIT_ASSERT_DOUBLES_EQUAL(49.5, aBoundRect.getWidth(), 0.05);
CPPUNIT_ASSERT_DOUBLES_EQUAL(80.8, aBoundRect.getHeight(), 0.05);
+ // tdf#160436: test vertically oriented glyphs
+ pFontInstance->GetGlyphBoundRect(pFontInstance->GetGlyphIndex(SECTION_SIGN), aBoundRect, true);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-79.7, aBoundRect.getMinX(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-55.0, aBoundRect.getMinY(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(88.9, aBoundRect.getWidth(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(48.8, aBoundRect.getHeight(), 0.05);
+
font.SetOrientation(900_deg10);
device->SetFont(font);
@@ -67,6 +76,14 @@ void VclLogicalFontInstanceTest::testglyphboundrect()
CPPUNIT_ASSERT_DOUBLES_EQUAL(80.8, aBoundRect.getWidth(), 0.05);
CPPUNIT_ASSERT_DOUBLES_EQUAL(49.5, aBoundRect.getHeight(), 0.05);
+ // tdf#160436: test vertically oriented glyphs
+ pFontInstance->GetGlyphBoundRect(pFontInstance->GetGlyphIndex(SECTION_SIGN), aBoundRect, true);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-55.0, aBoundRect.getMinX(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-9.2, aBoundRect.getMinY(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(48.8, aBoundRect.getWidth(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(88.9, aBoundRect.getHeight(), 0.05);
+
font.SetOrientation(450_deg10);
device->SetFont(font);
@@ -79,6 +96,14 @@ void VclLogicalFontInstanceTest::testglyphboundrect()
CPPUNIT_ASSERT_DOUBLES_EQUAL(-96.4, aBoundRect.getMinY(), 0.05);
CPPUNIT_ASSERT_DOUBLES_EQUAL(92.1, aBoundRect.getWidth(), 0.05);
CPPUNIT_ASSERT_DOUBLES_EQUAL(92.1, aBoundRect.getHeight(), 0.05);
+
+ // tdf#160436: test vertically oriented glyphs
+ pFontInstance->GetGlyphBoundRect(pFontInstance->GetGlyphIndex(SECTION_SIGN), aBoundRect, true);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-95.3, aBoundRect.getMinX(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-45.4, aBoundRect.getMinY(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(97.4, aBoundRect.getWidth(), 0.05);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(97.4, aBoundRect.getHeight(), 0.05);
}
CPPUNIT_TEST_SUITE_REGISTRATION(VclLogicalFontInstanceTest);