summaryrefslogtreecommitdiffhomepage
path: root/src/Xmobar/X11/Boxes.hs
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2022-09-16 05:15:09 +0100
committerjao <jao@gnu.org>2022-09-16 05:15:09 +0100
commit684fee419fb6ee35efd28c196b0c520d800fffa9 (patch)
tree5143547b62839dbc23221935fdcaf7027b30ef55 /src/Xmobar/X11/Boxes.hs
parentea075213baa7e6fe6ed519a6b5c70e7ae89a56a1 (diff)
downloadxmobar-684fee419fb6ee35efd28c196b0c520d800fffa9.tar.gz
xmobar-684fee419fb6ee35efd28c196b0c520d800fffa9.tar.bz2
cairo: outer boxes fixes
Diffstat (limited to 'src/Xmobar/X11/Boxes.hs')
-rw-r--r--src/Xmobar/X11/Boxes.hs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/Xmobar/X11/Boxes.hs b/src/Xmobar/X11/Boxes.hs
new file mode 100644
index 0000000..c0eeeed
--- /dev/null
+++ b/src/Xmobar/X11/Boxes.hs
@@ -0,0 +1,52 @@
+------------------------------------------------------------------------------
+-- |
+-- Module: Xmobar.X11.Boxes
+-- Copyright: (c) 2022 Jose Antonio Ortega Ruiz
+-- License: BSD3-style (see LICENSE)
+--
+-- Maintainer: jao@gnu.org
+-- Stability: unstable
+-- Portability: unportable
+--Start date: Fri Sep 16, 2022 04:01
+--
+-- Borders and boxes
+--
+------------------------------------------------------------------------------
+
+module Xmobar.X11.Boxes (boxLines, borderRect) where
+
+import Xmobar.Run.Parsers
+import Xmobar.Config.Types
+
+boxLines :: Box -> Double -> Double -> Double -> [(Double, Double, Double, Double)]
+boxLines (Box bd offset lw _ margins) ht x0 x1 =
+ case bd of
+ BBTop -> [rtop]; BBBottom -> [rbot]; BBVBoth -> [rtop, rbot]
+ BBLeft -> [rleft]; BBRight -> [rright]; BBHBoth -> [rleft, rright]
+ BBFull -> [rtop, rbot, rleft, rright]
+ where (BoxMargins top right bot left) = margins
+ (BoxOffset align m) = offset
+ ma = fromIntegral m
+ (p0, p1) = case align of L -> (0, -ma); C -> (ma, -ma); R -> (ma, 0)
+ lc = fromIntegral lw / 2
+ [mt, mr, mb, ml] = map fromIntegral [top, right, bot, left]
+ xmin = x0 - ml - lc
+ xmax = x1 + mr + lc
+ ymin = mt + lc
+ ymax = ht - mb - lc
+ rtop = (xmin + p0, ymin, xmax + p1, ymin)
+ rbot = (xmin + p0, ymax, xmax + p1, ymax)
+ rleft = (xmin, ymin + p0, xmin, ymax + p1)
+ rright = (xmax, ymin + p0, xmax, ymax + p1)
+
+borderRect :: Border -> Double -> Double -> (Double, Double, Double, Double)
+borderRect bdr w h =
+ case bdr of
+ TopB -> (0, 0, w - 1, 0)
+ BottomB -> (0, h - 1, w - 1, 0)
+ FullB -> (0, 0, w - 1, h - 1)
+ TopBM m -> (0, fi m, w - 1, 0)
+ BottomBM m -> (0, h - fi m, w - 1, 0)
+ FullBM m -> (fi m, fi m, w - 2 * fi m, h - 2 * fi m)
+ NoBorder -> (-1, -1, -1, -1)
+ where fi = fromIntegral