summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-08-29 15:34:56 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-08-29 15:34:56 +0200
commiteca887df7c5e71606e6e0f80d48067e1ebdf5159 (patch)
tree430237ce8d77ab4722a45ed24a5682438cc2f7e7
parent7a87ba6f2e3e864fb1c487c097e2cf17bfca2df6 (diff)
downloadphi-eca887df7c5e71606e6e0f80d48067e1ebdf5159.tar
phi-eca887df7c5e71606e6e0f80d48067e1ebdf5159.zip
Don't use the widget definition as a part of the render cache state
-rw-r--r--lib/Phi/Widget.hs22
-rw-r--r--lib/Phi/Widgets/Clock.hs6
-rw-r--r--lib/Phi/Widgets/Systray.hs6
3 files changed, 17 insertions, 17 deletions
diff --git a/lib/Phi/Widget.hs b/lib/Phi/Widget.hs
index 791eff1..e3f8388 100644
--- a/lib/Phi/Widget.hs
+++ b/lib/Phi/Widget.hs
@@ -86,7 +86,7 @@ class Eq s => Widget w s c | w -> s, w -> c where
handleMessage _ priv _ = priv
type IOCache = CacheArrow (Kleisli IO)
-type RenderCache w s = IOCache (w, s, Int, Int, Int, Int, Xlib.Rectangle) Surface
+type RenderCache s = IOCache (s, Int, Int, Int, Int, Xlib.Rectangle) Surface
createIOCache :: Eq a => (a -> IO b) -> IOCache a b
createIOCache = lift . Kleisli
@@ -98,21 +98,21 @@ runIOCache a = do
put cache'
return b
-createRenderCache :: (w -> s -> Int -> Int -> Int -> Int -> Xlib.Rectangle -> Render ())
- -> CacheArrow (Kleisli IO) (w, s, Int, Int, Int, Int, Xlib.Rectangle) Surface
-createRenderCache f = lift . Kleisli $ \(widget, state, x, y, w, h, screen) -> do
+createRenderCache :: (s -> Int -> Int -> Int -> Int -> Xlib.Rectangle -> Render ())
+ -> CacheArrow (Kleisli IO) (s, Int, Int, Int, Int, Xlib.Rectangle) Surface
+createRenderCache f = lift . Kleisli $ \(state, x, y, w, h, screen) -> do
surface <- createImageSurface FormatARGB32 w h
renderWith surface $ do
setOperator OperatorClear
paint
setOperator OperatorOver
- f widget state x y w h screen
+ f state x y w h screen
return surface
-renderCached :: (Eq w, Eq s) => w -> s -> Int -> Int -> Int -> Int -> Xlib.Rectangle -> StateT (RenderCache w s) IO [(Bool, SurfaceSlice)]
-renderCached widget state x y w h screen = do
+renderCached :: Eq s => s -> Int -> Int -> Int -> Int -> Xlib.Rectangle -> StateT (RenderCache s) IO [(Bool, SurfaceSlice)]
+renderCached state x y w h screen = do
cache <- get
- (surf, updated, cache') <- liftIO $ runKleisli (runCache' cache) (widget, state, x, y, w, h, screen)
+ (surf, updated, cache') <- liftIO $ runKleisli (runCache' cache) (state, x, y, w, h, screen)
put cache'
return [(updated, SurfaceSlice 0 surf)]
@@ -157,15 +157,15 @@ a <~> b = CompoundWidget a b
data Separator = Separator !Int !Float deriving (Show, Eq)
-instance Widget Separator () (RenderCache Separator ()) where
+instance Widget Separator () (RenderCache ()) where
initWidget _ _ _ _ = return ()
- initCache _ = createRenderCache $ \_ _ _ _ _ _ _ -> do
+ initCache _ = createRenderCache $ \_ _ _ _ _ _ -> do
setOperator OperatorClear
paint
minSize (Separator s _) _ _ _ = s
weight (Separator _ w) = w
- render = renderCached
+ render _ = renderCached
separator :: Int -> Float -> Separator
diff --git a/lib/Phi/Widgets/Clock.hs b/lib/Phi/Widgets/Clock.hs
index e232ef5..9282432 100644
--- a/lib/Phi/Widgets/Clock.hs
+++ b/lib/Phi/Widgets/Clock.hs
@@ -42,7 +42,7 @@ data ClockState = ClockState !ZonedTime deriving (Show, Eq)
data ClockMessage = UpdateTime !ZonedTime deriving (Show, Typeable)
-instance Widget Clock ClockState (RenderCache Clock ClockState) where
+instance Widget Clock ClockState (RenderCache ClockState) where
initWidget (Clock _) phi _ _ = do
forkIO $ forever $ do
time <- getZonedTime
@@ -54,7 +54,7 @@ instance Widget Clock ClockState (RenderCache Clock ClockState) where
time <- getZonedTime
return $ ClockState time
- initCache _ = createRenderCache $ \(Clock config) (ClockState time) _ _ w h _ -> do
+ initCache (Clock config) = createRenderCache $ \(ClockState time) _ _ w h _ -> do
let (r, g, b, a) = fontColor config
str = formatTime defaultTimeLocale (clockFormat config) time
setSourceRGBA r g b a
@@ -78,7 +78,7 @@ instance Widget Clock ClockState (RenderCache Clock ClockState) where
minSize (Clock config) _ _ _ = clockSize config
- render = renderCached
+ render _ = renderCached
handleMessage _ priv m = case (fromMessage m) of
Just (UpdateTime time) -> ClockState time
diff --git a/lib/Phi/Widgets/Systray.hs b/lib/Phi/Widgets/Systray.hs
index c419426..27a5e34 100644
--- a/lib/Phi/Widgets/Systray.hs
+++ b/lib/Phi/Widgets/Systray.hs
@@ -48,14 +48,14 @@ data SystrayMessage = AddIcon !Window !Window | RemoveIcon !Window | RenderIcon
deriving (Show, Typeable)
-instance Widget Systray SystrayState (RenderCache Systray SystrayState) where
+instance Widget Systray SystrayState (RenderCache SystrayState) where
initWidget (Systray) phi dispvar screens = do
phi' <- dupPhi phi
forkIO $ systrayRunner phi' dispvar $ snd . head $ screens
return $ SystrayState phi (fst . head $ screens) 0 []
- initCache _ = createRenderCache $ \Systray (SystrayState phi systrayScreen reset icons) x y w h screen -> do
+ initCache _ = createRenderCache $ \(SystrayState phi systrayScreen reset icons) x y w h screen -> do
when (screen == systrayScreen) $ do
forM_ (zip [0..] icons) $ \(i, SystrayIconState midParent window) -> do
let x' = x + i*(h+2)
@@ -70,7 +70,7 @@ instance Widget Systray SystrayState (RenderCache Systray SystrayState) where
weight _ = 0
- render = renderCached
+ render _ = renderCached
handleMessage _ priv@(SystrayState phi screen reset icons) m = case (fromMessage m) of