diff options
| author | Kostas Agnantis <kagnadis@gmail.com> | 2022-11-08 22:48:48 +0200 | 
|---|---|---|
| committer | Kostas Agnantis <kagnadis@gmail.com> | 2022-11-08 22:48:48 +0200 | 
| commit | 34065e8f19e8481c31cb31a55da02b42897a63fe (patch) | |
| tree | 48074d79855bf4ddae2f739babdaeaff2c3421e7 /src | |
| parent | 0554a448bb27985e8d66940d077f54eda58d8e5a (diff) | |
| download | xmobar-34065e8f19e8481c31cb31a55da02b42897a63fe.tar.gz xmobar-34065e8f19e8481c31cb31a55da02b42897a63fe.tar.bz2 | |
Adds 'XPosition' type documentation and code fixes based on review
Diffstat (limited to 'src')
| -rw-r--r-- | src/Xmobar/Config/Types.hs | 97 | ||||
| -rw-r--r-- | src/Xmobar/X11/Window.hs | 34 | 
2 files changed, 102 insertions, 29 deletions
| diff --git a/src/Xmobar/Config/Types.hs b/src/Xmobar/Config/Types.hs index 1172034..ea7b958 100644 --- a/src/Xmobar/Config/Types.hs +++ b/src/Xmobar/Config/Types.hs @@ -87,20 +87,91 @@ data Config =             , signal :: SignalChan   -- ^ Channel to send signals to xmobar             } deriving (Read, Show) -data XPosition = Top -               | TopH Int -               | TopHM Int Int Int Int -- left right top height -               | TopW Align Int -               | TopSize Align Int Int -               | TopP Int Int +-- | The position datatype +data XPosition = Top            -- ^ Top of the screen, full width, auto height + +               | TopH           -- ^ Top of the screen, full width with +                                --   specific height +                  Int           -- ^ Height (in pixels) + +                 -- | Top of the screen, full width with +                 --   specific height and margins +               | TopHM +                  Int           -- ^ Height (in pixels) +                  Int           -- ^ Left margin (in pixels) +                  Int           -- ^ Right margin (in pixels) +                  Int           -- ^ Top margin (in pixels) +                  Int           -- ^ Bottom margin (in pixels) + +                 -- | Top of the screen with specific width +                 --   (as screen percentage) and alignment +               | TopW +                  Align         -- ^ Alignement (L|C|R) +                  Int           -- ^ Width as screen percentage (0-100) + +                 -- | Top of the screen with specific width +                 --   (as screen percentage), height and +                 --   alignment +               | TopSize +                  Align         -- ^ Alignement (L|C|R) +                  Int           -- ^ Width as screen percentage (0-100) +                  Int           -- ^ Height (in pixels) + +                 -- | Top of the screen with specific left/right +                 --   margins +               | TopP +                  Int           -- ^ Left margin (in pixels) +                  Int           -- ^ Right margin (in pixels) + +                 -- | Bottom of the screen, full width, auto height                 | Bottom -               | BottomH Int -               | BottomHM Int Int Int Int -- left right bottom height -               | BottomP Int Int -               | BottomW Align Int -               | BottomSize Align Int Int -               | Static {xpos, ypos, width, height :: Int} -               | OnScreen Int XPosition + +               | BottomH        -- ^ Bottom of the screen, full width, with +                                --   specific height +                  Int           -- ^ Height (in pixels) + +                 -- | Bottom of the screen with specific height +                 --   and margins +               | BottomHM +                  Int           -- ^ Height (in pixels) +                  Int           -- ^ Left margin (in pixels) +                  Int           -- ^ Right margin (in pixels) +                  Int           -- ^ Top margin (in pixels) +                  Int           -- ^ Bottom margin (in pixels) + +                 -- | Bottom of the screen with specific +                 --   left/right margins +               | BottomP +                  Int           -- ^ Left margin (in pixels) +                  Int           -- ^ Bottom margin (in pixels) + +                 -- | Bottom of the screen with specific width +                 --   (as screen percentage) and alignment +                 --   and alignment +               | BottomW +                  Align         -- ^ Alignement (L|C|R) +                  Int           -- ^ Width as screen percentage (0-100) + +                 -- | Bottom of the screen with specific width +                 --   (as screen percentage), height +                 --   and alignment +               | BottomSize +                  Align         -- ^ Alignement (L|C|R) +                  Int           -- ^ Width as screen percentage (0-100) +                  Int           -- ^ Height (in pixels) + +                 -- | Static position and specific size +               | Static { xpos :: Int   -- ^ Position X (in pixels) +                        , ypos :: Int   -- ^ Position Y (in pixels) +                        , width :: Int  -- ^ Width (in pixels) +                        , height :: Int -- ^ Height (in pixels) +                        } + +                 -- | Along with the position characteristics +                 --   specify the screen to display the bar +               | OnScreen +                  Int           -- ^ Screen id (primary is 0) +                  XPosition     -- ^ Position                   deriving ( Read, Show, Eq )  data Align = L | R | C deriving ( Read, Show, Eq ) diff --git a/src/Xmobar/X11/Window.hs b/src/Xmobar/X11/Window.hs index 61d701e..87d56f4 100644 --- a/src/Xmobar/X11/Window.hs +++ b/src/Xmobar/X11/Window.hs @@ -86,12 +86,14 @@ setPosition c p rs ht =      T.Top -> X.Rectangle rx ry rw h      T.TopP l r -> X.Rectangle (rx + fi l) ry (rw - fi l - fi r) h      T.TopH ch -> X.Rectangle rx ry rw (mh ch) -    T.TopHM l r t ch -> X.Rectangle (rx + fi l) (ry + fi t) (rw - fi l - fi r) (mh ch) +    T.TopHM ch l r t _ -> +      X.Rectangle (rx + fi l) (ry + fi t) (rw - fi l - fi r) (mh ch)      T.TopW a i -> X.Rectangle (ax a i) ry (nw i) h      T.TopSize a i ch -> X.Rectangle (ax a i) ry (nw i) (mh ch)      T.Bottom -> X.Rectangle rx ny rw h      T.BottomH ch -> X.Rectangle rx (ny' ch) rw (mh ch) -    T.BottomHM l r b ch -> X.Rectangle (rx + fi l) (ry + fi rh - fi b - fi (mh ch)) (rw - fi l - fi r) (mh ch) +    T.BottomHM ch l r _ b -> +      X.Rectangle (rx + fi l) (ry + fi rh - fi b - fi (mh ch)) (rw - fi l - fi r) (mh ch)      T.BottomW a i -> X.Rectangle (ax a i) ny (nw i) h      T.BottomP l r -> X.Rectangle (rx + fi l) ny (rw - fi l - fi r) h      T.BottomSize a i ch  -> X.Rectangle (ax a i) (ny' ch) (nw i) (mh ch) @@ -162,20 +164,20 @@ getRootWindowHeight srs = maximum (map getMaxScreenYCoord srs)  getStrutValues :: X.Rectangle -> T.XPosition -> Int -> [Int]  getStrutValues r@(X.Rectangle x y w h) p rwh =    case p of -    T.OnScreen _ p'   -> getStrutValues r p' rwh -    T.Top             -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.TopH    _       -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.TopHM        {} -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.TopP    _ _     -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.TopW    _ _     -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.TopSize      {} -> [0, 0, st,  0, 0, 0, 0, 0, nx, nw,  0,  0] -    T.Bottom          -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.BottomH _       -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.BottomHM     {} -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.BottomP _ _     -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.BottomW _ _     -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.BottomSize   {} -> [0, 0,  0, sb, 0, 0, 0, 0,  0,  0, nx, nw] -    T.Static       {} -> getStaticStrutValues p rwh +    T.OnScreen _ p'      -> getStrutValues r p' rwh +    T.Top                -> [0, 0, st  , 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.TopH    _          -> [0, 0, st  , 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.TopHM _ _ _ _ b    -> [0, 0, st+b, 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.TopP    _ _        -> [0, 0, st  , 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.TopW    _ _        -> [0, 0, st  , 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.TopSize      {}    -> [0, 0, st  , 0   , 0, 0, 0, 0, nx, nw, 0 , 0 ] +    T.Bottom             -> [0, 0, 0   , sb  , 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.BottomH _          -> [0, 0, 0   , sb  , 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.BottomHM _ _ _ t _ -> [0, 0, 0   , sb+t, 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.BottomP _ _        -> [0, 0, 0   , sb  , 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.BottomW _ _        -> [0, 0, 0   , sb  , 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.BottomSize   {}    -> [0, 0, 0   , sb  , 0, 0, 0, 0, 0 , 0 , nx, nw] +    T.Static       {}    -> getStaticStrutValues p rwh    where st = fi y + fi h          sb = rwh - fi y          nx = fi x | 
