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 =
  forall a (k :: * -> * -> *) i o.
(Graphic a, FudgetIO k) =>
a -> GCtx -> Cont (k i o) MeasuredGraphics
measureGraphicK a
g GCtx
gctx forall a b. (a -> b) -> a -> b
$ \ MeasuredGraphics
mg -> 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 hi ho) -> f hi ho
measuredGraphics2Pixmap MeasuredGraphics
mg PixmapImage -> f hi ho
cont =
  let (CompiledGraphics
cg,LayoutRequest
req) = (Size -> Size)
-> MeasuredGraphics -> (CompiledGraphics, LayoutRequest)
compileMG forall a. a -> a
id MeasuredGraphics
mg
      size :: Size
size = LayoutRequest -> Size
minsize LayoutRequest
req
  in forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
Size -> Depth -> (PixmapId -> f hi ho) -> f hi ho
createPixmap Size
size Depth
copyFromParent forall a b. (a -> b) -> a -> b
$ \ PixmapId
pm ->
     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) (forall a. HasCallStack => a
undefined,forall a b. a -> b -> a
const []) (forall a b. a -> b -> a
const []) CompiledGraphics
cg forall a b. (a -> b) -> a -> b
$
     PixmapImage -> f hi ho
cont (Size -> PixmapId -> PixmapImage
PixmapImage Size
size PixmapId
pm)

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

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