int LyXText::workWidth(BufferView * bview, Inset * inset) const
{
Paragraph * par = 0;
- pos_type pos = 0;
-
- Buffer::inset_iterator it = bview->buffer()->inset_iterator_begin();
-
- for (; it != bview->buffer()->inset_iterator_end(); ++it) {
- if (*it == inset) {
- par = it.getPar();
- pos = it.getPos();
- break;
+ pos_type pos = -1;
+
+ par = inset->parOwner();
+ if (par)
+ pos = par->getPositionOfInset(inset);
+
+ if (!par || pos == -1) {
+ lyxerr << "LyXText::workWidth: something is wrong,"
+ " fall back to the brute force method" << endl;
+ Buffer::inset_iterator it = bview->buffer()->inset_iterator_begin();
+ Buffer::inset_iterator end = bview->buffer()->inset_iterator_end();
+ for ( ; it != end; ++it) {
+ if (*it == inset) {
+ par = it.getPar();
+ pos = it.getPos();
+ break;
+ }
}
}
+
if (!par) {
return workWidth(bview);
}
int LyXText::getLengthMarkerHeight(BufferView * bv, VSpace const & vsp) const
{
+ int const arrow_size = 4;
+ int const space_size = int(vsp.inPixels(bv));
+
if (vsp.kind() != VSpace::LENGTH) {
- return int(vsp.inPixels(bv));
+ return space_size;
}
-
- int const space_size = int(vsp.inPixels(bv));
- int const arrow_size = 4;
LyXFont font;
font.decSize();
lyxfont::maxAscent(font)
+ lyxfont::maxDescent(font));
- return std::max(min_size, space_size);
+ if (vsp.length().len().value() < 0.0)
+ return min_size;
+ else
+ return std::max(min_size, space_size);
}
y_top += asc;
int const w = (inset_owner ? inset_owner->width(p.bv, font) : ww);
- int const xp = static_cast<int>(inset_owner ? p.x : 0);
- p.pain->line(xp, p.yo + y_top, w, p.yo + y_top,
+ int const xp = static_cast<int>(inset_owner ? p.xo : 0);
+ p.pain->line(xp, p.yo + y_top, xp + w, p.yo + y_top,
LColor::topline, Painter::line_solid,
Painter::line_thick);
y_bottom -= asc;
int const w = (inset_owner ? inset_owner->width(p.bv, font) : ww);
- int const xp = static_cast<int>(inset_owner ? p.x : 0);
+ int const xp = static_cast<int>(inset_owner ? p.xo : 0);
int const y = p.yo + y_bottom;
- p.pain->line(xp, y, w, y, LColor::topline, Painter::line_solid,
+ p.pain->line(xp, y, xp + w, y, LColor::topline, Painter::line_solid,
Painter::line_thick);
y_bottom -= asc;