packages feed

randsolid (empty) → 0.1

raw patch · 4 files changed

+105/−0 lines, 4 filesdep +X11dep +basedep +randomsetup-changed

Dependencies added: X11, base, random

Files

+ LICENSE view
+ Randsolid.hs view
@@ -0,0 +1,87 @@+-- Change the root window background to a random solid colour.++import System.Random+import Control.Applicative+import Data.Bits+import Graphics.X11.Xlib.Window+import Graphics.X11.Xlib.Display+import Graphics.X11.Xlib.Types+++-- These are the bounds on the random generation of values.+data Values = V+	{ sat :: (Double, Double) -- ^ Saturation, valid values in [0..1]+	, hue :: (Double, Double) -- ^ Hue, valid values in [0..365]+	, val :: (Double, Double) -- ^ Value, valid values in [0..1]+	}++-- Default bounds.+defaultValues = V+	{ sat = (0.12, 0.30)+	, hue = (0, 365)+	, val = (0.5, 0.7)+	}+++data HSV = HSV Double Double Double deriving Read+instance Show HSV where show = hsv2hex++data RGB = RGB Double Double Double+instance Show RGB where show = rgb2hex++-- Convert a HSV colour to its hexadecimal representation.+hsv2hex :: HSV -> String+hsv2hex = rgb2hex . hsv2rgb++-- Convert a RGB colour value into its hexadecimal representation.+rgb2hex :: RGB -> String+rgb2hex (RGB r g b) = "#" ++ r' ++ g' ++ b'+	where+		r' = table !! (floor (r * 255))+		g' = table !! (floor (g * 255))+		b' = table !! (floor (b * 255))+		table = [ x:y:[] | x <- "0123456789abcdef", y <- "0123456789abcdef" ]+++hsv2rgb :: HSV -> RGB+hsv2rgb (HSV h s v) = case h' of+	0 -> RGB v t p+	1 -> RGB q v p+	2 -> RGB p v t+	3 -> RGB p q v+	4 -> RGB t p v+	_ -> RGB v p q+	where+		p = v * (1 - s)+		q = v * (1 - f * s)+		t = v * (1 - (1 - f) * s)++		f = (h / 60) - (fromIntegral (floor (h / 60)))+		h' = floor (h / 60) `mod` 6+++hsv2pixel :: HSV -> Pixel+hsv2pixel hsv = sum $ map (\(pos, val) -> shiftL (floor (255 * val)) (8 * fromIntegral pos)) bits+	where+		(RGB r g b) = hsv2rgb hsv+		bits = zip [0,1,2] [b,g,r]+++randcolour :: Values -> IO HSV+randcolour v = do+	h <- randomRIO (fst $ hue v, snd $ hue v)+	s <- randomRIO (fst $ sat v, snd $ sat v)+	v <- randomRIO (fst $ val v, snd $ val v)+	return $ HSV h s v+++randsolid :: Values -> IO ()+randsolid v = do+	dpy  <- openDisplay ""+	root <- rootWindow dpy $ defaultScreen dpy+	setWindowBackground dpy root . hsv2pixel =<< randcolour v+	clearWindow dpy root+	closeDisplay dpy+++main = randsolid defaultValues
+ Setup.lhs view
@@ -0,0 +1,3 @@+#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
+ randsolid.cabal view
@@ -0,0 +1,15 @@+Name:                randsolid+Version:             0.1+Synopsis:            Set the background of your root window to a random colour.+Description:         Set the background of your root window to a random colour.+Category:            System+License:             PublicDomain+License-file:        LICENSE+Author:              Johannes Martinsson+Maintainer:          w@antiklimax.se+Cabal-version:       >= 1.2+Build-type:          Simple++Executable           randsolid+    Main-is:         Randsolid.hs+    Build-depends:   base >= 3 && < 4, X11, random