diff options
-rw-r--r-- | lib/Phi/Widgets/Taskbar.hs | 116 | ||||
-rw-r--r-- | src/Phi.hs | 8 |
2 files changed, 65 insertions, 59 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 @@ -14,7 +14,7 @@ main = do runPhi defaultXConfig defaultPanelConfig { panelPosition = Bottom } [theTaskbar, brightBorder [theSystray], brightBorder [theClock]] where - normalTaskBorder = BorderConfig (BorderWidth 2 (-3) 2 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, 1) 5 0 activeTaskBorder = normalTaskBorder { borderColor = (1, 1, 1, 0.8) , backgroundColor = (0, 0, 0, 1) } @@ -41,7 +41,7 @@ main = do } - theTaskbar = taskbar defaultTaskbarConfig { normalTaskStyle = taskStyle {taskIconStyle = desaturateIconStyle 0.6} + theTaskbar = taskbar defaultTaskbarConfig { normalTaskStyle = taskStyle {taskIconStyle = desaturateIconStyle 0.7} , activeTaskStyle = taskStyle {taskBorder = activeTaskBorder} , desktopStyle = Just (normalDesktopStyle, currentDesktopStyle) } @@ -49,7 +49,7 @@ main = do theSystray = systray theClock = clock defaultClockConfig { clockFormat = "<span font='Sans 8'>%R</span>\n<span font='Sans 6'>%A %d %B</span>" - , lineSpacing = (-2) + , lineSpacing = (-3) , clockSize = 75 } - brightBorder = border $ BorderConfig (simpleBorderWidth 1) 1 (BorderWidth (-2) 3 0 3) (0.5, 0.5, 0.5, 0.65) (0.85, 0.85, 0.85, 0.8) 5 0 + brightBorder = border normalDesktopBorder |