From 4c1db0da368a4d8a2a33ab0d37deef45e99a54d2 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 4 May 2023 00:36:27 +0200 Subject: [PATCH] Test layout with mixed font sizes. --- .golden/richParagraphLayout/mixedSizes.golden | 68 +++++++++++++++++++ test/Data/Text/ParagraphLayout/FontLoader.hs | 8 +++ .../ParagraphLayout/Rich/ParagraphData.hs | 21 ++++++ test/Data/Text/ParagraphLayout/RichSpec.hs | 7 ++ 4 files changed, 104 insertions(+) create mode 100644 .golden/richParagraphLayout/mixedSizes.golden diff --git a/.golden/richParagraphLayout/mixedSizes.golden b/.golden/richParagraphLayout/mixedSizes.golden new file mode 100644 index 0000000..afff56f --- /dev/null +++ b/.golden/richParagraphLayout/mixedSizes.golden @@ -0,0 +1,68 @@ +ParagraphLayout + { paragraphRect = Rect {x_origin = 0, y_origin = 0, x_size = 8634, y_size = -1121} + , paragraphFragments = + [ Fragment + { fragmentUserData = "bigText1" + , fragmentLine = 1 + , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1651, y_size = -1121} + , fragmentPen = (0, -932) + , fragmentGlyphs = + [ (GlyphInfo {codepoint = 69, cluster = 6, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 589, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 76, cluster = 7, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 253, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 74, cluster = 8, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 578, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 3, cluster = 9, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 231, y_advance = 0, x_offset = 0, y_offset = 0}) + ] + } + , Fragment + { fragmentUserData = "smallText1" + , fragmentLine = 1 + , fragmentRect = Rect {x_origin = 1651, y_origin = 0, x_size = 1956, y_size = -841} + , fragmentPen = (0, -699) + , fragmentGlyphs = + [ (GlyphInfo {codepoint = 86, cluster = 10, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 335, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 80, cluster = 11, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 646, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 68, cluster = 12, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 392, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 79, cluster = 13, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 205, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 79, cluster = 14, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 205, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 3, cluster = 15, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 173, y_advance = 0, x_offset = 0, y_offset = 0}) + ] + } + , Fragment + { fragmentUserData = "bigText2" + , fragmentLine = 1 + , fragmentRect = Rect {x_origin = 3607, y_origin = 0, x_size = 1651, y_size = -1121} + , fragmentPen = (0, -932) + , fragmentGlyphs = + [ (GlyphInfo {codepoint = 69, cluster = 16, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 589, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 76, cluster = 17, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 253, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 74, cluster = 18, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 578, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 3, cluster = 19, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 231, y_advance = 0, x_offset = 0, y_offset = 0}) + ] + } + , Fragment + { fragmentUserData = "smallText2" + , fragmentLine = 1 + , fragmentRect = Rect {x_origin = 5258, y_origin = 0, x_size = 1956, y_size = -841} + , fragmentPen = (0, -699) + , fragmentGlyphs = + [ (GlyphInfo {codepoint = 86, cluster = 20, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 335, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 80, cluster = 21, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 646, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 68, cluster = 22, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 392, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 79, cluster = 23, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 205, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 79, cluster = 24, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 205, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 3, cluster = 25, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 173, y_advance = 0, x_offset = 0, y_offset = 0}) + ] + } + , Fragment + { fragmentUserData = "bigText3" + , fragmentLine = 1 + , fragmentRect = Rect {x_origin = 7214, y_origin = 0, x_size = 1420, y_size = -1121} + , fragmentPen = (0, -932) + , fragmentGlyphs = + [ (GlyphInfo {codepoint = 69, cluster = 26, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 589, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 76, cluster = 27, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 253, y_advance = 0, x_offset = 0, y_offset = 0}) + , (GlyphInfo {codepoint = 74, cluster = 28, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False}, GlyphPos {x_advance = 578, y_advance = 0, x_offset = 0, y_offset = 0}) + ] + } + ] + } diff --git a/test/Data/Text/ParagraphLayout/FontLoader.hs b/test/Data/Text/ParagraphLayout/FontLoader.hs index 3dbb4cb..0aa9e9c 100644 --- a/test/Data/Text/ParagraphLayout/FontLoader.hs +++ b/test/Data/Text/ParagraphLayout/FontLoader.hs @@ -5,6 +5,7 @@ module Data.Text.ParagraphLayout.FontLoader , loadFont , writeFontInfo , testingOptions + , testingOptionsSmall , demoOptions ) where @@ -67,6 +68,13 @@ testingOptions = defaultFontOptions { optionScale = Just (1000, 1000) } +-- | Like `testingOptions` with font size proportionally changed to 18px. +testingOptionsSmall :: FontOptions +testingOptionsSmall = defaultFontOptions { + optionPPEm = Just (18, 18), + optionScale = Just (750, 750) +} + -- | Font options to be used to be used for easy visual testing in a demo app -- (32 units per EM, 1 unit per pixel). -- This makes 20em equal 640px, which is the width of the demo window. diff --git a/test/Data/Text/ParagraphLayout/Rich/ParagraphData.hs b/test/Data/Text/ParagraphLayout/Rich/ParagraphData.hs index f097d02..19bb42e 100644 --- a/test/Data/Text/ParagraphLayout/Rich/ParagraphData.hs +++ b/test/Data/Text/ParagraphLayout/Rich/ParagraphData.hs @@ -1,5 +1,6 @@ module Data.Text.ParagraphLayout.Rich.ParagraphData ( loremIpsumParagraph + , mixedSizesParagraph , nestedBoxesParagraph ) where @@ -41,6 +42,26 @@ loremIpsumParagraph font = constructParagraph where t = t_ { textFont = font, textLanguage = "zxx" } +mixedSizesParagraph :: (Font, Font) -> ParagraphOptions -> Paragraph String +mixedSizesParagraph (bigFont, smallFont) = constructParagraph + (pack "prefix") + (rootBox tBig + [ text "bigText1" "big " + , box "smallBox1" b_ tSmall + [ text "smallText1" "small " + ] + , text "bigText2" "big " + , box "smallBox2" b_ tSmall + [ text "smallText2" "small " + ] + , text "bigText3" "big" + ] + ) + (pack "suffix") + where + tBig = t_ { textFont = bigFont, textLanguage = "en" } + tSmall = t_ { textFont = smallFont, textLanguage = "en" } + nestedBoxesParagraph :: Font -> ParagraphOptions -> Paragraph String nestedBoxesParagraph font = constructParagraph (pack "prefix") diff --git a/test/Data/Text/ParagraphLayout/RichSpec.hs b/test/Data/Text/ParagraphLayout/RichSpec.hs index 7144591..021c28a 100644 --- a/test/Data/Text/ParagraphLayout/RichSpec.hs +++ b/test/Data/Text/ParagraphLayout/RichSpec.hs @@ -20,6 +20,7 @@ spec = do describe "with Latin font" $ do font <- runIO $ loadFont latinFont 0 testingOptions + fontSmall <- runIO $ loadFont latinFont 0 testingOptionsSmall it "wraps lorem ipsum at 20em" $ do let opts = defaultParagraphOptions { paragraphMaxWidth = 20000 } @@ -27,6 +28,12 @@ spec = do let result = layoutRich input result `shouldBeGolden` "loremIpsum20em" + it "handles mixed sizes" $ do + let opts = defaultParagraphOptions + let input = mixedSizesParagraph (font, fontSmall) opts + let result = layoutRich input + result `shouldBeGolden` "mixedSizes" + it "handles nested boxes" $ do let opts = defaultParagraphOptions let input = nestedBoxesParagraph font opts -- 2.30.2