diff options
-rw-r--r-- | src/Bitmap.hs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/Bitmap.hs b/src/Bitmap.hs index 44dec5d..3479e28 100644 --- a/src/Bitmap.hs +++ b/src/Bitmap.hs @@ -29,17 +29,17 @@ data Bitmap = Bitmap { width :: Dimension , pixmap :: Pixmap } -updateCache :: Display -> Window -> Map FilePath Bitmap -> [[(Widget, String)]] -> IO (Map FilePath Bitmap) +updateCache :: Display -> Window -> Map FilePath Bitmap -> [[(Widget, String)]] + -> IO (Map FilePath Bitmap) updateCache dpy win cache ps = do let paths = map (\(Icon p, _) -> p) . concatMap (filter icons) $ ps icons (Icon _, _) = True icons _ = False - foldM (\m path -> if member path m - then return m - else do bitmap <- loadBitmap dpy win path - case bitmap of - Nothing -> return m - Just bmap -> return $ insert path bmap m) cache paths + go m path = if member path m + then return m + else do bitmap <- loadBitmap dpy win path + return $ maybe m (\b -> insert path b m) bitmap + foldM go cache paths loadBitmap :: Display -> Drawable -> FilePath -> IO (Maybe Bitmap) loadBitmap d w p = do @@ -53,9 +53,11 @@ loadBitmap d w p = do return Nothing drawBitmap :: Display -> Drawable -> GC -> String -> String - -> Position -> Position -> Bitmap -> IO () -drawBitmap d p gc fc bc x y i = do + -> Position -> Position -> Bitmap -> IO () +drawBitmap d p gc fc bc x y i = withColors d [fc, bc] $ \[fc', bc'] -> do + let w = width i + h = height i setForeground d gc fc' setBackground d gc bc' - copyPlane d (pixmap i) p gc 0 0 (width i) (height i) x (y - (fromIntegral $ height i)) 1 + copyPlane d (pixmap i) p gc 0 0 w h x (y - (fromIntegral h)) 1 |