}
+#if 0
+// Not used, see TextMetrics::rowBreakPoint.
// this needs special handling - only newlines count as a break point
static pos_type addressBreakPoint(pos_type i, Paragraph const & par)
{
return end;
}
+#endif
int TextMetrics::labelEnd(pit_type const pit) const
Layout const & layout = par.layout();
+#if 0
+ //FIXME: As long as leftMargin() is not correctly implemented for
+ // MARGIN_RIGHT_ADDRESS_BOX, we should also not do this here.
+ // Otherwise, long rows will be painted off the screen.
if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX)
return addressBreakPoint(pos, par);
+#endif
pos_type const body_pos = par.beginOfBody();
int yy = -1;
ParMetricsCache::const_iterator it = par_metrics_.begin();
ParMetricsCache::const_iterator et = par_metrics_.end();
- ParMetricsCache::const_iterator last = et; last--;
+ ParMetricsCache::const_iterator last = et;
+ --last;
ParagraphMetrics const & pm = it->second;
case MARGIN_RIGHT_ADDRESS_BOX: {
#if 0
- // ok, a terrible hack. The left margin depends on the widest
- // row in this paragraph.
- RowList::iterator rit = par.rows().begin();
- RowList::iterator end = par.rows().end();
- // FIXME: This is wrong.
+ // The left margin depends on the widest row in this paragraph.
+ // This code is wrong because it depends on the rows, but at the
+ // same time this function is used in redoParagraph to construct
+ // the rows.
+ ParagraphMetrics const & pm = par_metrics_[pit];
+ RowList::const_iterator rit = pm.rows().begin();
+ RowList::const_iterator end = pm.rows().end();
int minfill = max_width;
for ( ; rit != end; ++rit)
if (rit->fill() < minfill)
minfill = rit->fill();
- l_margin += theFontMetrics(params.getFont()).signedWidth(layout.leftmargin);
+ l_margin += theFontMetrics(buffer.params().getFont()).signedWidth(layout.leftmargin);
l_margin += minfill;
#endif
// also wrong, but much shorter.