81 lines
2.1 KiB
Haskell
81 lines
2.1 KiB
Haskell
{- 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
|