swarm-0.5.0.0: src/Swarm/TUI/View/Attribute/CustomStyling.hs
-- |
-- SPDX-License-Identifier: BSD-3-Clause
module Swarm.TUI.View.Attribute.CustomStyling where
import Brick (AttrName, attrName)
import Data.Colour.SRGB (sRGB24read)
import Data.Set (toList)
import Data.Text qualified as T
import Graphics.Vty.Attributes
import Swarm.Game.Scenario.Style
import Swarm.TUI.View.Attribute.Attr (worldPrefix)
import Swarm.TUI.View.Attribute.Util
toStyle :: StyleFlag -> Style
toStyle = \case
Standout -> standout
Italic -> italic
Strikethrough -> strikethrough
Underline -> underline
ReverseVideo -> reverseVideo
Blink -> blink
Dim -> dim
Bold -> bold
hexToAttrColor :: HexColor -> Color
hexToAttrColor (HexColor colorText) =
kolorToAttrColor c
where
c = sRGB24read $ T.unpack colorText
toAttrPair :: CustomAttr -> (AttrName, Attr)
toAttrPair ca =
(worldPrefix <> attrName (name ca), addStyle $ addFg $ addBg defAttr)
where
addFg = maybe id (flip withForeColor . hexToAttrColor) $ fg ca
addBg = maybe id (flip withBackColor . hexToAttrColor) $ bg ca
addStyle = maybe id (flip withStyle . sum . map toStyle . toList) $ style ca