{- The menu picture. -} module Dodge.Render.MenuScreen ( drawMenuScreen, ) where import Dodge.ListDisplayParams import Dodge.ScreenPos import Dodge.Data.CardinalPoint import Control.Lens import Dodge.Render.List import Dodge.Base.Window import Dodge.Data.SelectionList import Dodge.Data.Universe import Picture drawMenuScreen :: Configuration -> Maybe Int -> ScreenLayer -> Picture drawMenuScreen cfig spos screen = case screen of OptionScreen{_scTitle = titf, _scSelectionList = slist} -> drawOptions optionListDisplayParams cfig titf spos slist InputScreen inputstr help -> drawInputMenu cfig ('>' : inputstr) help drawInputMenu :: Configuration -> -- | Title String -> -- | Help Text String -> Picture drawInputMenu cfig title footer = fold [ darkenBackground cfig , drawTitle cfig title , drawFooterText cfig red footer ] drawOptions :: ListDisplayParams -> Configuration -> -- | Title String -> Maybe Int -> [SelectionItem a] -> Picture drawOptions ldps cfig title msel sl = darkenBackground cfig <> drawTitle cfig title <> drawSelectionList ldps cfig sl <> translateScreenPos cfig (ldps ^. ldpPos) (drawCursorAt msel sl ldps 50 (BoundaryCursor [North, South]) ) darkenBackground :: Configuration -> Picture darkenBackground = color (withAlpha 0.5 black) . polygon . reverse . screenBox drawTitle :: Configuration -> String -> Picture drawTitle cfig = translate (- hw) (hh -80) . scale 0.4 0.4 . text where hh = halfHeight cfig hw = halfWidth cfig placeString :: -- | x distance from center Float -> -- | y distance from center Float -> -- | scale Float -> String -> Picture placeString x y sc = color white . translate x y . scale sc sc . text drawFooterText :: Configuration -> Color -> String -> Picture drawFooterText cfig col = color col . placeString (- hw + 30) (- hh + 10) 0.1 where hh = halfHeight cfig hw = halfWidth cfig