diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-06-01 23:48:21 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-06-01 23:48:21 +0000 |
| commit | f0c2fa18bef6a0f74d607eb390b98ccfbd8d778f (patch) | |
| tree | d76d3456588a8f64b4ddaba34d8043121d8903be /src | |
| parent | 39d598e5567d279a47dfaca5b42060f965ab480c (diff) | |
window-to-window corner snapping!
Diffstat (limited to 'src')
| -rw-r--r-- | src/Window.cc | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/src/Window.cc b/src/Window.cc index 80fe0816..86898d54 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -2537,25 +2537,61 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) { dtop = std::abs(wbottom - winrect.top()), dbottom = std::abs(wtop - winrect.bottom()); - // snap left? + // snap left of other window? if (dleft < snap_distance && dleft <= dright) { dx = winrect.left() - frame.rect.width(); + + // try corner-snap to its other sides + dtop = std::abs(wtop - winrect.top()); + dbottom = std::abs(wbottom - winrect.bottom()); + if (dtop < snap_distance && dtop <= dbottom) + dy = winrect.top(); + else if (dbottom < snap_distance) + dy = winrect.bottom() - frame.rect.height(); + continue; } - // snap right? + // snap right of other window? else if (dright < snap_distance) { dx = winrect.right() + 1; + + // try corner-snap to its other sides + dtop = std::abs(wtop - winrect.top()); + dbottom = std::abs(wbottom - winrect.bottom()); + if (dtop < snap_distance && dtop <= dbottom) + dy = winrect.top(); + else if (dbottom < snap_distance) + dy = winrect.bottom() - frame.rect.height(); + continue; } - // snap top? + // snap top of other window? if (dtop < snap_distance && dtop <= dbottom) { dy = winrect.top() - frame.rect.height(); + + // try corner-snap to its other sides + dleft = std::abs(wleft - winrect.left()); + dright = std::abs(wright - winrect.right()); + if (dleft < snap_distance && dleft <= dright) + dx = winrect.left(); + else if (dright < snap_distance) + dx = winrect.right() - frame.rect.width(); + continue; } - // snap bottom? + // snap bottom of other window? else if (dbottom < snap_distance) { dy = winrect.bottom() + 1; + + // try corner-snap to its other sides + dleft = std::abs(wleft - winrect.left()); + dright = std::abs(wright - winrect.right()); + if (dleft < snap_distance && dleft <= dright) + dx = winrect.left(); + else if (dright < snap_distance) + dx = winrect.right() - frame.rect.width(); + continue; } } |
