mirror of
https://github.com/xmonad/xmonad.git
synced 2025-08-07 23:51:52 -07:00
size hints infrastructure
This commit is contained in:
@@ -482,3 +482,36 @@ mouseResizeWindow w = withDisplay $ \d -> do
|
|||||||
-- x <- f d w wa
|
-- x <- f d w wa
|
||||||
-- mouseDrag $ \(_,_,_,ex,ey,_,_,_,_,_) -> g x ex ey d w wa
|
-- mouseDrag $ \(_,_,_,ex,ey,_,_,_,_,_) -> g x ex ey d w wa
|
||||||
-- float w
|
-- float w
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
-- size hints
|
||||||
|
|
||||||
|
-- | Reduce the dimensions if needed to comply to the given SizeHints.
|
||||||
|
applySizeHints :: SizeHints -> (Dimension, Dimension) -> (Dimension, Dimension)
|
||||||
|
applySizeHints sh =
|
||||||
|
maybe id applyMaxSizeHint (sh_max_size sh) .
|
||||||
|
maybe id (\(bw, bh) (w, h) -> (w+bw, h+bh)) (sh_base_size sh) .
|
||||||
|
maybe id applyResizeIncHint (sh_resize_inc sh) .
|
||||||
|
maybe id applyAspectHint (sh_aspect sh) .
|
||||||
|
maybe id (\(bw, bh) (w, h) -> (w-bw, h-bh)) (sh_base_size sh)
|
||||||
|
|
||||||
|
-- | Reduce the dimensions so their aspect ratio falls between the two given aspect ratios.
|
||||||
|
applyAspectHint :: ((Dimension, Dimension), (Dimension, Dimension)) -> (Dimension, Dimension) -> (Dimension, Dimension)
|
||||||
|
applyAspectHint ((minx, miny), (maxx, maxy)) (w, h)
|
||||||
|
| or [minx < 1, miny < 1, maxx < 1, maxy < 1] = (w, h)
|
||||||
|
| w * maxy > h * maxx = (h * maxx `div` maxy, h)
|
||||||
|
| w * miny < h * minx = (w, w * miny `div` minx)
|
||||||
|
| otherwise = (w, h)
|
||||||
|
|
||||||
|
-- | Reduce the dimensions so they are a multiple of the size increments.
|
||||||
|
applyResizeIncHint :: (Dimension, Dimension) -> (Dimension, Dimension) -> (Dimension, Dimension)
|
||||||
|
applyResizeIncHint (iw, ih) (w, h)
|
||||||
|
| iw > 0 && ih > 0 = (w - w `mod` iw, h - h `mod` ih)
|
||||||
|
| otherwise = (w, h)
|
||||||
|
|
||||||
|
-- | Reduce the dimensions if they exceed the given maximum dimensions.
|
||||||
|
applyMaxSizeHint :: (Dimension, Dimension) -> (Dimension, Dimension) -> (Dimension, Dimension)
|
||||||
|
applyMaxSizeHint (maxw, maxh) (w, h)
|
||||||
|
| maxw > 0 && maxh > 0 = (min w maxw, min h maxh)
|
||||||
|
| otherwise = (w, h)
|
||||||
|
Reference in New Issue
Block a user