{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module DearImGui.FontAtlas
(
Raw.Font(..)
, FontSource(..)
, rebuild
, ConfigSetup(..)
, fontDataOwnedByAtlas
, fontNo
, sizePixels
, oversampleH
, oversampleV
, pixelSnapH
, glyphExtraSpacing
, glyphOffset
, glyphRanges
, glyphMinAdvanceX
, glyphMaxAdvanceX
, mergeMode
, fontBuilderFlags
, rasterizerMultiply
, ellipsisChar
, Ranges(..)
, RangesBuilderSetup(..)
, addChar
, addText
, addRanges
, addRangesRaw
, pattern Latin
, pattern Korean
, pattern Japanese
, pattern ChineseFull
, pattern ChineseSimplifiedCommon
, pattern Cyrillic
, pattern Thai
, pattern Vietnamese
, build
, clear
, setupFont
, setupRanges
, withRanges
, withConfig
, addFontFromFileTTF
, addFontFromFileTTF_
)
where
import Data.Bool (bool)
import Data.Maybe (fromMaybe)
import Foreign
import Foreign.C
import Control.Monad.IO.Class
( MonadIO, liftIO )
import Control.Monad.Managed
( MonadManaged, managed )
import qualified Control.Monad.Managed as Managed
import UnliftIO (MonadUnliftIO)
import UnliftIO.Exception (bracket)
import DearImGui.Raw.Font (Font(..))
import qualified DearImGui.Raw.Font as Raw
import DearImGui.Raw.Font.Config (FontConfig(..))
import qualified DearImGui.Raw.Font.Config as FontConfig
import DearImGui.Raw.Font.GlyphRanges (GlyphRanges(..), GlyphRangesBuilder(..))
import qualified DearImGui.Raw.Font.GlyphRanges as GlyphRanges
import DearImGui.Internal.Text (Text)
import qualified DearImGui.Internal.Text as Text
import DearImGui.Structs (ImVec2(..), ImWchar)
data FontSource
= DefaultFont
| FromTTF FilePath Float (Maybe ConfigSetup) Ranges
newtype ConfigSetup = ConfigSetup
{ ConfigSetup -> FontConfig -> IO ()
applyToConfig :: FontConfig -> IO ()
}
instance Semigroup ConfigSetup where
ConfigSetup FontConfig -> IO ()
f <> :: ConfigSetup -> ConfigSetup -> ConfigSetup
<> ConfigSetup FontConfig -> IO ()
g =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc -> FontConfig -> IO ()
f FontConfig
fc forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> FontConfig -> IO ()
g FontConfig
fc
instance Monoid ConfigSetup where
mempty :: ConfigSetup
mempty = (FontConfig -> IO ()) -> ConfigSetup
ConfigSetup (forall a b. a -> b -> a
const forall a. Monoid a => a
mempty)
data Ranges
= RangesRaw GlyphRanges
| RangesBuiltin GlyphRanges.Builtin
| RangesBuilder RangesBuilderSetup
pattern Latin :: Ranges
pattern $bLatin :: Ranges
$mLatin :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Latin = RangesBuiltin GlyphRanges.Latin
pattern Korean :: Ranges
pattern $bKorean :: Ranges
$mKorean :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Korean = RangesBuiltin GlyphRanges.Korean
pattern Japanese :: Ranges
pattern $bJapanese :: Ranges
$mJapanese :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Japanese = RangesBuiltin GlyphRanges.Japanese
pattern ChineseFull :: Ranges
pattern $bChineseFull :: Ranges
$mChineseFull :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
ChineseFull = RangesBuiltin GlyphRanges.ChineseFull
pattern ChineseSimplifiedCommon :: Ranges
pattern $bChineseSimplifiedCommon :: Ranges
$mChineseSimplifiedCommon :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
ChineseSimplifiedCommon = RangesBuiltin GlyphRanges.ChineseSimplifiedCommon
pattern Cyrillic :: Ranges
pattern $bCyrillic :: Ranges
$mCyrillic :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Cyrillic = RangesBuiltin GlyphRanges.Cyrillic
pattern Thai :: Ranges
pattern $bThai :: Ranges
$mThai :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Thai = RangesBuiltin GlyphRanges.Thai
pattern Vietnamese :: Ranges
pattern $bVietnamese :: Ranges
$mVietnamese :: forall {r}. Ranges -> ((# #) -> r) -> ((# #) -> r) -> r
Vietnamese = RangesBuiltin GlyphRanges.Vietnamese
newtype RangesBuilderSetup = RangesBuilderSetup
{ RangesBuilderSetup -> GlyphRangesBuilder -> IO ()
applyToBuilder :: GlyphRangesBuilder -> IO ()
}
instance Semigroup RangesBuilderSetup where
RangesBuilderSetup GlyphRangesBuilder -> IO ()
f <> :: RangesBuilderSetup -> RangesBuilderSetup -> RangesBuilderSetup
<> RangesBuilderSetup GlyphRangesBuilder -> IO ()
g =
(GlyphRangesBuilder -> IO ()) -> RangesBuilderSetup
RangesBuilderSetup \GlyphRangesBuilder
fc -> GlyphRangesBuilder -> IO ()
f GlyphRangesBuilder
fc forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> GlyphRangesBuilder -> IO ()
g GlyphRangesBuilder
fc
instance Monoid RangesBuilderSetup where
mempty :: RangesBuilderSetup
mempty = (GlyphRangesBuilder -> IO ()) -> RangesBuilderSetup
RangesBuilderSetup (forall a b. a -> b -> a
const forall a. Monoid a => a
mempty)
rebuild :: (MonadIO m, Traversable t) => t FontSource -> m (t Font)
rebuild :: forall (m :: * -> *) (t :: * -> *).
(MonadIO m, Traversable t) =>
t FontSource -> m (t Font)
rebuild t FontSource
sources = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ forall a r. Managed a -> (a -> IO r) -> IO r
Managed.with Managed (t Font)
action forall (f :: * -> *) a. Applicative f => a -> f a
pure
where
action :: Managed (t Font)
action = do
forall (m :: * -> *). MonadIO m => m ()
clear
t Font
fonts <- forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse forall (m :: * -> *). MonadManaged m => FontSource -> m Font
setupFont t FontSource
sources
forall (m :: * -> *). MonadIO m => m ()
build
forall (m :: * -> *) a. Monad m => a -> m a
return t Font
fonts
clear :: (MonadIO m) => m ()
clear :: forall (m :: * -> *). MonadIO m => m ()
clear = forall (m :: * -> *). MonadIO m => m ()
Raw.clearFontAtlas
build :: (MonadIO m) => m ()
build :: forall (m :: * -> *). MonadIO m => m ()
build = forall (m :: * -> *). MonadIO m => m ()
Raw.buildFontAtlas
addFontFromFileTTF :: MonadIO m
=> FilePath
-> Float
-> Maybe FontConfig
-> Maybe GlyphRanges
-> m (Maybe Font)
addFontFromFileTTF :: forall (m :: * -> *).
MonadIO m =>
FilePath
-> Float -> Maybe FontConfig -> Maybe GlyphRanges -> m (Maybe Font)
addFontFromFileTTF FilePath
font Float
size Maybe FontConfig
config Maybe GlyphRanges
ranges = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO do
res :: Font
res@(Font Ptr ImFont
ptr) <- forall a. FilePath -> (CString -> IO a) -> IO a
withCString FilePath
font \CString
fontPtr ->
forall (m :: * -> *).
MonadIO m =>
CString -> CFloat -> FontConfig -> GlyphRanges -> m Font
Raw.addFontFromFileTTF
CString
fontPtr
(Float -> CFloat
CFloat Float
size)
(forall a. a -> Maybe a -> a
fromMaybe (Ptr ImFontConfig -> FontConfig
FontConfig forall a. Ptr a
nullPtr) Maybe FontConfig
config)
(forall a. a -> Maybe a -> a
fromMaybe (Ptr ImWchar -> GlyphRanges
GlyphRanges forall a. Ptr a
nullPtr) Maybe GlyphRanges
ranges)
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$
if forall a b. Ptr a -> Ptr b
castPtr Ptr ImFont
ptr forall a. Eq a => a -> a -> Bool
== forall a. Ptr a
nullPtr
then forall a. Maybe a
Nothing
else forall a. a -> Maybe a
Just Font
res
addFontFromFileTTF_ :: MonadIO m
=> FilePath
-> Float
-> m (Maybe Raw.Font)
addFontFromFileTTF_ :: forall (m :: * -> *).
MonadIO m =>
FilePath -> Float -> m (Maybe Font)
addFontFromFileTTF_ FilePath
font Float
size =
forall (m :: * -> *).
MonadIO m =>
FilePath
-> Float -> Maybe FontConfig -> Maybe GlyphRanges -> m (Maybe Font)
addFontFromFileTTF FilePath
font Float
size forall a. Maybe a
Nothing forall a. Maybe a
Nothing
setupFont :: (MonadManaged m) => FontSource -> m Font
setupFont :: forall (m :: * -> *). MonadManaged m => FontSource -> m Font
setupFont = \case
FontSource
DefaultFont ->
forall (m :: * -> *). MonadIO m => m Font
Raw.addFontDefault
FromTTF FilePath
path Float
size Maybe ConfigSetup
configSetup Ranges
ranges -> do
Maybe GlyphRanges
glyphRanges' <- forall (m :: * -> *).
MonadManaged m =>
Ranges -> m (Maybe GlyphRanges)
setupRanges Ranges
ranges
Maybe FontConfig
config <- forall (m :: * -> *) a.
MonadManaged m =>
(forall r. (a -> IO r) -> IO r) -> m a
managed (forall (m :: * -> *) a.
MonadUnliftIO m =>
Maybe ConfigSetup -> (Maybe FontConfig -> m a) -> m a
withConfig Maybe ConfigSetup
configSetup)
Maybe Font
mFont <- forall (m :: * -> *).
MonadIO m =>
FilePath
-> Float -> Maybe FontConfig -> Maybe GlyphRanges -> m (Maybe Font)
addFontFromFileTTF FilePath
path Float
size Maybe FontConfig
config Maybe GlyphRanges
glyphRanges'
case Maybe Font
mFont of
Maybe Font
Nothing ->
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. MonadFail m => FilePath -> m a
fail forall a b. (a -> b) -> a -> b
$ FilePath
"Couldn't load font from " forall a. Semigroup a => a -> a -> a
<> FilePath
path
Just Font
font ->
forall (f :: * -> *) a. Applicative f => a -> f a
pure Font
font
setupRanges :: (MonadManaged m) => Ranges -> m (Maybe GlyphRanges)
setupRanges :: forall (m :: * -> *).
MonadManaged m =>
Ranges -> m (Maybe GlyphRanges)
setupRanges = \case
RangesRaw GlyphRanges
ranges ->
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just GlyphRanges
ranges
RangesBuiltin Builtin
builtin ->
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ Builtin -> Maybe GlyphRanges
GlyphRanges.builtinSetup Builtin
builtin
RangesBuilder RangesBuilderSetup
settings -> do
GlyphRanges
built <- forall (m :: * -> *) a.
MonadManaged m =>
(forall r. (a -> IO r) -> IO r) -> m a
managed forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
MonadUnliftIO m =>
RangesBuilderSetup -> (GlyphRanges -> m a) -> m a
withRanges RangesBuilderSetup
settings
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just GlyphRanges
built
withRanges :: (MonadUnliftIO m) => RangesBuilderSetup -> (GlyphRanges -> m a) -> m a
withRanges :: forall (m :: * -> *) a.
MonadUnliftIO m =>
RangesBuilderSetup -> (GlyphRanges -> m a) -> m a
withRanges (RangesBuilderSetup GlyphRangesBuilder -> IO ()
setup) GlyphRanges -> m a
fn =
forall (m :: * -> *) a b c.
MonadUnliftIO m =>
m a -> (a -> m b) -> (a -> m c) -> m c
bracket m (GlyphRangesVector, GlyphRangesBuilder)
acquire forall {m :: * -> *}.
MonadIO m =>
(GlyphRangesVector, GlyphRangesBuilder) -> m ()
release forall {b}. (GlyphRangesVector, b) -> m a
execute
where
acquire :: m (GlyphRangesVector, GlyphRangesBuilder)
acquire = do
GlyphRangesBuilder
builder <- forall (m :: * -> *). MonadIO m => m GlyphRangesBuilder
GlyphRanges.new
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ GlyphRangesBuilder -> IO ()
setup GlyphRangesBuilder
builder
GlyphRangesVector
rangesVec <- forall (m :: * -> *).
MonadIO m =>
GlyphRangesBuilder -> m GlyphRangesVector
GlyphRanges.buildRangesVector GlyphRangesBuilder
builder
forall (m :: * -> *) a. Monad m => a -> m a
return (GlyphRangesVector
rangesVec, GlyphRangesBuilder
builder)
release :: (GlyphRangesVector, GlyphRangesBuilder) -> m ()
release (GlyphRangesVector
rangesVec, GlyphRangesBuilder
builder) = do
forall (m :: * -> *). MonadIO m => GlyphRangesVector -> m ()
GlyphRanges.destroyRangesVector GlyphRangesVector
rangesVec
forall (m :: * -> *). MonadIO m => GlyphRangesBuilder -> m ()
GlyphRanges.destroy GlyphRangesBuilder
builder
execute :: (GlyphRangesVector, b) -> m a
execute (GlyphRangesVector
rangesVec, b
_) =
GlyphRanges -> m a
fn (GlyphRangesVector -> GlyphRanges
GlyphRanges.fromRangesVector GlyphRangesVector
rangesVec)
withConfig :: (MonadUnliftIO m) => Maybe ConfigSetup -> (Maybe FontConfig -> m a) -> m a
withConfig :: forall (m :: * -> *) a.
MonadUnliftIO m =>
Maybe ConfigSetup -> (Maybe FontConfig -> m a) -> m a
withConfig Maybe ConfigSetup
mSetup Maybe FontConfig -> m a
action =
case Maybe ConfigSetup
mSetup of
Maybe ConfigSetup
Nothing ->
Maybe FontConfig -> m a
action forall a. Maybe a
Nothing
Just (ConfigSetup FontConfig -> IO ()
setup) ->
forall (m :: * -> *) a b c.
MonadUnliftIO m =>
m a -> (a -> m b) -> (a -> m c) -> m c
bracket m FontConfig
acquire (forall (m :: * -> *). MonadIO m => FontConfig -> m ()
FontConfig.destroy) (Maybe FontConfig -> m a
action forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just)
where
acquire :: m FontConfig
acquire = do
FontConfig
config <- forall (m :: * -> *). MonadIO m => m FontConfig
FontConfig.new
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontConfig -> IO ()
setup FontConfig
config
forall (m :: * -> *) a. Monad m => a -> m a
return FontConfig
config
addChar :: ImWchar -> RangesBuilderSetup
addChar :: ImWchar -> RangesBuilderSetup
addChar ImWchar
char =
(GlyphRangesBuilder -> IO ()) -> RangesBuilderSetup
RangesBuilderSetup \GlyphRangesBuilder
builder ->
forall (m :: * -> *).
MonadIO m =>
GlyphRangesBuilder -> ImWchar -> m ()
GlyphRanges.addChar GlyphRangesBuilder
builder ImWchar
char
addText :: Text -> RangesBuilderSetup
addText :: Text -> RangesBuilderSetup
addText Text
str =
(GlyphRangesBuilder -> IO ()) -> RangesBuilderSetup
RangesBuilderSetup \GlyphRangesBuilder
builder ->
forall (m :: * -> *) a.
MonadUnliftIO m =>
Text -> (CString -> m a) -> m a
Text.withCString Text
str (forall (m :: * -> *).
MonadIO m =>
GlyphRangesBuilder -> CString -> m ()
GlyphRanges.addText GlyphRangesBuilder
builder)
addRangesRaw :: GlyphRanges -> RangesBuilderSetup
addRangesRaw :: GlyphRanges -> RangesBuilderSetup
addRangesRaw GlyphRanges
ranges =
(GlyphRangesBuilder -> IO ()) -> RangesBuilderSetup
RangesBuilderSetup \GlyphRangesBuilder
builder ->
forall (m :: * -> *).
MonadIO m =>
GlyphRangesBuilder -> GlyphRanges -> m ()
GlyphRanges.addRanges GlyphRangesBuilder
builder GlyphRanges
ranges
addRanges :: Ranges -> RangesBuilderSetup
addRanges :: Ranges -> RangesBuilderSetup
addRanges = \case
RangesRaw GlyphRanges
ranges ->
GlyphRanges -> RangesBuilderSetup
addRangesRaw GlyphRanges
ranges
RangesBuilder RangesBuilderSetup
settings ->
RangesBuilderSetup
settings
RangesBuiltin Builtin
builtin ->
GlyphRanges -> RangesBuilderSetup
addRangesRaw (Builtin -> GlyphRanges
GlyphRanges.getBuiltin Builtin
builtin)
fontDataOwnedByAtlas :: Bool -> ConfigSetup
fontDataOwnedByAtlas :: Bool -> ConfigSetup
fontDataOwnedByAtlas Bool
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CBool -> m ()
FontConfig.setFontDataOwnedByAtlas FontConfig
fc (forall a. a -> a -> Bool -> a
bool CBool
0 CBool
1 Bool
value)
fontNo :: Int -> ConfigSetup
fontNo :: Int -> ConfigSetup
fontNo Int
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CInt -> m ()
FontConfig.setFontNo FontConfig
fc (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
value)
sizePixels :: Float -> ConfigSetup
sizePixels :: Float -> ConfigSetup
sizePixels Float
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CFloat -> m ()
FontConfig.setSizePixels FontConfig
fc (Float -> CFloat
CFloat Float
value)
oversampleH :: Int -> ConfigSetup
oversampleH :: Int -> ConfigSetup
oversampleH Int
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CInt -> m ()
FontConfig.setOversampleH FontConfig
fc (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
value)
oversampleV :: Int -> ConfigSetup
oversampleV :: Int -> ConfigSetup
oversampleV Int
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CInt -> m ()
FontConfig.setOversampleV FontConfig
fc (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
value)
pixelSnapH :: Bool -> ConfigSetup
pixelSnapH :: Bool -> ConfigSetup
pixelSnapH Bool
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CBool -> m ()
FontConfig.setPixelSnapH FontConfig
fc (forall a. a -> a -> Bool -> a
bool CBool
0 CBool
1 Bool
value)
glyphExtraSpacing :: (Float, Float) -> ConfigSetup
(Float
x, Float
y) =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
Foreign.with (Float -> Float -> ImVec2
ImVec2 Float
x Float
y) (forall (m :: * -> *). MonadIO m => FontConfig -> Ptr ImVec2 -> m ()
FontConfig.setGlyphExtraSpacing FontConfig
fc)
glyphOffset :: (Float, Float) -> ConfigSetup
glyphOffset :: (Float, Float) -> ConfigSetup
glyphOffset (Float
x, Float
y) =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
Foreign.with (Float -> Float -> ImVec2
ImVec2 Float
x Float
y) (forall (m :: * -> *). MonadIO m => FontConfig -> Ptr ImVec2 -> m ()
FontConfig.setGlyphOffset FontConfig
fc)
glyphRanges :: GlyphRanges -> ConfigSetup
glyphRanges :: GlyphRanges -> ConfigSetup
glyphRanges GlyphRanges
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *).
MonadIO m =>
FontConfig -> GlyphRanges -> m ()
FontConfig.setGlyphRanges FontConfig
fc GlyphRanges
value
glyphMinAdvanceX :: Float -> ConfigSetup
glyphMinAdvanceX :: Float -> ConfigSetup
glyphMinAdvanceX Float
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CFloat -> m ()
FontConfig.setGlyphMinAdvanceX FontConfig
fc (Float -> CFloat
CFloat Float
value)
glyphMaxAdvanceX :: Float -> ConfigSetup
glyphMaxAdvanceX :: Float -> ConfigSetup
glyphMaxAdvanceX Float
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CFloat -> m ()
FontConfig.setGlyphMaxAdvanceX FontConfig
fc (Float -> CFloat
CFloat Float
value)
mergeMode :: Bool -> ConfigSetup
mergeMode :: Bool -> ConfigSetup
mergeMode Bool
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CBool -> m ()
FontConfig.setMergeMode FontConfig
fc (forall a. a -> a -> Bool -> a
bool CBool
0 CBool
1 Bool
value)
fontBuilderFlags :: Int -> ConfigSetup
fontBuilderFlags :: Int -> ConfigSetup
fontBuilderFlags Int
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CUInt -> m ()
FontConfig.setFontBuilderFlags FontConfig
fc (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
value)
rasterizerMultiply :: Float -> ConfigSetup
rasterizerMultiply :: Float -> ConfigSetup
rasterizerMultiply Float
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> CFloat -> m ()
FontConfig.setRasterizerMultiply FontConfig
fc (Float -> CFloat
CFloat Float
value)
ellipsisChar :: ImWchar -> ConfigSetup
ellipsisChar :: ImWchar -> ConfigSetup
ellipsisChar ImWchar
value =
(FontConfig -> IO ()) -> ConfigSetup
ConfigSetup \FontConfig
fc ->
forall (m :: * -> *). MonadIO m => FontConfig -> ImWchar -> m ()
FontConfig.setEllipsisChar FontConfig
fc ImWchar
value