* CoordCacheBase::covers(): new method.

* 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
This commit is contained in:
Abdelrazak Younes 2007-09-24 08:05:49 +00:00
parent 137158532b
commit a7058ad9c7
2 changed files with 26 additions and 24 deletions

View File

@ -44,6 +44,14 @@ public:
struct Geometry { struct Geometry {
Point pos; Point pos;
Dimension dim; 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 Dimension const & dim(T const * thing) const
{ {
//check(thing, "dim"); check(thing, "dim");
return data_.find(thing)->second.dim; return data_.find(thing)->second.dim;
} }
@ -98,11 +106,11 @@ public:
return data_.find(thing) != data_.end(); return data_.find(thing) != data_.end();
} }
// T * find(int x, int y) const bool covers(T const * thing, int x, int y) const
// { {
// T * cache_type::const_iterator it = data_.find(thing);
// cache_type iter return it != data_.end() && it->second.covers(x, y);
// } }
private: private:
friend class CoordCache; friend class CoordCache;
@ -121,14 +129,20 @@ public:
}; };
/** /**
* A global cache that allows us to come from a paragraph in a document * A BufferView dependent cache that allows us to come from an inset in
* to a position point on the screen. * a document to a position point and dimension on the screen.
* All points cached in this cache are only valid between subsequent * All points cached in this cache are only valid between subsequent
* updates. (x,y) == (0,0) is the upper left screen corner, x increases * updates. (x,y) == (0,0) is the upper left screen corner, x increases
* to the right, y increases downwords. * to the right, y increases downwords.
* The cache is built in BufferView::updateMetrics which is called * The dimension part is built in BufferView::updateMetrics() and the
* from BufferView::update. The individual points are added * diverse Inset::metrics() calls.
* while we paint them. See for instance paintPar in RowPainter.C. * 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 { class CoordCache {
public: public:

View File

@ -333,19 +333,7 @@ int Inset::yo(BufferView const & bv) const
bool Inset::covers(BufferView const & bv, int x, int y) const bool Inset::covers(BufferView const & bv, int x, int y) const
{ {
//lyxerr << "Inset::covers, x: " << x << " y: " << y return bv.coordCache().getInsets().covers(this, x, 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();
} }