mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
add "Square" layout.
This is probably only ever useful in combination with Combo. It sticks one window in a square region, and makes the rest of the windows live with what's left (in a full-screen sense).
This commit is contained in:
parent
5cb818c5c3
commit
b357a60e50
30
Square.hs
Normal file
30
Square.hs
Normal file
@ -0,0 +1,30 @@
|
||||
-- A layout that splits the screen into a square area and the rest of the
|
||||
-- screen.
|
||||
|
||||
|
||||
-- An example layout using square to make the very last area square:
|
||||
|
||||
-- , combo [(tabbed,3),(tabbed,30),(tabbed,1),(tabbed,1)]
|
||||
-- (combo [(twoPane 0.03 0.2,1)
|
||||
-- ,(combo [(twoPane 0.03 0.8,1),(square,1)]
|
||||
-- (mirror $ twoPane 0.03 0.85),1)] (twoPane 0.03 0.5) )
|
||||
|
||||
module XMonadContrib.Square ( square ) where
|
||||
|
||||
import XMonad
|
||||
import Graphics.X11.Xlib
|
||||
|
||||
square :: Layout
|
||||
square = Layout { doLayout = arrange, modifyLayout = message }
|
||||
where
|
||||
arrange rect ws@(_:_) = do
|
||||
let (rest, sq) = splitSquare rect
|
||||
return (map (\w->(w,rest)) (init ws) ++ [(last ws,sq)])
|
||||
arrange _ [] = return []
|
||||
|
||||
message _ = return Nothing
|
||||
|
||||
splitSquare :: Rectangle -> (Rectangle, Rectangle)
|
||||
splitSquare (Rectangle x y w h)
|
||||
| w > h = (Rectangle x y (w - h) h, Rectangle (x+fromIntegral (w-h)) y h h)
|
||||
| otherwise = (Rectangle x y w (h-w), Rectangle x (y+fromIntegral (h-w)) w w)
|
Loading…
x
Reference in New Issue
Block a user