packages feed

balkon-1.1.0.0: src/Data/Text/ParagraphLayout/Internal/BoxOptions.hs

module Data.Text.ParagraphLayout.Internal.BoxOptions
    ( BoxOptions (..)
    , BoxSpacing (..)
    , defaultBoxOptions
    )
where

import Data.Int (Int32)

-- | Style options to be applied to an inline box.
--
-- This record type is likely to be extended in the future.
-- Use `defaultBoxOptions` and update it with specific record selectors
-- instead of constructing `BoxOptions` directly.
data BoxOptions = BoxOptions

    { boxSpacing :: BoxSpacing
    -- ^ Determines amount of empty space to add before the first fragment
    -- and/or after the last fragment of this box.
    --
    -- This can be used to reserve space for a left margin, border,
    -- and/or padding.

    }
    deriving (Eq)

-- | Determines the amount of empty space to add around a box.
data BoxSpacing

    -- | Specification using absolute directions, unaffected by text direction.
    --
    -- (However, text direction is still used in case of fragmentation,
    -- to determine how to map the first (last) fragment to left (right).)
    = BoxSpacingLeftRight

        Int32
        -- ^ Amount of empty space to add to the left side of the
        -- first fragment (for LTR text) or last fragment (for RTL text)
        -- created from this box.

        Int32
        -- ^ Amount of empty space to add to the right side of the
        -- first fragment (for RTL text) or last fragment (for LTR text)
        -- created from this box.

    deriving (Eq, Show, Read)

-- | `BoxOptions` with default values.
defaultBoxOptions :: BoxOptions
defaultBoxOptions = BoxOptions
    { boxSpacing = BoxSpacingLeftRight 0 0
    }