module Graphic(module Graphic,MeasuredGraphics,emptyMG,emptyMG',GCtx,Cont(..)) where import Fudget import FudgetIO import EitherUtils(Cont(..)) import Cont(conts) import MeasuredGraphics(MeasuredGraphics(..),measureString,measurePackedString,emptyMG,emptyMG') import GCtx(GCtx) import PackedString(PackedString) import Geometry() -- instance Num Point class Graphic a where measureGraphicK :: FudgetIO k => a -> GCtx -> Cont (k i o) MeasuredGraphics measureGraphicListK :: FudgetIO k => [a] -> GCtx -> Cont (k i o) MeasuredGraphics -- Default method for lists: measureGraphicListK xs gctx cont = conts (`measureGraphicK` gctx) xs $ \ mgs -> cont (ComposedM mgs) instance Graphic MeasuredGraphics where measureGraphicK cgfx gctx c = c cgfx instance Graphic Char where measureGraphicK c = measureString [c] measureGraphicListK = measureString instance Graphic a => Graphic [a] where measureGraphicK = measureGraphicListK instance (Graphic a,Graphic b) => Graphic (a,b) where measureGraphicK (x,y) gctx cont = measureGraphicK x gctx $ \ mx -> measureGraphicK y gctx $ \ my -> cont (ComposedM [mx,my]) measureText x = (measureString.show) x -- instance Text a => Graphics a where measureGraphicK = measureText instance Graphic Int where measureGraphicK = measureText instance Graphic Integer where measureGraphicK = measureText instance Graphic Bool where measureGraphicK = measureText instance Graphic Float where measureGraphicK = measureText instance Graphic Double where measureGraphicK = measureText instance Graphic PackedString where measureGraphicK = measurePackedString instance (Graphic a,Graphic b) => Graphic (Either a b) where measureGraphicK = either measureGraphicK measureGraphicK instance Graphic a => Graphic (Maybe a) where measureGraphicK = maybe (measureGraphicK (emptyMG 5)) measureGraphicK --instance Graphic Void