{-# LANGUAGE ImplicitParams, OverloadedStrings #-} module Graphics.UI.FLTK.Theme.Light.Progress ( progressNew, drawProgress ) where 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.FLTKHS as LowLevel import Graphics.UI.FLTK.Theme.Light.Assets -- | Custom progress bar drawing function drawProgress :: Ref LowLevel.Progress -> IO () drawProgress p = do rect <- LowLevel.getRectangle p progressMin <- LowLevel.getMinimum p progressMax <- LowLevel.getMaximum p v <- LowLevel.getValue p color <- LowLevel.getColor p let (x,y,w,h) = fromRectangle rect slightlyDarker = colorAverage color blackColor 0.85 progressW = (truncate ((fromIntegral w) * (v/(progressMax-progressMin)))) selectionColor <- LowLevel.getSelectionColor p let fillColor = darker selectionColor hoverColor <- rgbColorWithRgb (0xBB, 0xBB, 0xBB) let spec = BorderBoxSpec { borderBoxHoveringColor = hoverColor, borderBoxColor = slightlyDarker, borderBoxFocusedColor = fillColor, borderBoxFillColor = color, borderBoxBounds = rect } drawBorderBox p spec True LowLevel.flcRectfWithColor (toRectangle (x+1,y+1,progressW,h-2)) selectionColor progressNew :: (?assets :: Assets) => Rectangle -> Maybe T.Text -> IO (Ref LowLevel.Progress) progressNew rect l = do p <- LowLevel.progressCustom rect l (Just drawProgress) Nothing LowLevel.setColor p lightBackground LowLevel.setBox p BorderBox LowLevel.setLabelfont p commonFont LowLevel.setLabelsize p commonFontSize color <- commonFillColor LowLevel.setSelectionColor p color return p