module Data.Text.ParagraphLayout.Internal.Fragment (Fragment(..)) where import Data.Int (Int32) import Data.Text.Glyphize (GlyphInfo, GlyphPos) import Data.Text.ParagraphLayout.Internal.Rect -- | Box fragment or fragment (CSS3), except that continuous text even within -- one line can be split into multiple fragments because of spans or changes in -- script. data Fragment = Fragment { fragmentRect :: Rect Int32 -- ^ Physical position of the fragment within the paragraph, calculated -- using all glyph advances in this fragment and the calculated line height. -- -- This is the space that the glyphs "take up" and is probably what you -- want to use for detecting position-based events such as mouse clicks. -- -- Beware that actual glyphs will not be drawn exactly to the borders of -- this rectangle -- they may be offset inwards and they can also extend -- outwards! -- -- These are not the typographic bounding boxes that you use for determining -- the area to draw on -- you need FreeType or a similar library for that. -- -- The origin coordinates are relative to the paragraph. -- -- The sizes can be positive or negative, depending on the text direction. -- -- X coordinates increase from left to right. -- Y coordinates increase from bottom to top. , fragmentPen :: (Int32, Int32) -- ^ Coordinates of the initial pen position, from which the first glyph -- should be drawn. That glyph's `x_advance` or `y_advance` are then used -- to move the pen position for the next glyph. , fragmentGlyphs :: [(GlyphInfo, GlyphPos)] } deriving (Eq, Read, Show)