dim_.asc = 10;
dim_.des = 10;
- //text_->updateLabels(*bv->buffer());
+ //text_->updateLabels(bv->buffer());
}
int TextMetrics::rightMargin(ParagraphMetrics const & pm) const
{
- return main_text_? pm.rightMargin(*bv_->buffer()) : 0;
+ return main_text_? pm.rightMargin(bv_->buffer()) : 0;
}
int TextMetrics::rightMargin(pit_type const pit) const
{
- return main_text_? par_metrics_[pit].rightMargin(*bv_->buffer()) : 0;
+ return main_text_? par_metrics_[pit].rightMargin(bv_->buffer()) : 0;
}
bool TextMetrics::redoParagraph(pit_type const pit)
{
+ Paragraph & par = text_->getPar(pit);
// IMPORTANT NOTE: We pass 'false' explicitely in order to not call
// redoParagraph() recursively inside parMetrics.
Dimension old_dim = parMetrics(pit, false).dim();
ParagraphMetrics & pm = par_metrics_[pit];
- // reinitialize paragraph dimension.
- pm.dim() = Dimension();
- Paragraph & par = text_->getPar(pit);
- Buffer & buffer = *bv_->buffer();
+ pm.reset(par);
+
+ Buffer & buffer = bv_->buffer();
main_text_ = (text_ == &buffer.text());
bool changed = false;
InsetList::const_iterator ii = par.insetlist.begin();
InsetList::const_iterator iend = par.insetlist.end();
for (; ii != iend; ++ii) {
+ Dimension old_dim = ii->inset->dimension();
Dimension dim;
int const w = max_width_ - text_->leftMargin(buffer, max_width_, pit, ii->pos)
- right_margin;
Font const & font = ii->inset->noFontChange() ?
bufferfont : text_->getFont(buffer, par, ii->pos);
MetricsInfo mi(bv_, font, w);
- changed |= ii->inset->metrics(mi, dim);
+ ii->inset->metrics(mi, dim);
+ changed |= (old_dim != dim);
}
- // rebreak the paragraph
- pm.rows().clear();
-
par.setBeginOfBody();
pos_type z = 0;
// maximum pixel width of a row
Row const & row) const
{
RowMetrics result;
- Buffer & buffer = *bv_->buffer();
+ Buffer & buffer = bv_->buffer();
Paragraph const & par = text_->getPar(pit);
double w = dim_.wid - row.width();
result.x = text_->leftMargin(buffer, max_width_, pit, row.pos());
// is there a manual margin with a manual label
- Layout_ptr const & layout = par.layout();
+ LayoutPtr const & layout = par.layout();
if (layout->margintype == MARGIN_MANUAL
&& layout->labeltype == LABEL_MANUAL) {
int TextMetrics::labelFill(pit_type const pit, Row const & row) const
{
- Buffer & buffer = *bv_->buffer();
+ Buffer & buffer = bv_->buffer();
Paragraph const & par = text_->getPar(pit);
pos_type last = par.beginOfBody();
if (text_->getPar(pit).layout()->margintype != MARGIN_MANUAL)
return 0;
// return the beginning of the body
- return text_->leftMargin(*bv_->buffer(), max_width_, pit);
+ return text_->leftMargin(bv_->buffer(), max_width_, pit);
}
void TextMetrics::rowBreakPoint(int width, pit_type const pit,
Row & row) const
{
- Buffer & buffer = *bv_->buffer();
+ Buffer & buffer = bv_->buffer();
ParagraphMetrics const & pm = par_metrics_[pit];
Paragraph const & par = text_->getPar(pit);
pos_type const end = par.size();
return;
}
- Layout_ptr const & layout = par.layout();
+ LayoutPtr const & layout = par.layout();
if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
row.endpos(addressBreakPoint(pos, par));
void TextMetrics::setRowWidth(int right_margin,
pit_type const pit, Row & row) const
{
- Buffer & buffer = *bv_->buffer();
+ Buffer & buffer = bv_->buffer();
// get the pure distance
pos_type const end = row.endpos();
ParagraphMetrics const & pm = par_metrics_[pit];
// ok, let us initialize the maxasc and maxdesc value.
// Only the fontsize count. The other properties
// are taken from the layoutfont. Nicer on the screen :)
- Layout_ptr const & layout = par.layout();
+ LayoutPtr const & layout = par.layout();
// as max get the first character of this row then it can
// increase but not decrease the height. Just some point to
// start with so we don't have to do the assignment below too
// often.
- Buffer const & buffer = *bv_->buffer();
+ Buffer const & buffer = bv_->buffer();
Font font = text_->getFont(buffer, par, row.pos());
Font::FONT_SIZE const tmpsize = font.size();
font = text_->getLayoutFont(buffer, pit);
pos_type TextMetrics::getColumnNearX(pit_type const pit,
Row const & row, int & x, bool & boundary) const
{
- Buffer const & buffer = *bv_->buffer();
+ Buffer const & buffer = bv_->buffer();
/// For the main Text, it is possible that this pit is not
/// yet in the CoordCache when moving cursor up.
pos_type vc = row.pos();
pos_type end = row.endpos();
pos_type c = 0;
- Layout_ptr const & layout = par.layout();
+ LayoutPtr const & layout = par.layout();
bool left_side = false;
int TextMetrics::singleWidth(pit_type pit, pos_type pos) const
{
- Buffer const & buffer = *bv_->buffer();
+ Buffer const & buffer = bv_->buffer();
ParagraphMetrics const & pm = par_metrics_[pit];
return pm.singleWidth(pos, text_->getFont(buffer, text_->getPar(pit), pos));