]> git.lyx.org Git - features.git/commitdiff
* CoordCacheBase::covers(): new method.
authorAbdelrazak Younes <younes@lyx.org>
Mon, 24 Sep 2007 08:05:49 +0000 (08:05 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Mon, 24 Sep 2007 08:05:49 +0000 (08:05 +0000)
* CoordCache: correct and extend documentation.

* Inset::covers(): use CoordCacheBase::covers().

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20459 a592a061-630c-0410-9148-cb99ea01b6c8

src/CoordCache.h
src/insets/Inset.cpp

index a93696df1e7a9dd0cbd4021b82957d5722ad9985..2b63e6d340a2c5430c45c217355aa28febe62792 100644 (file)
@@ -44,6 +44,14 @@ public:
 struct Geometry {
        Point pos;
        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;
+       }
 };
 
 
@@ -71,7 +79,7 @@ public:
 
        Dimension const & dim(T const * thing) const
        {
-               //check(thing, "dim");
+               check(thing, "dim");
                return data_.find(thing)->second.dim;
        }
 
@@ -98,11 +106,11 @@ public:
                return data_.find(thing) != data_.end();
        }
 
-//     T * find(int x, int y) const
-//     {
-//             T *
-//             cache_type iter
-//     }
+       bool covers(T const * thing, int x, int y) const
+       {
+               cache_type::const_iterator it = data_.find(thing);
+               return it != data_.end() && it->second.covers(x, y);
+       }
 
 private:
        friend class CoordCache;
@@ -121,14 +129,20 @@ public:
 };
 
 /**
- * A global cache that allows us to come from a paragraph in a document
- * to a position point on the screen.
+ * A BufferView dependent cache that allows us to come from an inset in
+ * a document to a position point and dimension on the screen.
  * 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 cache is built in BufferView::updateMetrics which is called
- * from BufferView::update. The individual points are added
- * while we paint them. See for instance paintPar in RowPainter.C.
+ * 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
+ * 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
+ * position themselves. That should be the duty of the containing math
+ * array.
  */
 class CoordCache {
 public:
index 252e399e826ef3e922198f8e078945696caa0c4d..01e039f4616ce76f803103140e3629560db66eac 100644 (file)
@@ -333,19 +333,7 @@ int Inset::yo(BufferView const & bv) const
 
 bool Inset::covers(BufferView const & bv, int x, int y) const
 {
-       //lyxerr << "Inset::covers, x: " << x << " y: " << y
-       //      << " xo: " << xo(bv) << " yo: " << yo()
-       //      << " x1: " << xo(bv) << " x2: " << xo() + width()
-       //      << " y1: " << yo(bv) - ascent() << " y2: " << yo() + descent()
-       //      << std::endl;
-
-       Dimension const dim = dimension(bv);
-
-       return bv.coordCache().getInsets().has(this)
-                       && x >= xo(bv)
-                       && x <= xo(bv) + dim.width()
-                       && y >= yo(bv) - dim.ascent()
-                       && y <= yo(bv) + dim.descent();
+       return bv.coordCache().getInsets().covers(this, x, y);
 }