mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
* 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:
parent
137158532b
commit
a7058ad9c7
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user