X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCoordCache.h;h=f26b6b22dd523791b9c73536f4488356d2649653;hb=4ed0312c51704780af1c452d3a82a84171b3725a;hp=99d31a9280156173f4748683203f205bd27f0a0f;hpb=4fcbb93e39800f6188a0bb70183f18fc7438ce17;p=lyx.git diff --git a/src/CoordCache.h b/src/CoordCache.h index 99d31a9280..f26b6b22dd 100644 --- a/src/CoordCache.h +++ b/src/CoordCache.h @@ -16,29 +16,23 @@ #include "Dimension.h" -#include "support/types.h" - -#include +#include namespace lyx { class Inset; -class Text; class MathData; -class Paragraph; void lyxbreaker(void const * data, const char * hint, int size); struct Geometry { - Point pos; + Point pos = {-10000, -10000 }; Dimension dim; bool covers(int x, int y) const { - return x >= pos.x_ - && x <= pos.x_ + dim.wid - && y >= pos.y_ - dim.asc - && y <= pos.y_ + dim.des; + return x >= pos.x_ && x < pos.x_ + dim.wid + && y >= pos.y_ - dim.asc && y <= pos.y_ + dim.des; } int squareDistance(int x, int y) const @@ -81,14 +75,18 @@ public: void add(T const * thing, Dimension const & dim) { - if (!has(thing)) - data_[thing].pos = Point(-10000, -10000); data_[thing].dim = dim; } + Geometry & geometry(T const * thing) + { + checkDim(thing, "geometry"); + return data_.find(thing)->second; + } + Geometry const & geometry(T const * thing) const { - check(thing, "geometry"); + checkDim(thing, "geometry"); return data_.find(thing)->second; } @@ -147,6 +145,7 @@ public: private: friend class CoordCache; +#ifdef ENABLE_ASSERTIONS void checkDim(T const * thing, char const * hint) const { if (!hasDim(thing)) @@ -158,8 +157,13 @@ private: if (!has(thing)) lyxbreaker(thing, hint, data_.size()); } +#else + void checkDim(T const *, char const * const ) const {} + + void check(T const *, char const *) const {} +#endif - typedef std::map cache_type; + typedef std::unordered_map cache_type; cache_type data_; }; @@ -169,10 +173,10 @@ private: * All points cached in this cache are only valid between subsequent * updates. (x,y) == (0,0) is the upper left screen corner, x increases * to the right, y increases downwords. - * The dimension part is built in BufferView::updateMetrics() and the + * The dimension part is built in BufferView::updateMetrics() and the * diverse Inset::metrics() calls. * The individual points are added at drawing time in - * BufferView::updateMetrics(). The math inset position are cached in + * BufferView::draw(). The math inset position are cached in * the diverse InsetMathXXX::draw() calls and the in-text inset position * are cached in RowPainter::paintInset(). * FIXME: For mathed, it would be nice if the insets did not saves their @@ -184,19 +188,21 @@ public: void clear(); /// A map from MathData to position on the screen - CoordCacheBase & arrays() { return arrays_; } - CoordCacheBase const & getArrays() const { return arrays_; } + typedef CoordCacheBase Arrays; + Arrays & arrays() { return arrays_; } + Arrays const & getArrays() const { return arrays_; } /// A map from insets to positions on the screen - CoordCacheBase & insets() { return insets_; } - CoordCacheBase const & getInsets() const { return insets_; } + typedef CoordCacheBase Insets; + Insets & insets() { return insets_; } + Insets const & getInsets() const { return insets_; } /// Dump the contents of the cache to lyxerr in debugging form void dump() const; private: /// MathDatas - CoordCacheBase arrays_; + Arrays arrays_; // All insets - CoordCacheBase insets_; + Insets insets_; }; } // namespace lyx