]> git.lyx.org Git - features.git/commitdiff
* lyxtext.h:
authorAndré Pönitz <poenitz@gmx.net>
Thu, 23 Oct 2003 08:15:57 +0000 (08:15 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Thu, 23 Oct 2003 08:15:57 +0000 (08:15 +0000)
* text.C (isLastRow, isFirstRow): new functions

* paragraph.h: new width cache member

* rowpainter.C: replace RowList::iterator with Row & where possible

* lyxfunc.C: replace several view()->text with a single call

* toc.C: fix 'unused' warning

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7960 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/lyxfunc.C
src/lyxtext.h
src/paragraph.h
src/rowpainter.C
src/text.C
src/toc.C

index 0f1f11aa1b02e14bbdd214bd2e4762c4a05810e3..6e559009b491d19c4bbcb3b16b6f6f386a01a5b9 100644 (file)
@@ -1,3 +1,17 @@
+
+2003-10-23  André Pönitz  <poenitz@gmx.net>
+
+       * lyxtext.h:
+       * text.C (isLastRow, isFirstRow): new functions
+
+       * paragraph.h: new width cache member
+
+       * rowpainter.C: replace RowList::iterator with Row & where possible
+
+       * lyxfunc.C: replace several view()->text with a single call
+
+       * toc.C: fix 'unused' warning
+
 2003-10-23  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
        * lyxlex_pimpl.C (setFile,setStream): be sure to use correct types
index 7939f8eb839df0fc7526afeeb740531de55f248a..e6e951fc26f57445165df27828b4d66abb8bbe2c 100644 (file)
@@ -955,16 +955,17 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
                        }
 
                        if (result == FINISHED_UP) {
-                               RowList::iterator const irow = view()->text->cursorRow();
-                               if (irow != view()->text->firstRow()) {
+                               LyXText * text = view()->text;
+                               RowList::iterator const rit = text->cursorRow();
+                               if (text->isFirstRow(text->cursorPar(), *rit)) {
 #if 1
-                                       view()->text->setCursorFromCoordinates(
-                                               view()->text->cursor.x() + inset_x,
-                                               view()->text->cursor.y() -
-                                               irow->baseline() - 1);
-                                       view()->text->cursor.x_fix(view()->text->cursor.x());
+                                       text->setCursorFromCoordinates(
+                                               text->cursor.x() + inset_x,
+                                               text->cursor.y() -
+                                               rit->baseline() - 1);
+                                       text->cursor.x_fix(text->cursor.x());
 #else
-                                       view()->text->cursorUp(view());
+                                       text->cursorUp(view());
 #endif
                                        moveCursorUpdate();
                                } else {
@@ -975,20 +976,21 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
                        }
 
                        if (result == FINISHED_DOWN) {
-                               RowList::iterator const irow = view()->text->cursorRow();
-                               if (irow != view()->text->lastRow()) {
+                               LyXText * text = view()->text;
+                               RowList::iterator const rit = text->cursorRow();
+                               if (text->isLastRow(text->cursorPar(), *rit)) {
 #if 1
-                                       view()->text->setCursorFromCoordinates(
-                                               view()->text->cursor.x() + inset_x,
-                                               view()->text->cursor.y() -
-                                               irow->baseline() +
-                                               irow->height() + 1);
-                                       view()->text->cursor.x_fix(view()->text->cursor.x());
+                                       text->setCursorFromCoordinates(
+                                               text->cursor.x() + inset_x,
+                                               text->cursor.y() -
+                                               rit->baseline() +
+                                               rit->height() + 1);
+                                       text->cursor.x_fix(text->cursor.x());
 #else
-                                       view()->text->cursorDown(view());
+                                       text->cursorDown(view());
 #endif
                                } else {
-                                       view()->text->cursorRight(view());
+                                       text->cursorRight(view());
                                }
                                moveCursorUpdate();
                                owner->clearMessage();
index 66b12c3988b8b6758aaa5d8c5cb9a78f23dedf51..8a1f2cf47bc2a27465efb51deb9a48dea5404bfb 100644 (file)
@@ -122,7 +122,7 @@ public:
        void setFont(LyXFont const &, bool toggleall = false);
 
        /// rebreaks all paragaphs between the given pars.
-       int redoParagraphs(ParagraphList::iterator begin,
+       void redoParagraphs(ParagraphList::iterator begin,
                            ParagraphList::iterator end);
        /// rebreaks the given par
        void redoParagraph(ParagraphList::iterator pit);
@@ -130,8 +130,8 @@ public:
        /// rebreaks the cursor par
        void redoParagraph();
 private:
-       /// rebreaks the given par, return max row width
-       int redoParagraphInternal(ParagraphList::iterator pit);
+       /// rebreaks the given par
+       void redoParagraphInternal(ParagraphList::iterator pit);
 public:
 
        ///
@@ -486,6 +486,11 @@ public:
        void previousRow(ParagraphList::iterator & pit,
                RowList::iterator & rit) const;
 
+       /// is this row the last in the text?
+       bool isLastRow(ParagraphList::iterator pit, Row const & row) const;
+       /// is this row the first in the text?
+       bool isFirstRow(ParagraphList::iterator pit, Row const & row) const;
+
        ///
        std::string selectionAsString(Buffer const & buffer, bool label) const;
 private:
index deeab42ff3012635b810e21ac8050596b1e86644..7b3d716a3bf695e6a77beac71a1297be8bf299ef 100644 (file)
@@ -302,8 +302,10 @@ public:
        mutable RowList rows;
        /// last draw y position (baseline of top row)
        int y;
-       ///
-       int height;
+       /// total height of paragraph
+       unsigned int height;
+       /// total width of paragraph, may differ from workwidth
+       unsigned int width;
 
 private:
        ///
index efb9342e1951767be15862a874a235c71005de63..83604bee8d372eb68fd58483b27428073f4d0bb0 100644 (file)
@@ -113,7 +113,8 @@ private:
        LyXText const & text_;
 
        /// The row to paint
-       RowList::iterator row_;
+       RowList::iterator const rit_;
+       Row & row_;
 
        /// Row's paragraph
        mutable ParagraphList::iterator  pit_;
@@ -133,7 +134,7 @@ private:
 RowPainter::RowPainter(BufferView const & bv, LyXText const & text,
      ParagraphList::iterator pit, RowList::iterator rit,
      int y_offset, int x_offset, int y)
-       : bv_(bv), pain_(bv_.painter()), text_(text), row_(rit),
+       : bv_(bv), pain_(bv_.painter()), text_(text), rit_(rit), row_(*rit),
          pit_(pit), xo_(x_offset), yo_(y_offset), y_(y)
 {}
 
@@ -172,7 +173,7 @@ char const RowPainter::transformChar(char c, lyx::pos_type pos) const
 
 int RowPainter::leftMargin() const
 {
-       return text_.leftMargin(pit_, *row_);
+       return text_.leftMargin(pit_, row_);
 }
 
 
@@ -184,7 +185,7 @@ void RowPainter::paintInset(pos_type const pos)
 
        PainterInfo pi(perv(bv_));
        pi.base.font = getFont(pos);
-       inset->draw(pi, int(x_), yo_ + row_->baseline());
+       inset->draw(pi, int(x_), yo_ + row_.baseline());
        x_ += inset->width();
 }
 
@@ -208,8 +209,7 @@ void RowPainter::paintHebrewComposeChar(pos_type & vpos)
                c = pit_->getChar(i);
                if (!Encodings::IsComposeChar_hebrew(c)) {
                        if (IsPrintableNonspace(c)) {
-                               int const width2 =
-                                       singleWidth(i, c);
+                               int const width2 = singleWidth(i, c);
                                // dalet / resh
                                dx = (c == 'ø' || c == 'ã')
                                        ? width2 - width
@@ -220,7 +220,7 @@ void RowPainter::paintHebrewComposeChar(pos_type & vpos)
        }
 
        // Draw nikud
-       pain_.text(int(x_) + dx, yo_ + row_->baseline(), str, font);
+       pain_.text(int(x_) + dx, yo_ + row_.baseline(), str, font);
 }
 
 
@@ -243,22 +243,21 @@ void RowPainter::paintArabicComposeChar(pos_type & vpos)
                c = pit_->getChar(i);
                if (!Encodings::IsComposeChar_arabic(c)) {
                        if (IsPrintableNonspace(c)) {
-                               int const width2 =
-                                       singleWidth(i, c);
+                               int const width2 = singleWidth(i, c);
                                dx = (width2 - width) / 2;
                        }
                        break;
                }
        }
        // Draw nikud
-       pain_.text(int(x_) + dx, yo_ + row_->baseline(), str, font);
+       pain_.text(int(x_) + dx, yo_ + row_.baseline(), str, font);
 }
 
 
 void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
 {
        pos_type pos = text_.vis2log(vpos);
-       pos_type const last = lastPos(*pit_, *row_);
+       pos_type const last = lastPos(*pit_, row_);
        LyXFont orig_font = getFont(pos);
 
        // first character
@@ -269,8 +268,8 @@ void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
                str[0] = transformChar(c, pos);
        }
 
-       bool prev_struckout(isDeletedText(*pit_, pos));
-       bool prev_newtext(isInsertedText(*pit_, pos));
+       bool prev_struckout = isDeletedText(*pit_, pos);
+       bool prev_newtext = isInsertedText(*pit_, pos);
 
        ++vpos;
 
@@ -289,6 +288,7 @@ void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
 
                if (arabic && Encodings::IsComposeChar_arabic(c))
                        break;
+
                if (hebrew && Encodings::IsComposeChar_hebrew(c))
                        break;
 
@@ -308,9 +308,9 @@ void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
        }
 
        // Draw text and set the new x position
-       //lyxerr << "paint row: yo_ " << yo_ << " baseline: " << row_->baseline()
+       //lyxerr << "paint row: yo_ " << yo_ << " baseline: " << row_.baseline()
        //      << "\n";
-       pain_.text(int(x_), yo_ + row_->baseline(), str, orig_font);
+       pain_.text(int(x_), yo_ + row_.baseline(), str, orig_font);
        x_ += font_metrics::width(str, orig_font);
 }
 
@@ -324,7 +324,7 @@ void RowPainter::paintForeignMark(double orig_x, LyXFont const & orig_font)
        if (orig_font.language() == bv_.buffer()->params().language)
                return;
 
-       int const y = yo_ + row_->baseline() + 1;
+       int const y = yo_ + row_.baseline() + 1;
        pain_.line(int(orig_x), y, int(x_), y, LColor::language);
 }
 
@@ -376,7 +376,7 @@ void RowPainter::paintBackground()
 {
        int const x = int(xo_);
        int const y = yo_ < 0 ? 0 : yo_;
-       int const h = yo_ < 0 ? row_->height() + yo_ : row_->height();
+       int const h = yo_ < 0 ? row_.height() + yo_ : row_.height();
        pain_.fillRectangle(x, y, width_, h, text_.backgroundColor());
 }
 
@@ -397,9 +397,9 @@ void RowPainter::paintSelection()
                int x;
                int y = yo_;
                int w;
-               int h = row_->height();
+               int h = row_.height();
 
-               if (startrow == row_ && endrow == row_) {
+               if (startrow == rit_ && endrow == rit_) {
                        if (startx < endx) {
                                x = int(xo_) + startx;
                                w = endx - startx;
@@ -409,11 +409,11 @@ void RowPainter::paintSelection()
                                w = startx - endx;
                                pain_.fillRectangle(x, y, w, h, LColor::selection);
                        }
-               } else if (startrow == row_) {
+               } else if (startrow == rit_) {
                        int const x = is_rtl ? int(xo_) : int(xo_ + startx);
                        int const w = is_rtl ? startx : (width_ - startx);
                        pain_.fillRectangle(x, y, w, h, LColor::selection);
-               } else if (endrow == row_) {
+               } else if (endrow == rit_) {
                        int const x = is_rtl ? int(xo_ + endx) : int(xo_);
                        int const w = is_rtl ? (width_ - endx) : endx;
                        pain_.fillRectangle(x, y, w, h, LColor::selection);
@@ -421,24 +421,24 @@ void RowPainter::paintSelection()
                        pain_.fillRectangle(int(xo_), y, width_, h, LColor::selection);
                }
                return;
-       } else if (startrow != row_ && endrow != row_) {
+       } else if (startrow != rit_ && endrow != rit_) {
                if (y_ > starty && y_ < endy) {
                        int w = width_;
-                       int h = row_->height();
+                       int h = row_.height();
                        pain_.fillRectangle(int(xo_), yo_, w, h, LColor::selection);
                }
                return;
        }
 
-       if ((startrow != row_ && !is_rtl) || (endrow != row_ && is_rtl))
+       if ((startrow != rit_ && !is_rtl) || (endrow != rit_ && is_rtl))
                pain_.fillRectangle(int(xo_), yo_,
-                       int(x_), row_->height(), LColor::selection);
+                       int(x_), row_.height(), LColor::selection);
 
        pos_type const body_pos = pit_->beginningOfBody();
-       pos_type const last = lastPos(*pit_, *row_);
+       pos_type const last = lastPos(*pit_, row_);
        double tmpx = x_;
 
-       for (pos_type vpos = row_->pos(); vpos <= last; ++vpos)  {
+       for (pos_type vpos = row_.pos(); vpos <= last; ++vpos)  {
                pos_type pos = text_.vis2log(vpos);
                double const old_tmpx = tmpx;
                if (body_pos > 0 && pos == body_pos - 1) {
@@ -451,7 +451,7 @@ void RowPainter::paintSelection()
                                tmpx -= singleWidth(body_pos - 1);
                }
 
-               if (hfillExpansion(*pit_, *row_, pos)) {
+               if (hfillExpansion(*pit_, row_, pos)) {
                        tmpx += singleWidth(pos);
                        if (pos >= body_pos)
                                tmpx += hfill_;
@@ -467,34 +467,34 @@ void RowPainter::paintSelection()
                        tmpx += singleWidth(pos);
                }
 
-               if ((startrow != row_ || text_.selection.start.pos() <= pos) &&
-                       (endrow != row_ || pos < text_.selection.end.pos())) {
+               if ((startrow != rit_ || text_.selection.start.pos() <= pos) &&
+                       (endrow != rit_ || pos < text_.selection.end.pos())) {
                        // Here we do not use x_ as xo_ was added to x_.
                        pain_.fillRectangle(int(old_tmpx), yo_,
                                int(tmpx - old_tmpx + 1),
-                               row_->height(), LColor::selection);
+                               row_.height(), LColor::selection);
                }
        }
 
-       if ((startrow != row_ && is_rtl) || (endrow != row_ && !is_rtl)) {
+       if ((startrow != rit_ && is_rtl) || (endrow != rit_ && !is_rtl)) {
                pain_.fillRectangle(int(xo_ + tmpx),
                                      yo_, int(bv_.workWidth() - tmpx),
-                                     row_->height(), LColor::selection);
+                                     row_.height(), LColor::selection);
        }
 }
 
 
 void RowPainter::paintChangeBar()
 {
-       pos_type const start = row_->pos();
-       pos_type const end = lastPos(*pit_, *row_);
+       pos_type const start = row_.pos();
+       pos_type const end = lastPos(*pit_, row_);
 
        if (!pit_->isChanged(start, end))
                return;
 
-       int const height = (row_ == text_.lastRow())
-               ? row_->baseline()
-               : row_->height() + boost::next(row_)->top_of_text();
+       int const height = text_.isLastRow(pit_, row_)
+               ? row_.baseline()
+               : row_.height() + boost::next(rit_)->top_of_text();
 
        pain_.fillRectangle(4, yo_, 5, height, LColor::changebar);
 }
@@ -513,8 +513,8 @@ void RowPainter::paintAppendix()
        if (pit_->params().startOfAppendix())
                y += 2 * defaultRowHeight();
 
-       pain_.line(1, y, 1, yo_ + row_->height(), LColor::appendix);
-       pain_.line(ww - 2, y, ww - 2, yo_ + row_->height(), LColor::appendix);
+       pain_.line(1, y, 1, yo_ + row_.height(), LColor::appendix);
+       pain_.line(ww - 2, y, ww - 2, yo_ + row_.height(), LColor::appendix);
 }
 
 
@@ -526,17 +526,17 @@ void RowPainter::paintDepthBar()
                return;
 
        Paragraph::depth_type prev_depth = 0;
-       if (row_ != text_.firstRow()) {
+       if (!text_.isFirstRow(pit_, row_)) {
                ParagraphList::iterator pit2 = pit_;
-               if (row_->pos() == 0)
+               if (row_.pos() == 0)
                        --pit2;
                prev_depth = pit2->getDepth();
        }
 
        Paragraph::depth_type next_depth = 0;
-       if (row_ != text_.lastRow()) {
+       if (!text_.isLastRow(pit_, row_)) {
                ParagraphList::iterator pit2 = pit_;
-               if (row_->endpos() >= pit2->size())
+               if (row_.endpos() >= pit2->size())
                        ++pit2;
                next_depth = pit2->getDepth();
        }
@@ -547,7 +547,7 @@ void RowPainter::paintDepthBar()
                // only consider the changebar space if we're drawing outer left
                if (!xo_)
                        x += CHANGEBAR_MARGIN;
-               int const h = yo_ + row_->height() - 1 - (i - next_depth - 1) * 3;
+               int const h = yo_ + row_.height() - 1 - (i - next_depth - 1) * 3;
 
                pain_.line(x, yo_, x, h, LColor::depthbar);
 
@@ -685,7 +685,7 @@ void RowPainter::paintFirst()
                y_top += paintAppendixStart(yo_ + y_top + 2 * defaultRowHeight());
 
        // the top margin
-       if (row_ == text_.firstRow() && !text_.isInInset())
+       if (text_.isFirstRow(pit_, row_) && !text_.isInInset())
                y_top += PAPER_MARGIN;
 
        // draw a top pagebreak
@@ -772,8 +772,8 @@ void RowPainter::paintFirst()
                                        }
 
                                        pain_.text(int(x),
-                                               yo_ + row_->baseline() -
-                                               row_->ascent_of_text() - maxdesc,
+                                               yo_ + row_.baseline() -
+                                               row_.ascent_of_text() - maxdesc,
                                                str, font);
                                }
                        } else {
@@ -785,7 +785,7 @@ void RowPainter::paintFirst()
                                                - font_metrics::width(str, font);
                                }
 
-                               pain_.text(int(x), yo_ + row_->baseline(), str, font);
+                               pain_.text(int(x), yo_ + row_.baseline(), str, font);
                        }
                }
 
@@ -812,14 +812,14 @@ void RowPainter::paintFirst()
                        double x = x_;
                        if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
                                x = ((is_rtl ? leftMargin() : x_)
-                                        + ww - text_.rightMargin(*pit_, *bv_.buffer(), *row_)) / 2;
+                                        + ww - text_.rightMargin(*pit_, *bv_.buffer(), row_)) / 2;
                                x -= font_metrics::width(str, font) / 2;
                        } else if (is_rtl) {
                                x = ww - leftMargin() -
                                        font_metrics::width(str, font);
                        }
                        pain_.text(int(x),
-                           yo_ + row_->baseline() - row_->ascent_of_text() - maxdesc,
+                           yo_ + row_.baseline() - row_.ascent_of_text() - maxdesc,
                                  str, font);
                }
        }
@@ -829,10 +829,10 @@ void RowPainter::paintFirst()
 void RowPainter::paintLast()
 {
        ParagraphParameters const & parparams = pit_->params();
-       int y_bottom = row_->height() - 1;
+       int y_bottom = row_.height() - 1;
 
        // the bottom margin
-       if (row_ == text_.lastRow() && !text_.isInInset())
+       if (text_.isLastRow(pit_, row_) && !text_.isInInset())
                y_bottom -= PAPER_MARGIN;
 
        int const ww = bv_.workWidth();
@@ -874,11 +874,11 @@ void RowPainter::paintLast()
        {
                LyXFont const font = getLabelFont();
                int const size = int(0.75 * font_metrics::maxAscent(font));
-               int const y = (yo_ + row_->baseline()) - size;
+               int const y = (yo_ + row_.baseline()) - size;
                int x = is_rtl ? LEFT_MARGIN : ww - PAPER_MARGIN - size;
 
-               if (row_->fill() <= size)
-                       x += (size - row_->fill() + 1) * (is_rtl ? -1 : 1);
+               if (row_.fill() <= size)
+                       x += (size - row_.fill() + 1) * (is_rtl ? -1 : 1);
 
                if (endlabel == END_LABEL_BOX)
                        pain_.rectangle(x, y, size, size, LColor::eolmarker);
@@ -892,8 +892,8 @@ void RowPainter::paintLast()
                string const & str = pit_->layout()->endlabelstring();
                double const x = is_rtl ?
                        x_ - font_metrics::width(str, font)
-                       : ww - text_.rightMargin(*pit_, *bv_.buffer(), *row_) - row_->fill();
-               pain_.text(int(x), yo_ + row_->baseline(), str, font);
+                       : ww - text_.rightMargin(*pit_, *bv_.buffer(), row_) - row_.fill();
+               pain_.text(int(x), yo_ + row_.baseline(), str, font);
                break;
        }
        case END_LABEL_NO_LABEL:
@@ -904,7 +904,7 @@ void RowPainter::paintLast()
 
 void RowPainter::paintText()
 {
-       pos_type const last = lastPos(*pit_, *row_);
+       pos_type const last = lastPos(*pit_, row_);
        pos_type body_pos = pit_->beginningOfBody();
        if (body_pos > 0 &&
                (body_pos - 1 > last || !pit_->isLineSeparator(body_pos - 1))) {
@@ -917,7 +917,7 @@ void RowPainter::paintText()
        bool is_struckout = false;
        int last_strikeout_x = 0;
 
-       pos_type vpos = row_->pos();
+       pos_type vpos = row_.pos();
        while (vpos <= last) {
                if (x_ > bv_.workWidth())
                        break;
@@ -947,8 +947,8 @@ void RowPainter::paintText()
                // if we reach the end of a struck out range, paint it
                // we also don't paint across things like tables
                if (running_strikeout && (highly_editable_inset || !is_struckout)) {
-                       int const middle = yo_ + row_->top_of_text()
-                               + (row_->baseline() - row_->top_of_text()) / 2;
+                       int const middle = yo_ + row_.top_of_text()
+                               + (row_.baseline() - row_.top_of_text()) / 2;
                        pain_.line(last_strikeout_x, middle, int(x_), middle,
                                LColor::strikeout, Painter::line_solid, Painter::line_thin);
                        running_strikeout = false;
@@ -964,12 +964,12 @@ void RowPainter::paintText()
                if (pit_->isHfill(pos)) {
                        x_ += 1;
 
-                       int const y0 = yo_ + row_->baseline();
+                       int const y0 = yo_ + row_.baseline();
                        int const y1 = y0 - defaultRowHeight() / 2;
 
                        pain_.line(int(x_), y1, int(x_), y0, LColor::added_space);
 
-                       if (hfillExpansion(*pit_, *row_, pos)) {
+                       if (hfillExpansion(*pit_, row_, pos)) {
                                int const y2 = (y0 + y1) / 2;
 
                                if (pos >= body_pos) {
@@ -999,8 +999,8 @@ void RowPainter::paintText()
 
        // if we reach the end of a struck out range, paint it
        if (running_strikeout) {
-               int const middle = yo_ + row_->top_of_text()
-                       + ((row_->baseline() - row_->top_of_text()) / 2);
+               int const middle = yo_ + row_.top_of_text()
+                       + ((row_.baseline() - row_.top_of_text()) / 2);
                pain_.line(last_strikeout_x, middle, int(x_), middle,
                        LColor::strikeout, Painter::line_solid, Painter::line_thin);
                running_strikeout = false;
@@ -1011,10 +1011,10 @@ void RowPainter::paintText()
 void RowPainter::paint()
 {
        width_       = text_.workWidth();
-       x_           = row_->x();
-       separator_   = row_->fill_separator();
-       hfill_       = row_->fill_hfill();
-       label_hfill_ = row_->fill_label_hfill();
+       x_           = row_.x();
+       separator_   = row_.fill_separator();
+       hfill_       = row_.fill_hfill();
+       label_hfill_ = row_.fill_label_hfill();
 
        // FIXME: what is this fixing ?
        if (text_.isInInset() && x_ < 0)
@@ -1039,10 +1039,10 @@ void RowPainter::paint()
        // changebar
        paintChangeBar();
 
-       if (row_->pos() == 0)
+       if (row_.pos() == 0)
                paintFirst();
 
-       if (row_->endpos() >= pit_->size())
+       if (row_.endpos() >= pit_->size())
                paintLast();
 
        // paint text
index 654f2b39d2de43cbf6771bd3f760afe016fb9bc5..14790edd13a86e2ad850255b578156dd37674a89 100644 (file)
@@ -1168,15 +1168,14 @@ void LyXText::setHeightOfRow(ParagraphList::iterator pit, Row & row)
        row.top_of_text(row.baseline() - font_metrics::maxAscent(font));
 
        row.width(maxwidth);
+
        if (inset_owner) {
                width = max(0, workWidth());
-               RowList::iterator rit = firstRow();
-               RowList::iterator end = endRow();
-               ParagraphList::iterator it = ownerParagraphs().begin();
-               while (rit != end) {
-                       if (rit->width() > width)
-                               width = rit->width();
-                       nextRow(it, rit);
+               ParagraphList::iterator pit = ownerParagraphs().begin();
+               ParagraphList::iterator end = ownerParagraphs().end();
+               for ( ; pit != end; ++pit) {
+                       if (width < pit->width)
+                               width = pit->width;
                }
        }
 }
@@ -1186,7 +1185,7 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout)
 {
        // allow only if at start or end, or all previous is new text
        if (cursor.pos() && cursor.pos() != cursorPar()->size()
-               && cursorPar()->isChangeEdited(0, cursor.pos()))
+           && cursorPar()->isChangeEdited(0, cursor.pos()))
                return;
 
        LyXTextClass const & tclass =
@@ -1626,8 +1625,9 @@ WordLangTuple const LyXText::selectNextWordToSpellcheck(float & value)
                                return word;
                        cursor.par(cursor.par() + 1);
                        cursor.pos(0);
-               } else
-                               cursor.pos(cursor.pos() + 1);
+               } else {
+                       cursor.pos(cursor.pos() + 1);
+               }
        }
        int const tmppar = cursor.par();
 
@@ -2125,11 +2125,15 @@ int LyXText::parOffset(ParagraphList::iterator pit) const
 }
 
 
-int LyXText::redoParagraphInternal(ParagraphList::iterator pit)
+void LyXText::redoParagraphInternal(ParagraphList::iterator pit)
 {
        // remove rows of paragraph, keep track of height changes
        height -= pit->height;
+
+       // clear old data
        pit->rows.clear();
+       pit->height = 0;
+       pit->width = 0;
 
        // redo insets
        InsetList::iterator ii = pit->insetlist.begin();
@@ -2141,17 +2145,14 @@ int LyXText::redoParagraphInternal(ParagraphList::iterator pit)
        }
 
        // rebreak the paragraph
-       int par_width = 0;
        int const ww = workWidth();
-       pit->height = 0;
-
        for (pos_type z = 0; z < pit->size() + 1; ) {
                Row row(z);
                z = rowBreakPoint(pit, row) + 1;
                row.endpos(z);
                int const f = fill(pit, row, ww);
-               int const w = ww - f;
-               par_width = std::max(par_width, w);
+               unsigned int const w = ww - f;
+               pit->width = std::max(pit->width, w);
                row.fill(f);
                row.width(w);
                prepareToPrint(pit, row);
@@ -2161,22 +2162,16 @@ int LyXText::redoParagraphInternal(ParagraphList::iterator pit)
                pit->rows.push_back(row);
        }
        height += pit->height;
-
        //lyxerr << "redoParagraph: " << pit->rows.size() << " rows\n";
-       return par_width;
 }
 
 
-int LyXText::redoParagraphs(ParagraphList::iterator start,
+void LyXText::redoParagraphs(ParagraphList::iterator pit,
   ParagraphList::iterator end)
 {
-       int pars_width = 0;
-       for ( ; start != end; ++start) {
-               int par_width = redoParagraphInternal(start);
-               pars_width = std::max(par_width, pars_width);
-       }
+       for ( ; pit != end; ++pit)
+               redoParagraphInternal(pit);
        updateRowPositions();
-       return pars_width;
 }
 
 
@@ -2202,14 +2197,30 @@ void LyXText::metrics(MetricsInfo & mi, Dimension & dim)
        //BOOST_ASSERT(mi.base.textwidth);
 
        // rebuild row cache
-       width  = 0;
-       ///height = 0;
-
        //anchor_y_ = 0;
-       width = redoParagraphs(ownerParagraphs().begin(), ownerParagraphs().end());
+       redoParagraphs(ownerParagraphs().begin(), ownerParagraphs().end());
+
+       width = 0;
+       ParagraphList::iterator pit = ownerParagraphs().begin();
+       ParagraphList::iterator end = ownerParagraphs().end();
+       for ( ; pit != end; ++pit) 
+               width = std::max(pit->width, width);
 
        // final dimension
        dim.asc = firstRow()->ascent_of_text();
        dim.des = height - dim.asc;
        dim.wid = std::max(mi.base.textwidth, int(width));
 }
+
+
+bool LyXText::isLastRow(ParagraphList::iterator pit, Row const & row) const
+{
+       return row.endpos() >= pit->size()
+              && boost::next(pit) == ownerParagraphs().end();
+}
+
+
+bool LyXText::isFirstRow(ParagraphList::iterator pit, Row const & row) const
+{
+       return row.pos() == 0 && pit == ownerParagraphs().begin();
+}
index e01daf85f7867446844e4b6bf8b3c3e322e4457d..f9080e0143187bc4f0109cf78f2cf9e27e385a7a 100644 (file)
--- a/src/toc.C
+++ b/src/toc.C
@@ -69,7 +69,6 @@ TocList const getTocList(Buffer const & buf)
        TocList toclist;
 
        BufferParams const & bufparams = buf.params();
-       LyXTextClass const & textclass = bufparams.getLyXTextClass();
 
        ParConstIterator pit = buf.par_iterator_begin();
        ParConstIterator end = buf.par_iterator_end();