X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextMetrics.cpp;h=e28d8fc9785873de5b8d8733a2163d117b502870;hb=1ab314f8e6e145dc73d0a26b7e82a280b497ea3c;hp=5c79d2c297e076cfce5df25681418a7bc393ab32;hpb=08d93755727228dd1a7140c9791463906bd94f83;p=lyx.git diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 5c79d2c297..e28d8fc978 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -27,7 +27,6 @@ #include "CoordCache.h" #include "Cursor.h" #include "CutAndPaste.h" -#include "support/debug.h" #include "FontIterator.h" #include "FuncRequest.h" #include "InsetList.h" @@ -49,6 +48,8 @@ #include "frontends/FontMetrics.h" #include "frontends/Painter.h" +#include "support/debug.h" + using namespace std; namespace lyx { @@ -220,13 +221,13 @@ bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width) int TextMetrics::rightMargin(ParagraphMetrics const & pm) const { - return main_text_? pm.rightMargin(bv_->buffer()) : 0; + return main_text_? pm.rightMargin(*bv_) : 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_) : 0; } @@ -385,8 +386,8 @@ bool TextMetrics::redoParagraph(pit_type const pit) << " the context is better then."); updateLabels(bv_->buffer()); parPos = text_->macrocontextPosition(); - parPos.pit() = pit; BOOST_ASSERT(!parPos.empty()); + parPos.pit() = pit; } // redo insets @@ -570,11 +571,8 @@ void TextMetrics::computeRowMetrics(pit_type const pit, align = par.params().align(); // Display-style insets should always be on a centred row - // The test on par.size() is to catch zero-size pars, which - // would trigger the assert in Paragraph::getInset(). - //inset = par.size() ? par.getInset(row.pos()) : 0; - if (row.pos() < par.size() && par.isInset(row.pos())) { - switch(par.getInset(row.pos())->display()) { + if (Inset const * inset = par.getInset(row.pos())) { + switch (inset->display()) { case Inset::AlignLeft: align = LYX_ALIGN_BLOCK; break; @@ -783,20 +781,22 @@ pit_type TextMetrics::rowBreakPoint(int width, pit_type const pit, point = i + 1; break; } + Inset const * inset = 0; // Break before... if (i + 1 < end) { - if (par.isInset(i + 1) && par.getInset(i + 1)->display()) { + if ((inset = par.getInset(i + 1)) && inset->display()) { point = i + 1; break; } // ...and after. - if (par.isInset(i) && par.getInset(i)->display()) { + if ((inset = par.getInset(i)) && inset->display()) { point = i + 1; break; } } - if (!par.isInset(i) || par.getInset(i)->isChar()) { + inset = par.getInset(i); + if (!inset || inset->isChar()) { // some insets are line separators too if (par.isLineSeparator(i)) { // register breakpoint: @@ -1698,7 +1698,7 @@ int TextMetrics::leftMargin(int max_width, int l_margin = 0; if (text_->isMainText(buffer)) - l_margin += changebarMargin(); + l_margin += bv_->leftMargin(); l_margin += theFontMetrics(buffer.params().getFont()).signedWidth( tclass.leftmargin()); @@ -1710,6 +1710,7 @@ int TextMetrics::leftMargin(int max_width, if (pars[newpar].layout()->isEnvironment()) { l_margin = leftMargin(max_width, newpar); } + //FIXME Should this check for emptyLayout() as well? if (par.layout() == tclass.defaultLayout()) { if (pars[newpar].params().noindent()) parindent.erase(); @@ -1821,7 +1822,7 @@ int TextMetrics::leftMargin(int max_width, || layout->labeltype == LABEL_TOP_ENVIRONMENT || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT || (layout->labeltype == LABEL_STATIC - && layout->latextype == LATEX_ENVIRONMENT + && layout->latextype == LATEX_ENVIRONMENT && !isFirstInSequence(pit, pars))) && align == LYX_ALIGN_BLOCK && !par.params().noindent() @@ -1831,7 +1832,7 @@ int TextMetrics::leftMargin(int max_width, && !(!par.empty() && par.isInset(pos) && par.getInset(pos)->display()) - && (par.layout() != tclass.defaultLayout() + && (par.layout() != tclass.defaultLayout() //should this check emptyLayout()? || buffer.params().paragraph_separation == BufferParams::PARSEP_INDENT)) {