Alfredo Braunstein wrote: >> I don't have time to act on this until saturday so feel free to change >> that if you want. > > I don't have time either unfortunately. I'll be a rather busy (read > traveling) in the next 30 days or so... IMHO, (if you agree) we should > just revert the full patch series if possible.
That is btw: 20068 20070 20071 20079 20080 20083 20100 20101 20103 Patch attached. I don't know if I'm missing anything. There are maybe related changes (like the removal of textmetrics in InsetText) that should be redone. A/
Index: insets/InsetCaption.cpp =================================================================== --- insets/InsetCaption.cpp (revision 20113) +++ insets/InsetCaption.cpp (working copy) @@ -163,8 +163,7 @@ labelwidth_ = pi.pain.text(x, y, full_label_, pi.base.font); // add some space to separate the label from the inset text labelwidth_ += 2 * TEXT_TO_INSET_OFFSET; - int const ty = y - ascent() + TEXT_TO_INSET_OFFSET; - InsetText::draw(pi, x + labelwidth_, ty); + InsetText::draw(pi, x + labelwidth_, y); setPosCache(pi, x, y); } Index: insets/InsetTabular.cpp =================================================================== --- insets/InsetTabular.cpp (revision 20113) +++ insets/InsetTabular.cpp (working copy) @@ -3015,7 +3015,6 @@ int const a = tabular.rowAscent(i); int const d = tabular.rowDescent(i); idx = tabular.cellIndex(i, 0); - int const cy = y - a; for (col_type j = 0; j < tabular.columnCount(); ++j) { if (tabular.isPartOfMultiColumn(i, j)) continue; @@ -3028,11 +3027,11 @@ || y + d < 0 || y - a > bv->workHeight()) { pi.pain.setDrawingEnabled(false); - cell(idx)->draw(pi, cx, cy); + cell(idx)->draw(pi, cx, y); drawCellLines(pi.pain, nx, y, i, idx, pi.erased_); pi.pain.setDrawingEnabled(true); } else { - cell(idx)->draw(pi, cx, cy); + cell(idx)->draw(pi, cx, y); drawCellLines(pi.pain, nx, y, i, idx, pi.erased_); } nx += tabular.columnWidth(idx); Index: insets/InsetCollapsable.cpp =================================================================== --- insets/InsetCollapsable.cpp (revision 20113) +++ insets/InsetCollapsable.cpp (working copy) @@ -94,6 +94,7 @@ status_(rhs.status_), openinlined_(rhs.openinlined_), autoOpen_(rhs.autoOpen_), + textdim_(rhs.textdim_), // the sole purpose of this copy constructor mouse_hover_(false) { @@ -207,17 +208,16 @@ dim = dimensionCollapsed(); if (geometry() == TopButton || geometry() == LeftButton) { - Dimension textdim; - InsetText::metrics(mi, textdim); - openinlined_ = (textdim.wid + dim.wid) < mi.base.textwidth; + InsetText::metrics(mi, textdim_); + openinlined_ = (textdim_.wid + dim.wid) < mi.base.textwidth; if (openinlined_) { // Correct for button width. - dim.wid += textdim.wid; - dim.des = max(dim.des - textdim.asc + dim.asc, textdim.des); - dim.asc = textdim.asc; + dim.wid += textdim_.wid; + dim.des = max(dim.des - textdim_.asc + dim.asc, textdim_.des); + dim.asc = textdim_.asc; } else { - dim.des += textdim.height() + TEXT_TO_BOTTOM_OFFSET; - dim.wid = max(dim.wid, textdim.wid); + dim.des += textdim_.height() + TEXT_TO_BOTTOM_OFFSET; + dim.wid = max(dim.wid, textdim_.wid); if (hasFixedWidth()) dim.wid = max(dim.wid, mi.base.textwidth); } @@ -250,16 +250,16 @@ // Draw button first -- top, left or only Dimension dimc = dimensionCollapsed(); - + int const top = y - ascent() + TEXT_TO_INSET_OFFSET; if (geometry() == TopButton || geometry() == LeftButton || geometry() == ButtonOnly) { button_dim.x1 = xx + 0; button_dim.x2 = xx + dimc.width(); - button_dim.y1 = y - dimc.asc; - button_dim.y2 = y + dimc.des; + button_dim.y1 = top; + button_dim.y2 = top + dimc.height(); - pi.pain.buttonText(xx, y, layout_.labelstring, layout_.labelfont, mouse_hover_); + pi.pain.buttonText(xx, top + dimc.asc, layout_.labelstring, layout_.labelfont, mouse_hover_); } else { button_dim.x1 = 0; button_dim.y1 = 0; @@ -267,31 +267,29 @@ button_dim.y2 = 0; } - TextMetrics const & tm = pi.base.bv->textMetrics(&text_); - int const baseline = y - tm.ascent(); int textx, texty; switch (geometry()) { case LeftButton: textx = xx + dimc.width(); - texty = baseline; + texty = top + textdim_.asc; InsetText::draw(pi, textx, texty); break; case TopButton: textx = xx; - texty = baseline + dimc.height(); + texty = top + dimc.height() + textdim_.asc; InsetText::draw(pi, textx, texty); break; case ButtonOnly: break; case NoButton: textx = xx; - texty = baseline; + texty = y + textdim_.asc; InsetText::draw(pi, textx, texty); break; case SubLabel: case Corners: textx = xx; - texty = baseline; + texty = y + textdim_.asc; const_cast<InsetCollapsable *>(this)->setDrawFrame(false); InsetText::draw(pi, textx, texty); const_cast<InsetCollapsable *>(this)->setDrawFrame(true); @@ -368,7 +366,7 @@ InsetText::drawSelection(pi, x, y); break; case TopButton: - y += dimensionCollapsed().des; + y += dimensionCollapsed().des + textdim_.asc; InsetText::drawSelection(pi, x, y); break; case ButtonOnly: @@ -393,12 +391,10 @@ case LeftButton: x += dimensionCollapsed().wid; break; - case TopButton: { - TextMetrics const & tm = bv.textMetrics(&text_); + case TopButton: y += dimensionCollapsed().height() - ascent() - + TEXT_TO_INSET_OFFSET + tm.ascent(); + + TEXT_TO_INSET_OFFSET + textdim_.asc; break; - } case NoButton: case SubLabel: case Corners: Index: insets/InsetText.cpp =================================================================== --- insets/InsetText.cpp (revision 20113) +++ insets/InsetText.cpp (working copy) @@ -188,8 +188,8 @@ if (drawFrame_ || pi.full_repaint) { int const w = hasFixedWidth() ? tm.maxWidth() : tm.width() + 2 * border_; - int const a = border_; - int const h = a + tm.height() + border_; + int const a = tm.ascent() + border_; + int const h = a + tm.descent() + border_; if (pi.full_repaint) pi.pain.fillRectangle(x, y - a, w, h, backgroundColor()); if (drawFrame_) Index: insets/InsetCollapsable.h =================================================================== --- insets/InsetCollapsable.h (revision 20113) +++ insets/InsetCollapsable.h (working copy) @@ -168,6 +168,8 @@ mutable bool openinlined_; /// the inset will automatically open when the cursor is inside mutable bool autoOpen_; + /// + mutable Dimension textdim_; /// changes color when mouse enters/leaves this inset bool mouse_hover_; }; Index: BufferView.cpp =================================================================== --- BufferView.cpp (revision 20113) +++ BufferView.cpp (working copy) @@ -1551,7 +1551,7 @@ tm.drawParagraph(pi, metrics_info_.p1, 0, metrics_info_.y1 + tm.parMetrics(metrics_info_.p1).ascent()); else - tm.draw(pi, 0, metrics_info_.y1); + tm.draw(pi, 0, metrics_info_.y1 + tm.parMetrics(metrics_info_.p1).ascent()); LYXERR(Debug::PAINTING) << "\n\t\t*** END DRAWING ***" << endl; // and grey out above (should not happen later) Index: TextMetrics.cpp =================================================================== --- TextMetrics.cpp (revision 20113) +++ TextMetrics.cpp (working copy) @@ -1806,6 +1806,7 @@ ParMetricsCache::const_iterator it = par_metrics_.begin(); ParMetricsCache::const_iterator const pm_end = par_metrics_.end(); + y -= it->second.ascent(); for (; it != pm_end; ++it) { ParagraphMetrics const & pmi = it->second; y += pmi.ascent();