module Expose where

import Message
import Cont
--import Command
--import LayoutRequest
import Fudget
--import Xtypes
import Geometry(Rect,rmax)
import FRequest
import Event
--import Font

collectExposeK :: Bool -> Rect -> Int -> ([Rect] -> K a b) -> K a b
collectExposeK :: Bool -> Rect -> Int -> ([Rect] -> K a b) -> K a b
collectExposeK Bool
grX Rect
r Int
aft [Rect] -> K a b
c = [Rect] -> Int -> K a b
collect [Rect
r] Int
aft
   where collect :: [Rect] -> Int -> K a b
collect [Rect]
rs Int
aft = 
	   if Int
aft Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then [Rect] -> K a b
c [Rect]
rs
	   else (KEvent a -> Maybe (Rect, Int)) -> Cont (K a b) (Rect, Int)
forall hi a ho. (KEvent hi -> Maybe a) -> Cont (K hi ho) a
waitForK (\KEvent a
r ->
			case KEvent a
r of
			 Low (XEvt (Expose Rect
r Int
aft')) | Bool -> Bool
not Bool
grX -> (Rect, Int) -> Maybe (Rect, Int)
forall a. a -> Maybe a
Just (Rect
r,Int
aft')
			 Low (XEvt (GraphicsExpose Rect
r Int
aft' Int
_ Int
_)) | Bool
grX -> (Rect, Int) -> Maybe (Rect, Int)
forall a. a -> Maybe a
Just (Rect
r,Int
aft')
			 KEvent a
_ -> Maybe (Rect, Int)
forall a. Maybe a
Nothing) Cont (K a b) (Rect, Int) -> Cont (K a b) (Rect, Int)
forall a b. (a -> b) -> a -> b
$ \(Rect
r,Int
aft')->
			[Rect] -> Int -> K a b
collect (Rect
rRect -> [Rect] -> [Rect]
forall a. a -> [a] -> [a]
:[Rect]
rs) Int
aft'


maxExposeK :: Bool -> Rect -> Int -> (Rect -> K a b) -> K a b
maxExposeK Bool
grX Rect
r Int
aft Rect -> K a b
c = Bool -> Rect -> Int -> ([Rect] -> K a b) -> K a b
forall a b. Bool -> Rect -> Int -> ([Rect] -> K a b) -> K a b
collectExposeK Bool
grX Rect
r Int
aft (([Rect] -> K a b) -> K a b) -> ([Rect] -> K a b) -> K a b
forall a b. (a -> b) -> a -> b
$ \[Rect]
rs ->
		     Rect -> K a b
c ((Rect -> Rect -> Rect) -> [Rect] -> Rect
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Rect -> Rect -> Rect
rmax [Rect]
rs)