summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Widgets/Taskbar.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Phi/Widgets/Taskbar.hs')
-rw-r--r--lib/Phi/Widgets/Taskbar.hs116
1 files changed, 61 insertions, 55 deletions
diff --git a/lib/Phi/Widgets/Taskbar.hs b/lib/Phi/Widgets/Taskbar.hs
index 80a5cc7..d4cbca7 100644
--- a/lib/Phi/Widgets/Taskbar.hs
+++ b/lib/Phi/Widgets/Taskbar.hs
@@ -211,67 +211,73 @@ instance WidgetClass Taskbar where
renderText (desktopFont ds) (fromIntegral (dx - dlabelwidth desktop - gap desktop ds)) 0 (dlabelwidth desktop) h $ show (desktop+1)
restore
- _ -> return ()
- forM_ (zip [0..] desktopWindows) $ \(i, window) -> do
- let style = (if window == activeWindow then activeTaskStyle else normalTaskStyle) config
- (r, g, b, a) = taskColor style
- leftBorder = (borderLeft $ margin $ taskBorder style) + (borderWidth $ taskBorder style) + (borderLeft $ padding $ taskBorder style)
- rightBorder = (borderRight $ margin $ taskBorder style) + (borderWidth $ taskBorder style) + (borderRight $ padding $ taskBorder style)
- h' = h - (borderV $ margin $ taskBorder style)
- mstate = M.lookup window windowStates
- micons = M.lookup window windowIcons
- mscaledIconRef = M.lookup window windowScaledIcons
- x = dx + i*windowWidth
-
- case (mstate, micons, mscaledIconRef) of
- (Just state, Just icons, Just scaledIconRef) -> do
- save
- drawBorder (taskBorder style) x 0 windowWidth h
- clip
-
- setSourceRGBA r g b a
- renderText (taskFont style) (fromIntegral (x + leftBorder + h' + 3)) 0 (windowWidth - leftBorder - h' - 3 - rightBorder) h $ windowTitle state
-
- restore
+ forM_ (zip [0..] desktopWindows) $ \(i, window) -> do
+ let style = (if window == activeWindow then activeTaskStyle else normalTaskStyle) config
+ (r, g, b, a) = taskColor style
+ leftBorder = (borderLeft $ margin $ taskBorder style) + (borderWidth $ taskBorder style) + (borderLeft $ padding $ taskBorder style)
+ rightBorder = (borderRight $ margin $ taskBorder style) + (borderWidth $ taskBorder style) + (borderRight $ padding $ taskBorder style)
+ hd = h - (borderV $ margin $ desktopBorder ds) - 2*(borderWidth $ desktopBorder ds) - (borderV $ padding $ desktopBorder ds)
+ h' = hd - (borderV $ margin $ taskBorder style)
+ mstate = M.lookup window windowStates
+ micons = M.lookup window windowIcons
+ mscaledIconRef = M.lookup window windowScaledIcons
+ x = dx + i*windowWidth
- mscaledIcon <- liftIO $ readIORef scaledIconRef
- scaledIcon <- case mscaledIcon of
- Just (size, icon) | size == h' -> do
- return $ Just icon
- _ -> do
- case bestIcon icons of
- Just icon -> do
- scaledIcon <- liftIO $ createSimilarSurface icon ContentColorAlpha h' h'
- renderWith scaledIcon $ do
- imageW <- imageSurfaceGetWidth icon
- imageH <- imageSurfaceGetHeight icon
-
- let scalef = (fromIntegral h')/(fromIntegral $ max imageW imageH)
-
- case True of
- _ | imageH < imageW -> translate 0 (fromIntegral (imageW-imageH)*scalef/2)
- | otherwise -> translate (fromIntegral (imageH-imageW)*scalef/2) 0
+ case (mstate, micons, mscaledIconRef) of
+ (Just state, Just icons, Just scaledIconRef) -> do
+ save
+ translate 0 $ fromIntegral $ ((borderTop $ margin $ desktopBorder ds) + (borderWidth $ desktopBorder ds) + (borderTop $ padding $ desktopBorder ds))
+ save
+ drawBorder (taskBorder style) x 0 windowWidth hd
+ clip
+
+ setSourceRGBA r g b a
+ renderText (taskFont style) (fromIntegral (x + leftBorder + h' + 3)) 0 (windowWidth - leftBorder - h' - 3 - rightBorder) hd $ windowTitle state
+
+ restore
+
+ mscaledIcon <- liftIO $ readIORef scaledIconRef
+ scaledIcon <- case mscaledIcon of
+ Just (size, icon) | size == h' -> do
+ return $ Just icon
+ _ -> do
+ case bestIcon icons of
+ Just icon -> do
+ scaledIcon <- liftIO $ createSimilarSurface icon ContentColorAlpha h' h'
+ renderWith scaledIcon $ do
+ imageW <- imageSurfaceGetWidth icon
+ imageH <- imageSurfaceGetHeight icon
+
+ let scalef = (fromIntegral h')/(fromIntegral $ max imageW imageH)
+
+ case True of
+ _ | imageH < imageW -> translate 0 (fromIntegral (imageW-imageH)*scalef/2)
+ | otherwise -> translate (fromIntegral (imageH-imageW)*scalef/2) 0
+
+ downscaled scalef icon
+ paint
+ liftIO $ writeIORef scaledIconRef $ Just (h', scaledIcon)
+ return $ Just scaledIcon
- downscaled scalef icon
- paint
- liftIO $ writeIORef scaledIconRef $ Just (h', scaledIcon)
- return $ Just scaledIcon
+ Nothing -> return Nothing
+
+ case scaledIcon of
+ Just icon -> do
+ save
+ translate (fromIntegral $ x + leftBorder) (fromIntegral $ borderTop $ margin $ taskBorder style)
+ taskIconStyle style icon
+ paint
+ restore
- Nothing -> return Nothing
-
- case scaledIcon of
- Just icon -> do
- save
- translate (fromIntegral $ x + leftBorder) (fromIntegral $ borderTop $ margin $ taskBorder style)
- taskIconStyle style icon
- paint
+ Nothing ->
+ return ()
+
restore
-
- Nothing ->
- return ()
- _ -> return ()
+ _ -> return ()
+
+ _ -> return ()
return $ nwindows + length desktopWindows