diff options
author | okan | 2011-06-24 06:06:24 +0000 |
---|---|---|
committer | okan | 2011-06-24 06:06:24 +0000 |
commit | ab4a3c9a9f59f702603e19f3eb3508a815521d6c (patch) | |
tree | ac1d554c262b5b74f3aaca048f357f87469c49c7 /client.c | |
parent | c94e1a5dfb1df6ef5292efe8116084f95220d1a1 (diff) | |
download | cwm-ab4a3c9a9f59f702603e19f3eb3508a815521d6c.tar.gz |
introduce a new config option to snap to the screen edge. 'snapdist'
keyword taken from a diff from Sviatoslav Chagaev to do the same thing,
but implemented in a completely way (based on some very old code from
mk@). default set to 0, so no behavior change.
ok oga@ (who would also like to take it further...)
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.84 2011/06/24 06:01:47 okan Exp $ + * $OpenBSD: client.c,v 1.85 2011/06/24 06:06:24 okan Exp $ */ #include <sys/param.h> @@ -842,3 +842,32 @@ client_inbound(struct client_ctx *cc, int x, int y) return (x < cc->geom.width && x >= 0 && y < cc->geom.height && y >= 0); } + +int +client_snapcalc(int n, int dn, int nmax, int bwidth, int snapdist) +{ + int n0, n1, s0, s1; + + s0 = s1 = 0; + n0 = n; + n1 = n + dn + (bwidth * 2); + + if (abs(n0) <= snapdist) + s0 = -n0; + + if (nmax - snapdist <= n1 && n1 <= nmax + snapdist) + s1 = nmax - n1; + + /* possible to snap in both directions */ + if (s0 != 0 && s1 != 0) + if (abs(s0) < abs(s1)) + return s0; + else + return s1; + else if (s0 != 0) + return s0; + else if (s1 != 0) + return s1; + else + return 0; +} |