#include "insets/insettext.h"
#include "ParagraphParameters.h"
+#include "debug.h"
#include "BufferView.h"
#include "buffer.h"
#include "gettext.h"
RowList::iterator rit,
int y_offset, int x_offset, int y)
: bv_(bv), pain_(bv_.painter()), text_(text), row_(rit),
- pit_(rit->par()),
+ pit_(rit->par()),
xo_(x_offset), yo_(y_offset), y_(y)
{}
/// "temporary"
LyXFont const RowPainter::getFont(pos_type pos) const
{
- return text_.getFont(bv_.buffer(), pit_, pos);
+ return text_.getFont(pit_, pos);
}
LyXFont const RowPainter::getLabelFont() const
{
- return text_.getLabelFont(bv_.buffer(), pit_);
+ return text_.getLabelFont(pit_);
}
void RowPainter::paintInset(pos_type const pos)
{
- Inset * inset = const_cast<Inset*>(pit_->getInset(pos));
+ InsetOld * inset = const_cast<InsetOld*>(pit_->getInset(pos));
Assert(inset);
- MetricsInfo mi(perv(bv_), getFont(pos), text_.workWidth());
- Dimension dim;
- inset->metrics(mi, dim);
-
PainterInfo pi(perv(bv_));
pi.base.font = getFont(pos);
#warning metrics?
inset->draw(pi, int(x_), yo_ + row_->baseline());
- x_ += dim.wid;
+ x_ += inset->width();
}
}
// Draw text and set the new x position
+ //lyxerr << "paint row: yo_ " << yo_ << " baseline: " << row_->baseline()
+ // << "\n";
pain_.text(int(x_), yo_ + row_->baseline(), str, orig_font);
x_ += font_metrics::width(str, orig_font);
}
// draw a top line
if (parparams.lineTop()) {
- LyXFont font(LyXFont::ALL_SANE);
int const asc = font_metrics::ascent('x', getFont(0));
y_top += asc;
// draw a bottom line
if (parparams.lineBottom()) {
- LyXFont font(LyXFont::ALL_SANE);
int const asc = font_metrics::ascent('x',
getFont(max(pos_type(0), pit_->size() - 1)));
int const lwidth = font_metrics::width(layout->labelsep,
getLabelFont());
- x_ += label_hfill_ + lwidth
- - singleWidth(body_pos - 1);
+ x_ += label_hfill_ + lwidth - singleWidth(body_pos - 1);
}
if (pit_->isHfill(pos)) {
int const y0 = yo_ + row_->baseline();
int const y1 = y0 - defaultRowHeight() / 2;
- pain_.line(x_, y1, x_, y0,
- LColor::added_space);
+ pain_.line(x_, y1, x_, y0, LColor::added_space);
if (hfillExpansion(text_, row_, pos)) {
int const y2 = (y0 + y1) / 2;
void RowPainter::paint()
{
- width_ = text_.isInInset()
- ? text_.inset_owner->textWidth(perv(bv_), true) : bv_.workWidth();
+ width_ = text_.workWidth();
// FIXME: must be a cleaner way here. Aren't these calculations
// belonging to row metrics ?
text_.prepareToPrint(row_, x_, separator_, hfill_, label_hfill_);
// FIXME: what is this fixing ?
- if (text_.isInInset() && (x_ < 0))
+ if (text_.isInInset() && x_ < 0)
x_ = 0;
x_ += xo_;
void paintRows(BufferView const & bv, LyXText const & text,
RowList::iterator rit, int y_offset, int x_offset, int y)
{
+ // fix up missing metrics() call for main LyXText
+ // calling metrics() directly is (a) slow and (b) crashs
+ if (&text == bv.text) {
+#if 1
+ // make sure all insets are updated
+ ParagraphList::iterator pit = text.ownerParagraphs().begin();
+ ParagraphList::iterator end = text.ownerParagraphs().end();
+
+ // compute inset metrics
+ for (; pit != end; ++pit) {
+ InsetList & insetList = pit->insetlist;
+ InsetList::iterator ii = insetList.begin();
+ InsetList::iterator iend = insetList.end();
+ for (; ii != iend; ++ii) {
+ Dimension dim;
+ LyXFont font;
+ MetricsInfo mi(perv(bv), font, text.workWidth());
+ ii->inset->metrics(mi, dim);
+ }
+ }
+#else
+ LyXFont font;
+ Dimension dim;
+ MetricsInfo mi(perv(bv), font, text.workWidth());
+ const_cast<LyXText&>(text).metrics(mi, dim);
+#endif
+ }
+
RowPainter painter(bv, text, rit, y_offset, x_offset, y);
painter.paint();
}