{-# LANGUAGE OverloadedStrings #-}
module NanoUI.Widgets.Chrome
( modalTitleBarH
, titleBarChromeHFor
, titleBarLayoutFor
, titleLabelLayoutFor
, floatMinFor
, closeButton
, windowChromeTop
, windowChromeSepH
) where
import Data.Bits ((.|.))
import Effectful (Eff, type (:>))
import NanoUI.WidgetText (buttonCloseTrailing, buttonFlagClose)
import NanoUI.Monad (Ui)
import NanoUI.Style
( Layout (..)
, alignMid
, defaultLayout
, fillW
, fixedH
, fixedWH
, gap
, tight
)
import NanoUI.Types (clamp)
import NanoUI.Widgets.Combinators (buttonStyled)
import NanoUI.Widgets.Node (Response)
titleBarH :: Float
titleBarH :: Float
titleBarH = Float
28
closeButtonSize :: Float
closeButtonSize :: Float
closeButtonSize = Float
24
windowChromeTop :: Float
windowChromeTop :: Float
windowChromeTop = Float
10
modalTitleBarH :: Float
modalTitleBarH :: Float
modalTitleBarH = Float
40
windowChromeSepH :: Float
windowChromeSepH :: Float
windowChromeSepH = Float
1
titleBarChromeHFor :: Float
titleBarChromeHFor :: Float
titleBarChromeHFor = Float
titleBarH Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
windowChromeTop Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
windowChromeSepH
titleBarLayoutFor :: Float -> Layout
titleBarLayoutFor :: Float -> Layout
titleBarLayoutFor Float
barH =
Layout -> Layout
tight (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Layout -> Layout
gap Float
6 (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Layout -> Layout
alignMid (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Layout -> Layout
fixedH Float
barH (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Layout -> Layout
fillW (Layout -> Layout) -> Layout -> Layout
forall a b. (a -> b) -> a -> b
$ Layout
defaultLayout
titleLabelLayoutFor :: Float -> Layout
titleLabelLayoutFor :: Float -> Layout
titleLabelLayoutFor Float
barH =
(Float -> Layout -> Layout
fixedH Float
barH (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Layout -> Layout
alignMid (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Layout -> Layout
tight) (Layout -> Layout) -> Layout -> Layout
forall a b. (a -> b) -> a -> b
$
Layout
defaultLayout {layoutMinH = barH, layoutMaxH = barH}
floatMinFor :: Float -> Float -> Float
floatMinFor :: Float -> Float -> Float
floatMinFor Float
authored Float
avail = Float -> Float -> Float -> Float
forall a. Ord a => a -> a -> a -> a
clamp Float
1 Float
avail Float
authored
{-# INLINE closeButton #-}
closeButton :: (Ui :> es) => Eff es Response
closeButton :: forall (es :: [Effect]). (Ui :> es) => Eff es Response
closeButton = Text -> Float -> Layout -> Int -> Eff es Response
forall (es :: [Effect]).
(Ui :> es) =>
Text -> Float -> Layout -> Int -> Eff es Response
buttonStyled Text
"" Float
0 Layout
layout (Int
buttonFlagClose Int -> Int -> Int
forall a. Bits a => a -> a -> a
.|. Int
buttonCloseTrailing)
where
layout :: Layout
layout = Layout -> Layout
tight (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Float -> Layout -> Layout
fixedWH Float
closeButtonSize Float
closeButtonSize (Layout -> Layout) -> (Layout -> Layout) -> Layout -> Layout
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Layout -> Layout
alignMid (Layout -> Layout) -> Layout -> Layout
forall a b. (a -> b) -> a -> b
$ Layout
defaultLayout