fudgets-0.18.3: hsrc/drawing/LoadFont.hs
module LoadFont(loadQueryFont, queryFont, loadFont, loadQueryFontF,
queryFontF, loadFontF,safeLoadQueryFont, safeLoadQueryFontF,
listFonts,listFontsF,listFontsWithInfo,tryLoadFont) where
import Command(XRequest(..))
import Event
import Font(fsl2fs) --FontStruct,FontStructList,
--import Fudget
--import Geometry(Line, Point, Rect, Size(..))
--import EitherUtils(stripMaybe,mapMaybe)
import Data.Maybe(fromJust)
import HbcUtils(mapSnd)
import Cont(tryM)
import Xrequest
import Xtypes
lf k fontname =
let cmd = LoadFont fontname
expected (FontLoaded fid) = Just fid
expected _ = Nothing
in k cmd expected
loadFont x = lf xrequest x
loadFontF = lf xrequestF
qf k fid =
let cmd = QueryFont fid
expected (FontQueried fs) = Just (fsl2fs (fromJust fs))
expected _ = Nothing
in k cmd expected
queryFont x = qf xrequest x
queryFontF = qf xrequestF
lqf k fontname =
let cmd = LoadQueryFont fontname
expected (FontQueried optfs) = Just (fmap fsl2fs optfs)
expected _ = Nothing
in k cmd expected
loadQueryFont x = lqf xrequest x
loadQueryFontF = lqf xrequestF
safeLqf lqf fn k =
tryM (lqf fn)
(lqf ("fixed"::FontName) $ \ (Just fs) -> k fs)
k
safeLoadQueryFont x = safeLqf loadQueryFont x
safeLoadQueryFontF = safeLqf loadQueryFontF
lif k pattern maxnames =
let cmd = ListFonts pattern maxnames
expected (GotFontList fns) = Just fns
expected _ = Nothing
in k cmd expected
listFonts x = lif xrequest x
listFontsF = lif xrequestF
listFontsWithInfo pattern maxnames =
let cmd = ListFontsWithInfo pattern maxnames
expected (GotFontListWithInfo fis) = Just (mapSnd fsl2fs fis)
-- expected (GotFontListWithInfo fis) = Just (map ((,) pattern . fsl2fs) fis)
expected _ = Nothing
in xrequest cmd expected
-- Since loadFont succeeds and returns a FontId even if the font doesn't exist:
tryLoadFont fn k =
listFonts fn 1 $ \ fns ->
case fns of
fn:_ -> loadFont fn (k . Just)
_ -> k Nothing