X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCoordCache.h;h=4b941ad4403f7be3d7489b3e119b1f9d1defe51c;hb=faa87bf9f30b943397429a04254d96963bbf38bc;hp=1d1876d0666e7f700c0f687d09bde32f802f2291;hpb=a42571cab47e21e76e39aa4e53a94a68969f5d0b;p=lyx.git diff --git a/src/CoordCache.h b/src/CoordCache.h index 1d1876d066..4b941ad440 100644 --- a/src/CoordCache.h +++ b/src/CoordCache.h @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -16,8 +16,6 @@ #include "Dimension.h" -#include "support/types.h" - #include namespace lyx { @@ -29,18 +27,6 @@ class Paragraph; void lyxbreaker(void const * data, const char * hint, int size); -class Point { -public: - Point() - : x_(0), y_(0) - {} - - Point(int x, int y); - - int x_, y_; -}; - - struct Geometry { Point pos; Dimension dim; @@ -93,6 +79,8 @@ public: void add(T const * thing, Dimension const & dim) { + if (!has(thing)) + data_[thing].pos = Point(-10000, -10000); data_[thing].dim = dim; } @@ -104,7 +92,7 @@ public: Dimension const & dim(T const * thing) const { - check(thing, "dim"); + checkDim(thing, "dim"); return data_.find(thing)->second.dim; } @@ -127,19 +115,28 @@ public: } bool has(T const * thing) const + { + typename cache_type::const_iterator it = data_.find(thing); + + if (it == data_.end()) + return false; + return it->second.pos.x_ != -10000; + } + + bool hasDim(T const * thing) const { return data_.find(thing) != data_.end(); } bool covers(T const * thing, int x, int y) const { - cache_type::const_iterator it = data_.find(thing); + typename cache_type::const_iterator it = data_.find(thing); 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); + typename cache_type::const_iterator it = data_.find(thing); if (it == data_.end()) return 1000000; return it->second.squareDistance(x, y); @@ -148,6 +145,12 @@ public: private: friend class CoordCache; + void checkDim(T const * thing, char const * hint) const + { + if (!hasDim(thing)) + lyxbreaker(thing, hint, data_.size()); + } + void check(T const * thing, char const * hint) const { if (!has(thing)) @@ -156,9 +159,6 @@ private: typedef std::map cache_type; cache_type data_; - -public: - cache_type const & getData() const { return data_; } }; /**