module CondLayout(ifSizeP,ifSizeS,stretchCaseS,alignFixedS,alignFixedS') where
import LayoutRequest
--import Geometry(Size)
import Spacers(idS,hAlignS,vAlignS,hvAlignS,compS,noStretchS)

--ifSizeP :: (Size->Size->Bool) -> Placer -> Placer -> Placer
--ifSizeS :: (Size->Size->Bool) -> Spacer -> Spacer -> Spacer
ifSizeP :: (Size -> Size -> Bool) -> Placer -> Placer -> Placer
ifSizeP Size -> Size -> Bool
b (P Placer1
p1) (P Placer1
p2) = Placer1 -> Placer
P (Placer1 -> Placer) -> Placer1 -> Placer
forall a b. (a -> b) -> a -> b
$ (Size -> Size -> Bool) -> Placer1 -> Placer1 -> Placer1
forall p b.
(Size -> Size -> Bool)
-> (p -> (LayoutRequest, b))
-> (p -> (LayoutRequest, b))
-> p
-> (LayoutRequest, b)
ifSize Size -> Size -> Bool
b Placer1
p1 Placer1
p2
ifSizeS :: (Size -> Size -> Bool) -> Spacer -> Spacer -> Spacer
ifSizeS Size -> Size -> Bool
b (S Spacer1
s1) (S Spacer1
s2) = Spacer1 -> Spacer
S (Spacer1 -> Spacer) -> Spacer1 -> Spacer
forall a b. (a -> b) -> a -> b
$ (Size -> Size -> Bool) -> Spacer1 -> Spacer1 -> Spacer1
forall p b.
(Size -> Size -> Bool)
-> (p -> (LayoutRequest, b))
-> (p -> (LayoutRequest, b))
-> p
-> (LayoutRequest, b)
ifSize Size -> Size -> Bool
b Spacer1
s1 Spacer1
s2

ifSize :: (Size -> Size -> Bool)
-> (p -> (LayoutRequest, b))
-> (p -> (LayoutRequest, b))
-> p
-> (LayoutRequest, b)
ifSize Size -> Size -> Bool
p p -> (LayoutRequest, b)
primP p -> (LayoutRequest, b)
spareP p
reqs =
    if Size -> Size -> Bool
p Size
primSize Size
spareSize
    then (LayoutRequest, b)
primP2
    else (LayoutRequest, b)
spareP2
  where
    primP2 :: (LayoutRequest, b)
primP2@(Layout {minsize :: LayoutRequest -> Size
minsize=Size
primSize},b
_) = p -> (LayoutRequest, b)
primP p
reqs
    spareP2 :: (LayoutRequest, b)
spareP2@(Layout {minsize :: LayoutRequest -> Size
minsize=Size
spareSize},b
_) = p -> (LayoutRequest, b)
spareP p
reqs

stretchCaseS :: ((Bool,Bool)->Spacer) -> Spacer
stretchCaseS :: ((Bool, Bool) -> Spacer) -> Spacer
stretchCaseS (Bool, Bool) -> Spacer
sS = Spacer1 -> Spacer
S (Spacer1 -> Spacer) -> Spacer1 -> Spacer
forall a b. (a -> b) -> a -> b
$ \ LayoutRequest
req -> Spacer -> Spacer1
unS ((Bool, Bool) -> Spacer
sS (LayoutRequest -> Bool
fixedh LayoutRequest
req,LayoutRequest -> Bool
fixedv LayoutRequest
req)) LayoutRequest
req

alignFixedS :: Alignment -> Alignment -> Spacer
alignFixedS Alignment
ha Alignment
va =
  ((Bool, Bool) -> Spacer) -> Spacer
stretchCaseS (((Bool, Bool) -> Spacer) -> Spacer)
-> ((Bool, Bool) -> Spacer) -> Spacer
forall a b. (a -> b) -> a -> b
$ \ (Bool, Bool)
fixedhv ->
  case (Bool, Bool)
fixedhv of
    (Bool
False,Bool
False) -> Spacer
idS
    (Bool
True, Bool
False) -> Alignment -> Spacer
hAlignS Alignment
ha
    (Bool
False,Bool
True)  -> Alignment -> Spacer
vAlignS Alignment
va
    (Bool
True, Bool
True)  -> Alignment -> Alignment -> Spacer
hvAlignS Alignment
ha Alignment
va

alignFixedS' :: Alignment -> Alignment -> Spacer
alignFixedS' Alignment
ha Alignment
va =
  ((Bool, Bool) -> Spacer) -> Spacer
stretchCaseS (((Bool, Bool) -> Spacer) -> Spacer)
-> ((Bool, Bool) -> Spacer) -> Spacer
forall a b. (a -> b) -> a -> b
$ \ (Bool, Bool)
fhv ->
   (Bool -> Bool -> Spacer) -> (Bool, Bool) -> Spacer
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Bool -> Bool -> Spacer
noStretchS (Bool, Bool)
fhv Spacer -> Spacer -> Spacer
`compS` Alignment -> Alignment -> Spacer
alignFixedS Alignment
ha Alignment
va