{-# OPTIONS -Wall #-} module FontPic where import Wumpus.Basic.Chains import Wumpus.Basic.Graphic import Wumpus.Basic.Colour.SVGColours ( steel_blue ) import Wumpus.Basic.Colour.X11Colours ( indian_red1 ) import Wumpus.Basic.SafeFonts import Wumpus.Core -- package: wumpus-core import Control.Monad import System.Directory main :: IO () main = do createDirectoryIfMissing True "./out/" writeEPS_latin1 "./out/font_courier.eps" courier_pic writeSVG_latin1 "./out/font_courier.svg" courier_pic writeEPS_latin1 "./out/font_times.eps" times_pic writeSVG_latin1 "./out/font_times.svg" times_pic writeEPS_latin1 "./out/font_helvetica.eps" helvetica_pic writeSVG_latin1 "./out/font_helvetica.svg" helvetica_pic writeEPS_latin1 "./out/font_symbol.eps" symbol_pic writeSVG_latin1 "./out/font_symbol.svg" symbol_pic fontMsg :: FontFace -> Int -> String fontMsg ff sz = msgF [] where msgF = showString (font_name ff) . showChar ' ' . shows sz . showString "pt" makeLabel :: RGBi -> FontFace -> Int -> DLocGraphic makeLabel rgb ff sz = localize upd . (textline $ fontMsg ff sz) where upd = fillColour rgb . fontsize sz . fontface ff -- indian_red1 -- steel_blue point_sizes :: [Int] point_sizes = [10, 12, 18, 24, 36, 48] positions :: [Int] positions = [0, 12, 27, 49, 78, 122] pointChain :: LocChain Int Int Double pointChain = verticals positions fontGraphic :: RGBi -> FontFace -> DPoint2 -> Drawing Double () fontGraphic rgb ff pt = let ps = unchain (coordinateScalingContext 1 1) $ pointChain pt in zipWithM_ (\p1 sz -> draw $ makeLabel rgb ff sz `at` p1) ps point_sizes std_ctx :: DrawingContext std_ctx = standardContext 10 fontPicture :: [(RGBi,FontFace)] -> DPicture fontPicture xs = liftToPictureU $ execDrawing std_ctx $ zipWithM (\(rgb,ff) pt -> fontGraphic rgb ff pt) xs ps where ps = unchain (coordinateScalingContext 1 180) $ tableDown 4 1 -------------------------------------------------------------------------------- -- Times times_pic :: Picture Double times_pic = fontPicture [ (steel_blue, times_roman) , (indian_red1, times_italic) , (steel_blue, times_bold) , (indian_red1, times_bold_italic) ] helvetica_pic :: Picture Double helvetica_pic = fontPicture [ (steel_blue, helvetica) , (indian_red1, helvetica_oblique) , (steel_blue, helvetica_bold) , (indian_red1, helvetica_bold_oblique) ] -------------------------------------------------------------------------------- courier_pic :: Picture Double courier_pic = fontPicture [ (steel_blue, courier) , (indian_red1, courier_oblique) , (steel_blue, courier_bold) , (indian_red1, courier_bold_oblique) ] -------------------------------------------------------------------------------- symbol_pic :: Picture Double symbol_pic = fontPicture [ (steel_blue, symbol) ]