module SmileyF where
import Fudgets

data SmileyMode = Sad | Indifferent | Happy deriving (SmileyMode -> SmileyMode -> Bool
(SmileyMode -> SmileyMode -> Bool)
-> (SmileyMode -> SmileyMode -> Bool) -> Eq SmileyMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SmileyMode -> SmileyMode -> Bool
$c/= :: SmileyMode -> SmileyMode -> Bool
== :: SmileyMode -> SmileyMode -> Bool
$c== :: SmileyMode -> SmileyMode -> Bool
Eq,Eq SmileyMode
Eq SmileyMode
-> (SmileyMode -> SmileyMode -> Ordering)
-> (SmileyMode -> SmileyMode -> Bool)
-> (SmileyMode -> SmileyMode -> Bool)
-> (SmileyMode -> SmileyMode -> Bool)
-> (SmileyMode -> SmileyMode -> Bool)
-> (SmileyMode -> SmileyMode -> SmileyMode)
-> (SmileyMode -> SmileyMode -> SmileyMode)
-> Ord SmileyMode
SmileyMode -> SmileyMode -> Bool
SmileyMode -> SmileyMode -> Ordering
SmileyMode -> SmileyMode -> SmileyMode
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SmileyMode -> SmileyMode -> SmileyMode
$cmin :: SmileyMode -> SmileyMode -> SmileyMode
max :: SmileyMode -> SmileyMode -> SmileyMode
$cmax :: SmileyMode -> SmileyMode -> SmileyMode
>= :: SmileyMode -> SmileyMode -> Bool
$c>= :: SmileyMode -> SmileyMode -> Bool
> :: SmileyMode -> SmileyMode -> Bool
$c> :: SmileyMode -> SmileyMode -> Bool
<= :: SmileyMode -> SmileyMode -> Bool
$c<= :: SmileyMode -> SmileyMode -> Bool
< :: SmileyMode -> SmileyMode -> Bool
$c< :: SmileyMode -> SmileyMode -> Bool
compare :: SmileyMode -> SmileyMode -> Ordering
$ccompare :: SmileyMode -> SmileyMode -> Ordering
$cp1Ord :: Eq SmileyMode
Ord,Int -> SmileyMode
SmileyMode -> Int
SmileyMode -> [SmileyMode]
SmileyMode -> SmileyMode
SmileyMode -> SmileyMode -> [SmileyMode]
SmileyMode -> SmileyMode -> SmileyMode -> [SmileyMode]
(SmileyMode -> SmileyMode)
-> (SmileyMode -> SmileyMode)
-> (Int -> SmileyMode)
-> (SmileyMode -> Int)
-> (SmileyMode -> [SmileyMode])
-> (SmileyMode -> SmileyMode -> [SmileyMode])
-> (SmileyMode -> SmileyMode -> [SmileyMode])
-> (SmileyMode -> SmileyMode -> SmileyMode -> [SmileyMode])
-> Enum SmileyMode
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: SmileyMode -> SmileyMode -> SmileyMode -> [SmileyMode]
$cenumFromThenTo :: SmileyMode -> SmileyMode -> SmileyMode -> [SmileyMode]
enumFromTo :: SmileyMode -> SmileyMode -> [SmileyMode]
$cenumFromTo :: SmileyMode -> SmileyMode -> [SmileyMode]
enumFromThen :: SmileyMode -> SmileyMode -> [SmileyMode]
$cenumFromThen :: SmileyMode -> SmileyMode -> [SmileyMode]
enumFrom :: SmileyMode -> [SmileyMode]
$cenumFrom :: SmileyMode -> [SmileyMode]
fromEnum :: SmileyMode -> Int
$cfromEnum :: SmileyMode -> Int
toEnum :: Int -> SmileyMode
$ctoEnum :: Int -> SmileyMode
pred :: SmileyMode -> SmileyMode
$cpred :: SmileyMode -> SmileyMode
succ :: SmileyMode -> SmileyMode
$csucc :: SmileyMode -> SmileyMode
Enum,Int -> SmileyMode -> ShowS
[SmileyMode] -> ShowS
SmileyMode -> String
(Int -> SmileyMode -> ShowS)
-> (SmileyMode -> String)
-> ([SmileyMode] -> ShowS)
-> Show SmileyMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SmileyMode] -> ShowS
$cshowList :: [SmileyMode] -> ShowS
show :: SmileyMode -> String
$cshow :: SmileyMode -> String
showsPrec :: Int -> SmileyMode -> ShowS
$cshowsPrec :: Int -> SmileyMode -> ShowS
Show)

smileyF :: F SmileyMode void
smileyF = Customiser (DisplayF SmileyMode) -> F SmileyMode void
forall void. Customiser (DisplayF SmileyMode) -> F SmileyMode void
smileyF' Customiser (DisplayF SmileyMode)
forall a. Customiser a
standard

smileyF' :: Customiser (DisplayF SmileyMode) -> F SmileyMode void
smileyF' :: Customiser (DisplayF SmileyMode) -> F SmileyMode void
smileyF' Customiser (DisplayF SmileyMode)
pm = Customiser (DisplayF SmileyMode) -> F SmileyMode void
forall a b. Graphic a => Customiser (DisplayF a) -> F a b
displayF' Customiser (DisplayF SmileyMode)
pm'
  where pm' :: Customiser (DisplayF SmileyMode)
pm' = Customiser (DisplayF SmileyMode)
pm Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
	      SmileyMode -> Customiser (DisplayF SmileyMode)
forall (xxx :: * -> *) a.
HasInitDisp xxx =>
a -> Customiser (xxx a)
setInitDisp SmileyMode
Indifferent Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
	      SmileyMode -> Customiser (DisplayF SmileyMode)
forall (xxx :: * -> *) a.
HasInitSize xxx =>
a -> Customiser (xxx a)
setInitSize SmileyMode
Indifferent Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
	      (Bool, Bool) -> Customiser (DisplayF SmileyMode)
forall xxx. HasStretchable xxx => (Bool, Bool) -> Customiser xxx
setStretchable (Bool
False,Bool
False) Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
-> Customiser (DisplayF SmileyMode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
	      (Int -> Customiser (DisplayF SmileyMode)
forall xxx. HasMargin xxx => Int -> Customiser xxx
setMargin Int
1 :: (Customiser (DisplayF SmileyMode)))

smileyD :: SmileyMode -> FixedDrawing
smileyD SmileyMode
mode =
  Size -> [DrawCommand] -> FixedDrawing
FixD (Int -> Int -> Size
Point Int
15 Int
15) [
    Size -> Int -> DrawCommand
drawCircle (Int -> Int -> Size
Point Int
2 Int
2) Int
2,	-- eye
    Size -> Int -> DrawCommand
drawCircle (Int -> Int -> Size
Point Int
10 Int
2) Int
2,	-- eye
    Line -> DrawCommand
DrawLine (Int -> Int -> Int -> Int -> Line
lL Int
7 Int
5 Int
7 Int
9),	-- nose
    case SmileyMode
mode of
      SmileyMode
Sad -> Rect -> Int -> Int -> DrawCommand
DrawArc (Int -> Int -> Int -> Int -> Rect
rR Int
3 Int
11 Int
8 Int
4) Int
0 (Int
64Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
180)		-- mouth
      SmileyMode
Indifferent -> Line -> DrawCommand
DrawLine (Int -> Int -> Int -> Int -> Line
lL Int
3 Int
12 Int
11 Int
12)		-- mouth
      SmileyMode
Happy -> Rect -> Int -> Int -> DrawCommand
DrawArc (Int -> Int -> Int -> Int -> Rect
rR Int
3 Int
9 Int
8 Int
4) (Int
64Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
180) (Int
64Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
180)	-- mouth
  ]

instance Graphic SmileyMode where
  measureGraphicK :: SmileyMode -> GCtx -> Cont (k i o) MeasuredGraphics
measureGraphicK = FixedDrawing -> GCtx -> Cont (k i o) MeasuredGraphics
forall a (k :: * -> * -> *) i o.
(Graphic a, FudgetIO k) =>
a -> GCtx -> Cont (k i o) MeasuredGraphics
measureGraphicK (FixedDrawing -> GCtx -> Cont (k i o) MeasuredGraphics)
-> (SmileyMode -> FixedDrawing)
-> SmileyMode
-> GCtx
-> Cont (k i o) MeasuredGraphics
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SmileyMode -> FixedDrawing
smileyD