#ifndef COORDCACHE_H
#define COORDCACHE_H
-#include "mathed/math_data.h"
-#include "insets/insetbase.h"
-#include "lyxtext.h"
+class InsetBase;
+class LyXText;
+class MathArray;
+class Paragraph;
+
+#include "support/types.h"
#include <boost/assert.hpp>
#include <map>
+
+// All positions cached in this cache are only valid between subsequent
+// updated. (x,y) == (0,0) is the upper left screen corner, x increases
+// to the right, y increases downwords.
+
void lyxbreaker(void const * data, const char * hint, int size);
+void lyxaborter(int x, int y);
struct Point {
Point()
: x_(0), y_(0)
- {}
+ {}
Point(int x, int y) : x_(x), y_(y)
{
BOOST_ASSERT(x < 4000);
BOOST_ASSERT(y > -3000);
BOOST_ASSERT(y < 4000);
- }
+ }
int x_, y_;
};
// T * find(int x, int y) const
// {
-// T *
+// T *
// cache_type iter
-// }
+// }
private:
friend class CoordCache;
void check(T const * thing, char const * hint) const
{
- if (!has(thing)) {
+ if (!has(thing))
lyxbreaker(thing, hint, data_.size());
- BOOST_ASSERT(false);
- }
}
typedef std::map<T const *, Point> cache_type;
class CoordCache {
public:
void clear();
+ Point get(LyXText const *, lyx::pit_type);
CoordCacheBase<MathArray> arrays_;
+
+ // all insets
CoordCacheBase<InsetBase> insets_;
+
+ // paragraph grouped by owning text
+ typedef std::map<lyx::pit_type, Point> InnerParPosCache;
+ typedef std::map<LyXText const *, InnerParPosCache> ParPosCache;
+ ParPosCache pars_;
};
extern CoordCache theCoords;