int y = 0;
int lastw = 0;
- // Addup ontribution of nested insets, from inside to outside,
- // keeping the outer paragraph for a special handling below
+ // Addup contribution of nested insets, from inside to outside,
+ // keeping the outer paragraph for a special handling below
for (size_t i = dit.depth() - 1; i >= 1; --i) {
CursorSlice const & sl = dit[i];
int xx = 0;
if (rtl)
x -= lastw;
}
-
+
// remember width for the case that sl.inset() is positioned in an RTL inset
- lastw = sl.inset().width();
+ if (i && dit[i - 1].text()) {
+ // If this Inset is inside a Text Inset, retrieve the Dimension
+ // from the containing text instead of using Inset::dimension() which
+ // might not be implemented.
+ // FIXME (Abdel 23/09/2007): this is a bit messy because of the
+ // elimination of Inset::dim_ cache. This coordOffset() method needs
+ // to be rewritten in light of the new design.
+ Dimension const & dim = bv.parMetrics(dit[i - 1].text(),
+ dit[i - 1].pit()).insetDimension(&sl.inset());
+ lastw = dim.wid;
+ } else {
+ Dimension const dim = sl.inset().dimension(bv);
+ lastw = dim.wid;
+ }
//lyxerr << "Cursor::getPos, i: "
// << i << " x: " << xx << " y: " << y << endl;
// FIXME: This does not work within mathed!
CurStatus status(BufferView const * bv, DocIterator const & dit)
{
+ // FIXME: it's be better to have something like TextMetrics::status().
TextMetrics const & tm = bv->textMetrics(dit.bottom().text());
- if (tm.has(dit.bottom().pit()))
- return CUR_INSIDE;
- else if (dit.bottom().pit() < bv->anchor_ref())
+ int par_pos = tm.parPosition(dit.bottom().pit());
+ if (par_pos < 0)
return CUR_ABOVE;
- else
+ else if (par_pos > bv->workHeight())
return CUR_BELOW;
+
+ return CUR_INSIDE;
}
namespace {
if (inset
&& find(codes.begin(), codes.end(), inset->lyxCode()) != codes.end()
&& (contents.empty() ||
- static_cast<InsetCommand const *>(inset)->getContents() == contents)) {
+ static_cast<InsetCommand const *>(inset)->getContents() == contents)) {
dit = tmpdit;
return true;
}