movie-monad-0.0.5.0: src/CssStyle.hs
{-
Movie Monad
(C) 2017 David Lettier
lettier.com
-}
{-# LANGUAGE OverloadedStrings #-}
module CssStyle where
import Prelude
import Control.Monad
import Data.Word
import Data.Text
import qualified Data.ByteString
import qualified GI.Gdk
import qualified GI.Gtk
import qualified Records as R
import Paths_movie_monad
cssPriority :: Word32
cssPriority =
fromIntegral GI.Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION :: Word32
applyCss :: R.GuiObjects -> IO ()
applyCss
guiObjects
= do
maybeScreen <- GI.Gdk.screenGetDefault
provider <- GI.Gtk.cssProviderNew
styleFile <- getDataFileName "data/style.css"
styleFile318 <- getDataFileName "data/style-3-18.css"
styleFile320 <- getDataFileName "data/style-3-20.css"
isGtkVersionGte310 <- isGtkVersionGte 3 10
isGtkVersionGte318 <- isGtkVersionGte 3 18
isGtkVersionGte320 <- isGtkVersionGte 3 20
case ( maybeScreen
, isGtkVersionGte310
, isGtkVersionGte318
, isGtkVersionGte320
)
of
(Just screen, True, False, False) -> do
GI.Gtk.cssProviderLoadFromPath provider (Data.Text.pack styleFile)
GI.Gtk.styleContextAddProviderForScreen
screen
provider
cssPriority
setScaleSizeForLegacyGtk guiObjects
(Just screen, True, True, False) -> do
styleFileContents <- Data.ByteString.readFile styleFile
styleFileContents318 <- Data.ByteString.readFile styleFile318
let totalStyleFileContents =
Data.ByteString.concat
[styleFileContents, styleFileContents318]
GI.Gtk.cssProviderLoadFromData provider totalStyleFileContents
GI.Gtk.styleContextAddProviderForScreen
screen
provider
cssPriority
setScaleSizeForLegacyGtk guiObjects
(Just screen, True, True, True) -> do
styleFileContents <- Data.ByteString.readFile styleFile
styleFileContents318 <- Data.ByteString.readFile styleFile318
styleFileContents320 <- Data.ByteString.readFile styleFile320
let totalStyleFileContents =
Data.ByteString.concat
[styleFileContents, styleFileContents318, styleFileContents320]
GI.Gtk.cssProviderLoadFromData provider totalStyleFileContents
GI.Gtk.styleContextAddProviderForScreen
screen
provider
cssPriority
_ -> return ()
setScaleSizeForLegacyGtk :: R.GuiObjects -> IO ()
setScaleSizeForLegacyGtk
R.GuiObjects
{ R.window = window
, R.seekScale = seekScale
}
= do
GI.Gtk.containerForall
window
(\ windowChild -> do
windowChildName <- GI.Gtk.widgetGetName windowChild
when (windowChildName == "GtkPopover") $ do
maybePopover <- GI.Gtk.castTo GI.Gtk.Popover windowChild
case maybePopover of
Just popover ->
GI.Gtk.containerForall
popover
(\ popoverChild -> do
popoverChildName <- GI.Gtk.widgetGetName popoverChild
when (popoverChildName == "GtkBox") $ do
maybeBox <- GI.Gtk.castTo GI.Gtk.Box popoverChild
case maybeBox of
Just box ->
GI.Gtk.containerForall
box
(\ boxChild -> do
boxChildName <- GI.Gtk.widgetGetName boxChild
when (boxChildName == "GtkScale") $ do
maybeScale <- GI.Gtk.castTo GI.Gtk.Scale boxChild
case maybeScale of
Just scale -> GI.Gtk.rangeSetMinSliderSize scale 15
_ -> return ()
)
_ -> return ()
)
_ -> return ()
)
GI.Gtk.rangeSetMinSliderSize seekScale 15
isGtkVersionGte :: Word32 -> Word32 -> IO Bool
isGtkVersionGte major minor = do
major' <- GI.Gtk.getMajorVersion
minor' <- GI.Gtk.getMinorVersion
return (major' >= major && minor' >= minor)