{-# LANGUAGE ImplicitParams, ScopedTypeVariables, OverloadedStrings, AllowAmbiguousTypes, GADTs, CPP, ExistentialQuantification, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, ScopedTypeVariables, UndecidableInstances #-}
module Graphics.UI.FLTK.Theme.Light.Input
(
fileInputNew,
inputBox,
inputNew,
outputNew,
inputSetup,
inputDraw
)
where
import Control.Monad
import Graphics.UI.FLTK.LowLevel.Dispatch
import Graphics.UI.FLTK.LowLevel.Fl_Enumerations
import Graphics.UI.FLTK.LowLevel.Fl_Types
import Graphics.UI.FLTK.Theme.Light.Common
import qualified Data.Text as T
import qualified Graphics.UI.FLTK.LowLevel.FL as FL
import qualified Graphics.UI.FLTK.LowLevel.FLTKHS as LowLevel
import Graphics.UI.FLTK.Theme.Light.Assets
inputBox :: Bool -> Rectangle -> Color -> IO ()
inputBox focused r c =
if focused
then do
color <- commonFillColor
LowLevel.flcRectWithColor r color
else
let slightlyDarker = colorAverage c blackColor 0.75
(x',y',w',_) = fromRectangle r
in do
LowLevel.flcRectWithColor r slightlyDarker
LowLevel.flcSetColor blackColor
LowLevel.flcBeginLine
LowLevel.flcVertex (toPrecisePosition (toPosition (x',y')))
LowLevel.flcVertex (toPrecisePosition (toPosition (x'+w'-1,y')))
LowLevel.flcEndLine
inputDraw :: Ref LowLevel.Input -> IO ()
inputDraw i =
withCustomBoxDraw
BorderBox
(\rect color -> do
LowLevel.flcRectfWithColor rect color
focused <- isWidget i FL.focus
inputBox focused rect color)
(do
t <- LowLevel.getInputType i
r <- LowLevel.getRectangle i
rBox <- FL.adjustBoundsByBoxtype r BorderBox
case t of
LowLevel.FlHiddenInput -> return ()
_ -> do
ds <- LowLevel.getDamage i
if (DamageAll `elem` ds)
then do
color <- LowLevel.getColor i
LowLevel.drawBoxWithBoxtype i BorderBox color Nothing
else
when (DamageExpose `elem` ds)
(do
focused <- isWidget i FL.focus
color <- LowLevel.getColor i
inputBox focused rBox color)
LowLevel.drawText i rBox)
inputSetup :: (?assets :: Assets) => Ref LowLevel.Input -> IO ()
inputSetup i = do
LowLevel.setColor i lightBackground
LowLevel.setBox i BorderBox
LowLevel.setTextfont i commonFont
LowLevel.setTextsize i commonFontSize
color <- commonSelectionColor
LowLevel.setSelectionColor i color
LowLevel.setLabelfont i commonFont
LowLevel.setLabelsize i commonFontSize
inputNew :: (?assets :: Assets) => Rectangle -> Maybe T.Text -> Maybe LowLevel.FlInputType -> IO (Ref LowLevel.Input)
inputNew rect l it = do
i <- LowLevel.inputCustom rect l it (Just inputDraw) Nothing
inputSetup i
return i
fileInputNew :: (?assets :: Assets) => Rectangle -> Maybe T.Text -> IO (Ref LowLevel.FileInput)
fileInputNew rect l = do
i <- LowLevel.fileInputNew rect l
inputSetup (safeCast i)
return i
outputNew :: (?assets :: Assets) => Rectangle -> Maybe T.Text -> Maybe LowLevel.FlOutputType -> IO (Ref LowLevel.Output)
outputNew rect l t = do
o <- LowLevel.outputCustom rect l
(Just (inputDraw . safeCast))
Nothing
inputSetup (safeCast o)
maybe (return ()) (\t -> LowLevel.setType o t) t
return o