summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-07-18 18:06:00 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-07-18 18:06:00 +0200
commit9d1415a2d35a10be828fac5c9534ba477233aa49 (patch)
tree414f188247778f8b8168ac0ced222f4dbccec264
parentfcb645e610d7e339ea23b9c719092c7fa77fbefb (diff)
downloadphi-9d1415a2d35a10be828fac5c9534ba477233aa49.tar
phi-9d1415a2d35a10be828fac5c9534ba477233aa49.zip
Added AlphaBox widget
-rw-r--r--lib/Phi/Border.hs2
-rw-r--r--lib/Phi/Widgets/AlphaBox.hs49
-rw-r--r--phi.cabal2
-rw-r--r--src/Phi.hs9
4 files changed, 56 insertions, 6 deletions
diff --git a/lib/Phi/Border.hs b/lib/Phi/Border.hs
index a025ab6..5a144df 100644
--- a/lib/Phi/Border.hs
+++ b/lib/Phi/Border.hs
@@ -125,4 +125,4 @@ roundRectangle x y width height radius = do
closePath
border :: BorderConfig -> [Widget] -> Widget
-border config widgets = Widget $ Border config widgets
+border config = Widget . Border config
diff --git a/lib/Phi/Widgets/AlphaBox.hs b/lib/Phi/Widgets/AlphaBox.hs
new file mode 100644
index 0000000..3ed31d0
--- /dev/null
+++ b/lib/Phi/Widgets/AlphaBox.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE TypeFamilies #-}
+
+module Phi.Widgets.AlphaBox ( alphaBox
+ ) where
+
+import Phi.Types
+import Phi.Widget
+
+import Control.Monad
+
+import Graphics.Rendering.Cairo
+
+
+data AlphaBoxState = AlphaBoxState [WidgetState] deriving Show
+
+data AlphaBox = AlphaBox Double [Widget] deriving Show
+
+
+instance WidgetClass AlphaBox where
+ type WidgetData AlphaBox = AlphaBoxState
+ initWidget (AlphaBox _ widgets) phi disp = liftM AlphaBoxState $ mapM (createWidgetState phi disp) widgets
+
+ minSize (AlphaBox _ _) (AlphaBoxState widgetStates) height =
+ sum (map (\(WidgetState {stateWidget = w, statePrivateData = priv}) -> minSize w priv height) widgetStates)
+
+ weight (AlphaBox _ widgets) = sum (map (\(Widget w) -> weight w) widgets)
+
+ layout (AlphaBox _ _) (AlphaBoxState widgetStates) width height = AlphaBoxState $ layoutWidgets widgetStates 0 0 width height
+
+ render (AlphaBox alpha _) (AlphaBoxState widgetStates) w h screen = do
+ renderWithSimilarSurface ContentColorAlpha w h $ \surface -> do
+ renderWith surface $ do
+ renderWidgets widgetStates screen
+
+ setOperator OperatorDestIn
+ setSourceRGBA 0 0 0 alpha
+ paint
+
+ withPatternForSurface surface setSource
+ paint
+
+
+
+ handleMessage _ (AlphaBoxState widgetStates) m = AlphaBoxState $ handleMessageWidgets m widgetStates
+
+
+alphaBox :: Double -> [Widget] -> Widget
+alphaBox alpha = Widget . AlphaBox alpha
+
diff --git a/phi.cabal b/phi.cabal
index 263db7f..07820ce 100644
--- a/phi.cabal
+++ b/phi.cabal
@@ -13,7 +13,7 @@ build-type: Simple
library
build-depends: base >= 4, template-haskell, stm, array, containers, transformers, mtl, utf8-string, time, old-locale, X11, cairo, pango
exposed-modules: Phi.Types, Phi.Phi, Phi.Panel, Phi.Widget, Phi.Border, Phi.X11,
- Phi.Widgets.Clock, Phi.Widgets.Taskbar, Phi.Widgets.Systray
+ Phi.Widgets.AlphaBox, Phi.Widgets.Clock, Phi.Widgets.Taskbar, Phi.Widgets.Systray
other-modules: Phi.X11.Atoms, Phi.X11.AtomList, Phi.Bindings.Util
hs-source-dirs: lib
extra-libraries: X11
diff --git a/src/Phi.hs b/src/Phi.hs
index e8a7c8b..b546e10 100644
--- a/src/Phi.hs
+++ b/src/Phi.hs
@@ -4,6 +4,7 @@ import Phi.Panel
import Phi.Border
import Phi.X11
+import Phi.Widgets.AlphaBox
import Phi.Widgets.Clock
import Phi.Widgets.Taskbar
import Phi.Widgets.Systray
@@ -12,18 +13,18 @@ import Phi.Widgets.Systray
main :: IO ()
main = do
runPhi defaultXConfig defaultPanelConfig { panelPosition = Bottom }
- [theTaskbar, brightBorder [theSystray], brightBorder [theClock]]
+ [alphaBox 0.9 [theTaskbar, brightBorder [theSystray], brightBorder [theClock]]]
where
- normalTaskBorder = BorderConfig (BorderWidth (-1) (-3) (-1) 7) 1 (BorderWidth 0 5 0 5) (0.9, 0.9, 0.9, 0.8) (0.45, 0.45, 0.45, 1) 5 0
+ normalTaskBorder = BorderConfig (BorderWidth (-1) (-3) (-1) 7) 1 (BorderWidth 0 5 0 5) (0.9, 0.9, 0.9, 0.8) (0.45, 0.45, 0.45, 0.8) 5 0
activeTaskBorder = normalTaskBorder { borderColor = (1, 1, 1, 0.8)
, backgroundColor = (0, 0, 0, 1)
}
normalDesktopBorder = normalTaskBorder { margin = BorderWidth 2 3 2 3
, padding = BorderWidth 0 2 0 2
, borderColor = (0.7, 0.7, 0.7, 0.8)
- , backgroundColor = (1, 1, 1, 0.8)
+ , backgroundColor = (1, 1, 1, 0.9)
}
- currentDesktopBorder = normalDesktopBorder { backgroundColor = (0.2, 0.2, 0.2, 0.8)
+ currentDesktopBorder = normalDesktopBorder { backgroundColor = (0.2, 0.2, 0.2, 0.9)
}
taskStyle = TaskStyle { taskFont = "Sans 7"
, taskColor = (1, 1, 1, 1)