From: Abdelrazak Younes Date: Mon, 24 Sep 2007 13:47:03 +0000 (+0000) Subject: * CoordCache: prepare transfer of MathData dimension to arrays cache. X-Git-Tag: 1.6.10~8209 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a42571cab47e21e76e39aa4e53a94a68969f5d0b;p=lyx.git * CoordCache: prepare transfer of MathData dimension to arrays cache. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20464 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/CoordCache.h b/src/CoordCache.h index 2b63e6d340..1d1876d066 100644 --- a/src/CoordCache.h +++ b/src/CoordCache.h @@ -52,6 +52,25 @@ struct Geometry { && y >= pos.y_ - dim.asc && y <= pos.y_ + dim.des; } + + int squareDistance(int x, int y) const + { + int xx = 0; + int yy = 0; + + if (x < pos.x_) + xx = pos.x_ - x; + else if (x > pos.x_ + dim.wid) + xx = x - pos.x_ - dim.wid; + + if (y < pos.y_ - dim.asc) + yy = pos.y_ - dim.asc - y; + else if (y > pos.y_ + dim.des) + yy = y - pos.y_ - dim.des; + + // Optimisation: We avoid to compute the sqrt on purpose. + return xx*xx + yy*yy; + } }; @@ -77,6 +96,12 @@ public: data_[thing].dim = dim; } + Geometry const & geometry(T const * thing) const + { + check(thing, "geometry"); + return data_.find(thing)->second; + } + Dimension const & dim(T const * thing) const { check(thing, "dim"); @@ -112,6 +137,14 @@ public: return it != data_.end() && it->second.covers(x, y); } + int squareDistance(T const * thing, int x, int y) const + { + cache_type::const_iterator it = data_.find(thing); + if (it == data_.end()) + return 1000000; + return it->second.squareDistance(x, y); + } + private: friend class CoordCache;