module Graphic2Pixmap(graphic2PixmapImage,PixmapImage(..)) where
import DrawCompiledGraphics(drawK')
import MeasuredGraphics(compileMG)
import Graphic
import PixmapGen
import Pixmap(createPixmap)
import LayoutRequest(minsize)
import XDraw
import ResourceIds(copyFromParent)
import FixedDrawing
import FudgetIO
import NullF() -- instance FudgetIO K

graphic2PixmapImage :: a -> GCtx -> (PixmapImage -> k i o) -> k i o
graphic2PixmapImage a
g GCtx
gctx PixmapImage -> k i o
cont =
  a -> GCtx -> Cont (k i o) MeasuredGraphics
forall a (k :: * -> * -> *) i o.
(Graphic a, FudgetIO k) =>
a -> GCtx -> Cont (k i o) MeasuredGraphics
measureGraphicK a
g GCtx
gctx Cont (k i o) MeasuredGraphics -> Cont (k i o) MeasuredGraphics
forall a b. (a -> b) -> a -> b
$ \ MeasuredGraphics
mg -> MeasuredGraphics -> (PixmapImage -> k i o) -> k i o
forall a (c :: * -> * -> *) i o.
(PixmapGen a, FudgetIO c) =>
a -> Cont (c i o) PixmapImage
convToPixmapK MeasuredGraphics
mg PixmapImage -> k i o
cont

measuredGraphics2Pixmap :: MeasuredGraphics -> (PixmapImage -> f b ho) -> f b ho
measuredGraphics2Pixmap MeasuredGraphics
mg PixmapImage -> f b ho
cont =
  let (CompiledGraphics
cg,LayoutRequest
req) = (Size -> Size)
-> MeasuredGraphics -> (CompiledGraphics, LayoutRequest)
compileMG Size -> Size
forall a. a -> a
id MeasuredGraphics
mg
      size :: Size
size = LayoutRequest -> Size
minsize LayoutRequest
req
  in Size -> Int -> (PixmapId -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
Size -> Int -> (PixmapId -> f b ho) -> f b ho
createPixmap Size
size Int
copyFromParent ((PixmapId -> f b ho) -> f b ho) -> (PixmapId -> f b ho) -> f b ho
forall a b. (a -> b) -> a -> b
$ \ PixmapId
pm ->
     Drawable
-> (GCId, Rect -> [Any])
-> (Any -> [Rect])
-> CompiledGraphics
-> f b ho
-> f b ho
forall (f :: * -> * -> *) t hi ho.
FudgetIO f =>
Drawable
-> (GCId, Rect -> [t])
-> (t -> [Rect])
-> CompiledGraphics
-> f hi ho
-> f hi ho
drawK' (PixmapId -> Drawable
Pixmap PixmapId
pm) (GCId
forall a. HasCallStack => a
undefined,[Any] -> Rect -> [Any]
forall a b. a -> b -> a
const []) ([Rect] -> Any -> [Rect]
forall a b. a -> b -> a
const []) CompiledGraphics
cg (f b ho -> f b ho) -> f b ho -> f b ho
forall a b. (a -> b) -> a -> b
$
     PixmapImage -> f b ho
cont (Size -> PixmapId -> PixmapImage
PixmapImage Size
size PixmapId
pm)

instance PixmapGen MeasuredGraphics where
  convToPixmapK :: MeasuredGraphics -> Cont (c i o) PixmapImage
convToPixmapK = MeasuredGraphics -> Cont (c i o) PixmapImage
forall (c :: * -> * -> *) i o.
FudgetIO c =>
MeasuredGraphics -> Cont (c i o) PixmapImage
measuredGraphics2Pixmap

instance PixmapGen FixedColorDrawing where
  convToPixmapK :: FixedColorDrawing -> Cont (c i o) PixmapImage
convToPixmapK (FixCD Size
size [(GCId, [DrawCommand])]
gcdcmds) PixmapImage -> c i o
cont =
    Size -> Int -> (PixmapId -> c i o) -> c i o
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
Size -> Int -> (PixmapId -> f b ho) -> f b ho
createPixmap Size
size Int
copyFromParent ((PixmapId -> c i o) -> c i o) -> (PixmapId -> c i o) -> c i o
forall a b. (a -> b) -> a -> b
$ \ PixmapId
pm ->
    FRequest -> c i o -> c i o
forall (f :: * -> * -> *) hi ho.
FudgetIO f =>
FRequest -> f hi ho -> f hi ho
putLow (PixmapId -> [(GCId, [DrawCommand])] -> FRequest
pmDrawMany PixmapId
pm [(GCId, [DrawCommand])]
gcdcmds) (c i o -> c i o) -> c i o -> c i o
forall a b. (a -> b) -> a -> b
$
    PixmapImage -> c i o
cont (Size -> PixmapId -> PixmapImage
PixmapImage Size
size PixmapId
pm)