-- | The @module Screen@ exports general functionality on the -- screen\'s properties. module HTk.Devices.Screen ( Screen(..), getScreenHeight, getScreenWidth, getScreenManager, VisualClass(..), getScreenVisual ) where import HTk.Kernel.Core import HTk.Kernel.Geometry(Distance) import Data.Char(isSpace) import HTk.Containers.Window -- ----------------------------------------------------------------------- -- Screen -- ----------------------------------------------------------------------- -- | The @Screen@ datatype. newtype Screen w = Screen w -- ----------------------------------------------------------------------- -- Screen dimensions -- ----------------------------------------------------------------------- -- | Gets the height of the screen. getScreenHeight :: Window a => Screen a -- ^ the concerned screen. -> IO Distance -- ^ The screen\'s height. getScreenHeight scr@(Screen win) = evalMethod win (\nm -> ["winfo screenheight " ++ show nm]) -- | Gets the width of the screen. getScreenWidth :: Window a => Screen a -- ^ the concerned screen. -> IO Distance -- ^ The screen\'s width. getScreenWidth scr@(Screen win)= evalMethod win (\nm -> ["winfo screenwidth " ++ show nm]) -- | Gets the visual properties of the screen. getScreenVisual :: Window a => Screen a -- ^ the concerned screen. -> IO VisualClass -- ^ The visual properties. getScreenVisual scr@(Screen win) = evalMethod win (\nm -> ["winfo screenvisual " ++ show nm]) -- | Gets the screen manager from a screen. getScreenManager :: Window a => Screen a -- ^ the concerned screen. -> IO String -- ^ A textual representation of the screen manager. getScreenManager (Screen win) = evalMethod win (\nm -> ["winfo manager " ++ show nm]) -- ----------------------------------------------------------------------- -- Screen Colours -- ----------------------------------------------------------------------- -- | The @VisualClass@ datatype (see -- @Screen.getScreenVisual@). data VisualClass = DirectColour | GrayScale | PseudoColour | StaticColour | StaticGray | TrueColour deriving (Eq,Ord,Enum) -- | Internal. instance GUIValue VisualClass where cdefault = DirectColour -- | Internal. instance Read VisualClass where readsPrec p b = case dropWhile (isSpace) b of 'd':'i':'r':'e':'c':'t':'c':'o':'l':'o':'r':xs -> [(DirectColour,xs)] 'g':'r':'a':'y':'s':'c':'a':'l':'e':xs -> [(GrayScale,xs)] 'p':'s':'e':'u':'d':'o':'c':'o':'l':'o':'r':xs -> [(PseudoColour,xs)] 's':'t':'a':'t':'i':'c':'c':'o':'l':'o':'r':xs -> [(StaticColour,xs)] 's':'t':'a':'t':'i':'c':'g':'r':'a':'y':xs -> [(StaticGray,xs)] 't':'r':'u':'e':'c':'o':'l':'o':'r':xs -> [(TrueColour,xs)] _ -> [] -- | Internal. instance Show VisualClass where showsPrec d p r = (case p of DirectColour -> "directcolor" GrayScale -> "grayscale" PseudoColour -> "pseudocolor" StaticColour -> "staticcolor" StaticGray -> "staticgray" TrueColour -> "truecolor" ) ++ r