* 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 {
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:

View 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);
}