From 82d3d4dff699f069c24f6e804427dd80361ee295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Gullik=20Bj=C3=B8nnes?= Date: Tue, 1 Apr 2003 10:10:28 +0000 Subject: [PATCH] rowlist9 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6669 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 26 ++++++++ src/frontends/ChangeLog | 6 ++ src/frontends/screen.C | 11 ++-- src/insets/ChangeLog | 3 + src/insets/insettext.C | 4 +- src/insets/insettext.h | 3 +- src/lyxcursor.C | 8 +-- src/lyxcursor.h | 14 ++--- src/rowpainter.C | 135 +++++++++++++++++++--------------------- src/rowpainter.h | 6 +- src/text.C | 71 +++++++++++---------- src/text2.C | 18 +++--- src/text3.C | 6 +- 13 files changed, 175 insertions(+), 136 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 44cd8c83df..19ff5abe71 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,29 @@ +2003-04-01 Lars Gullik Bjønnes + + * text3.C (cursorPrevious): adjust + (cursorNext): adjust + (dispatch): adjust + + * text2.C (redoHeightOfParagraph): adjust + (redoDrawingOfParagraph): adjust + (setCursor): adjust + + * text.C (breakParagraph): adjust + (insertChar): adjust + (backspace): adjust + + * rowpainter.C (RowPainter): adjust + (leftMargin): simplify and adjust + (most rowpainter functions): adjust. + + * rowpainter.h: store the row as RowList::iterator not as Row* + + * lyxcursor.C (row): taka RowList::iterator as arg + (irow): ditto + + * lyxcursor.h: make the LyXCursor store RowList::iterators instead + of Row*. + 2003-04-01 Angus Leeming * bufferview_funcs.C (string2font): rewrite so that it no longer uses diff --git a/src/frontends/ChangeLog b/src/frontends/ChangeLog index 1a4fc93f5f..fd847b81e5 100644 --- a/src/frontends/ChangeLog +++ b/src/frontends/ChangeLog @@ -1,3 +1,9 @@ +2003-04-01 Lars Gullik Bjønnes + + * screen.C (topCursorVisible): adjust + (drawFromTo): adjust + (drawOneRow): adjust + 2003-03-31 John Levon * lyx_gui.h: add new font name helpers, move diff --git a/src/frontends/screen.C b/src/frontends/screen.C index 44784b7918..a9f4e4ef5e 100644 --- a/src/frontends/screen.C +++ b/src/frontends/screen.C @@ -195,12 +195,14 @@ unsigned int LyXScreen::topCursorVisible(LyXCursor const & cursor, int top_y) int const vheight = workarea().workHeight(); int newtop = top_y; - Row * row = cursor.row(); + RowList::iterator row = cursor.row(); +#warning SUPER HACK DISABLED (Lgb) +#if 0 // Is this a hack? Yes, probably... (Lgb) if (!row) return max(newtop, 0); - +#endif if (cursor.y() - row->baseline() + row->height() - top_y >= vheight) { if (row->height() < vheight && row->height() > vheight / 4) { @@ -421,9 +423,8 @@ void LyXScreen::drawFromTo(LyXText * text, BufferView * bv, int y = y_text - text->top_y(); // y1 is now the real beginning of row on the screen - while (row != end && y < y2) { - RowPainter rp(*bv, *text, *row); + RowPainter rp(*bv, *text, row); rp.paint(y + yo, xo, y + text->top_y()); y += row->height(); ++row; @@ -449,6 +450,6 @@ void LyXScreen::drawOneRow(LyXText * text, BufferView * bv, Row * row, if (y - row->height() > workarea().workHeight()) return; - RowPainter rp(*bv, *text, *row); + RowPainter rp(*bv, *text, row); rp.paint(y, xo, y + text->top_y()); } diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 28a3517dc3..4c7fe48c8f 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,5 +1,8 @@ 2003-04-01 Lars Gullik Bjønnes + * insettext.C (draw): adjust + (crow): return a RowList::iterator not a Row* + * insetminipage.C (localDispatch): adjust * insetert.C (localDispatch): adjust diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 424c707a10..f91e4f5c68 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -420,7 +420,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, int yf = y_offset + first; y = 0; while ((rowit != end) && (yf < ph)) { - RowPainter rp(*bv, *lt, *rowit); + RowPainter rp(*bv, *lt, rowit); rp.paint(y + y_offset + first, int(x), y + lt->top_y()); y += rowit->height(); yf += rowit->height(); @@ -2142,7 +2142,7 @@ bool InsetText::cboundary(BufferView * bv) const } -Row * InsetText::crow(BufferView * bv) const +RowList::iterator InsetText::crow(BufferView * bv) const { return getLyXText(bv)->cursor.row(); } diff --git a/src/insets/insettext.h b/src/insets/insettext.h index 68150a5cda..4baca69ed5 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -17,6 +17,7 @@ #include "LString.h" #include "LColor.h" #include "ParagraphList.h" +#include "RowList.h" #include "support/types.h" @@ -340,7 +341,7 @@ private: /// bool cboundary(BufferView *) const; /// - Row * crow(BufferView *) const; + RowList::iterator crow(BufferView *) const; /// void drawFrame(Painter &, int x) const; /// diff --git a/src/lyxcursor.C b/src/lyxcursor.C index 5e2d020102..3b7ba749e1 100644 --- a/src/lyxcursor.C +++ b/src/lyxcursor.C @@ -111,25 +111,25 @@ int LyXCursor::iy() const } -void LyXCursor::row(Row * r) +void LyXCursor::row(RowList::iterator r) { row_ = r; } -Row * LyXCursor::row() const +RowList::iterator LyXCursor::row() const { return row_; } -void LyXCursor::irow(Row * r) +void LyXCursor::irow(RowList::iterator r) { irow_ = r; } -Row * LyXCursor::irow() const +RowList::iterator LyXCursor::irow() const { return irow_; } diff --git a/src/lyxcursor.h b/src/lyxcursor.h index 1a0dc52538..ad8df3dda8 100644 --- a/src/lyxcursor.h +++ b/src/lyxcursor.h @@ -10,10 +10,10 @@ #ifndef LYXCURSOR_H #define LYXCURSOR_H +#include "RowList.h" #include "support/types.h" class Paragraph; -class Row; /** * The cursor class describes the position of a cursor within a document. @@ -81,11 +81,11 @@ public: */ int iy() const; /// set the row of the paragraph the cursor is in - void row(Row * r); + void row(RowList::iterator r); /// return the row of the paragraph this cursor is in - Row * row() const; + RowList::iterator row() const; /// set the stored next row - void irow(Row * r); + void irow(RowList::iterator r); /** * Return the next row, when this * cursor is at the end of the previous row, for insets that take @@ -93,7 +93,7 @@ public: * * FIXME: explain why we need this ? especially for y... */ - Row * irow() const; + RowList::iterator irow() const; private: /// The paragraph the cursor is in. Paragraph * par_; @@ -126,9 +126,9 @@ private: /// the stored next-row y position int iy_; /// the containing row - Row * row_; + RowList::iterator row_; /// the containing row for the next line - Row * irow_; + RowList::iterator irow_; }; /// these three dictate the others diff --git a/src/rowpainter.C b/src/rowpainter.C index faf9eb1d16..11072c727c 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -53,8 +53,8 @@ BufferView * perv(BufferView const & bv) } // namespace anon -RowPainter::RowPainter(BufferView const & bv, LyXText const & text, Row const & row) - : bv_(bv), pain_(bv_.painter()), text_(text), row_(row), par_(*row.par()) +RowPainter::RowPainter(BufferView const & bv, LyXText const & text, RowList::iterator rit) + : bv_(bv), pain_(bv_.painter()), text_(text), row_(rit), par_(*rit->par()) { } @@ -97,8 +97,7 @@ char const RowPainter::transformChar(char c, lyx::pos_type pos) const int RowPainter::leftMargin() const { - Row * row(const_cast(&row_)); - return text_.leftMargin(row); + return text_.leftMargin(row_); } @@ -113,7 +112,7 @@ void RowPainter::paintInset(pos_type const pos) #warning inset->update FIXME inset->update(perv(bv_), false); - inset->draw(perv(bv_), font, yo_ + row_.baseline(), x_); + inset->draw(perv(bv_), font, yo_ + row_->baseline(), x_); } @@ -148,7 +147,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); } @@ -179,14 +178,14 @@ void RowPainter::paintArabicComposeChar(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); } void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic) { pos_type pos = text_.vis2log(vpos); - pos_type const last = row_.lastPrintablePos(); + pos_type const last = row_->lastPrintablePos(); LyXFont orig_font(getFont(pos)); // first character @@ -236,7 +235,7 @@ void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic) } // Draw text and set the new x position - 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); } @@ -250,7 +249,7 @@ void RowPainter::paintForeignMark(float const 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); } @@ -302,7 +301,7 @@ void RowPainter::paintBackground() { int const x = 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()); } @@ -316,19 +315,16 @@ void RowPainter::paintSelection() int const endx = text_.selection.end.x(); int const starty = text_.selection.start.y(); int const endy = text_.selection.end.y(); - Row const * startrow = text_.selection.start.row(); - Row const * endrow = text_.selection.end.row(); - - // Bleh. - Row const * row = &row_; + RowList::iterator startrow = text_.selection.start.row(); + RowList::iterator endrow = text_.selection.end.row(); if (text_.bidi_same_direction) { int x; int y = yo_; int w; - int h = row_.height(); + int h = row_->height(); - if (startrow == row && endrow == row) { + if (startrow == row_ && endrow == row_) { if (startx < endx) { x = xo_ + startx; w = endx - startx; @@ -338,11 +334,11 @@ void RowPainter::paintSelection() w = startx - endx; pain_.fillRectangle(x, y, w, h, LColor::selection); } - } else if (startrow == row) { + } else if (startrow == row_) { int const x = (is_rtl) ? xo_ : (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 == row_) { int const x = (is_rtl) ? (xo_ + endx) : xo_; int const w = (is_rtl) ? (width_ - endx) : endx; pain_.fillRectangle(x, y, w, h, LColor::selection); @@ -350,23 +346,23 @@ void RowPainter::paintSelection() pain_.fillRectangle(xo_, y, width_, h, LColor::selection); } return; - } else if (startrow != row && endrow != row) { + } else if (startrow != row_ && endrow != row_) { if (y_ > starty && y_ < endy) { int w = width_; - int h = row_.height(); + int h = row_->height(); pain_.fillRectangle(xo_, yo_, w, h, LColor::selection); } return; } - if ((startrow != row && !is_rtl) || (endrow != row && is_rtl)) - pain_.fillRectangle(xo_, yo_, int(x_), row_.height(), LColor::selection); + if ((startrow != row_ && !is_rtl) || (endrow != row_ && is_rtl)) + pain_.fillRectangle(xo_, yo_, int(x_), row_->height(), LColor::selection); pos_type const body_pos = par_.beginningOfBody(); - pos_type const last = row_.lastPrintablePos(); + pos_type const last = row_->lastPrintablePos(); float 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); float const old_tmpx = tmpx; if (body_pos > 0 && pos == body_pos - 1) { @@ -379,7 +375,7 @@ void RowPainter::paintSelection() tmpx -= singleWidth(body_pos - 1); } - if (row_.hfillExpansion(pos)) { + if (row_->hfillExpansion(pos)) { tmpx += singleWidth(pos); if (pos >= body_pos) tmpx += hfill_; @@ -395,34 +391,34 @@ void RowPainter::paintSelection() tmpx += singleWidth(pos); } - if ((startrow != row || text_.selection.start.pos() <= pos) && - (endrow != row || pos < text_.selection.end.pos())) { + if ((startrow != row_ || text_.selection.start.pos() <= pos) && + (endrow != row_ || 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 != row_ && is_rtl) || (endrow != row_ && !is_rtl)) { pain_.fillRectangle(xo_ + int(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 = row_.lastPrintablePos(); + pos_type const start = row_->pos(); + pos_type const end = row_->lastPrintablePos(); if (!par_.isChanged(start, end)) return; - int const height = (row_.next() - ? row_.height() + row_.next()->top_of_text() - : row_.baseline()); + int const height = (row_->next() + ? row_->height() + row_->next()->top_of_text() + : row_->baseline()); pain_.fillRectangle(4, yo_, 5, height, LColor::changebar); } @@ -441,8 +437,8 @@ void RowPainter::paintAppendix() if (par_.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); } @@ -454,18 +450,18 @@ void RowPainter::paintDepthBar() return; Paragraph::depth_type prev_depth = 0; - if (row_.previous()) - prev_depth = row_.previous()->par()->getDepth(); + if (row_->previous()) + prev_depth = row_->previous()->par()->getDepth(); Paragraph::depth_type next_depth = 0; - if (row_.next()) - next_depth = row_.next()->par()->getDepth(); + if (row_->next()) + next_depth = row_->next()->par()->getDepth(); for (Paragraph::depth_type i = 1; i <= depth; ++i) { int x = (PAPER_MARGIN / 5) * i + xo_; // 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); @@ -624,7 +620,7 @@ void RowPainter::paintFirst() } // the top margin - if (!row_.previous() && !text_.isInInset()) + if (!row_->previous() && !text_.isInInset()) y_top += PAPER_MARGIN; // draw a top pagebreak @@ -711,8 +707,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 { @@ -724,7 +720,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); } } @@ -751,14 +747,14 @@ void RowPainter::paintFirst() float x = x_; if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) { x = ((is_rtl ? leftMargin() : x_) - + ww - text_.rightMargin(*bv_.buffer(), row_)) / 2; + + ww - text_.rightMargin(*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, + pain_.text(int(x), yo_ + row_->baseline() + - row_->ascent_of_text() - maxdesc, str, font); } } @@ -768,10 +764,10 @@ void RowPainter::paintFirst() void RowPainter::paintLast() { ParagraphParameters const & parparams = par_.params(); - int y_bottom = row_.height() - 1; + int y_bottom = row_->height() - 1; // the bottom margin - if (!row_.next() && !text_.isInInset()) + if (!row_->next() && !text_.isInInset()) y_bottom -= PAPER_MARGIN; int const ww = bv_.workWidth(); @@ -814,11 +810,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); @@ -838,8 +834,8 @@ void RowPainter::paintLast() string const & str = par_.layout()->endlabelstring(); int const x = is_rtl ? int(x_) - font_metrics::width(str, font) - : ww - text_.rightMargin(*bv_.buffer(), row_) - row_.fill(); - pain_.text(x, yo_ + row_.baseline(), str, font); + : ww - text_.rightMargin(*bv_.buffer(), *row_) - row_->fill(); + pain_.text(x, yo_ + row_->baseline(), str, font); break; } case END_LABEL_NO_LABEL: @@ -850,7 +846,7 @@ void RowPainter::paintLast() void RowPainter::paintText() { - pos_type const last = row_.lastPrintablePos(); + pos_type const last = row_->lastPrintablePos(); pos_type body_pos = par_.beginningOfBody(); if (body_pos > 0 && (body_pos - 1 > last || @@ -864,7 +860,7 @@ void RowPainter::paintText() bool is_struckout = false; float last_strikeout_x = 0.0; - pos_type vpos = row_.pos(); + pos_type vpos = row_->pos(); while (vpos <= last) { if (x_ > bv_.workWidth()) break; @@ -894,8 +890,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(int(last_strikeout_x), middle, int(x_), middle, LColor::strikeout, Painter::line_solid, Painter::line_thin); running_strikeout = false; @@ -912,13 +908,13 @@ void RowPainter::paintText() if (par_.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 (row_.hfillExpansion(pos)) { + if (row_->hfillExpansion(pos)) { int const y2 = (y0 + y1) / 2; if (pos >= body_pos) { @@ -952,8 +948,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(int(last_strikeout_x), middle, int(x_), middle, LColor::strikeout, Painter::line_solid, Painter::line_thin); running_strikeout = false; @@ -972,8 +968,7 @@ void RowPainter::paint(int y_offset, int x_offset, int y) // FIXME: must be a cleaner way here. Aren't these calculations // belonging to row metrics ? - Row * row(const_cast(&row_)); - text_.prepareToPrint(row, x_, separator_, hfill_, label_hfill_); + text_.prepareToPrint(row_, x_, separator_, hfill_, label_hfill_); // FIXME: what is this fixing ? if (text_.isInInset() && (x_ < 0)) @@ -999,11 +994,11 @@ void RowPainter::paint(int y_offset, int x_offset, int y) // changebar paintChangeBar(); - if (row_.isParStart()) { + if (row_->isParStart()) { paintFirst(); } - if (row_.isParEnd()) { + if (row_->isParEnd()) { paintLast(); } diff --git a/src/rowpainter.h b/src/rowpainter.h index 6711d57c6e..efbd99b547 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -14,12 +14,12 @@ #include +#include "RowList.h" #include "LString.h" #include "support/types.h" class LyXText; class BufferView; -class Row; class Paragraph; class Painter; class LyXFont; @@ -31,7 +31,7 @@ class VSpace; class RowPainter { public: /// initialise painter - RowPainter(BufferView const & bv, LyXText const & text, Row const & row); + RowPainter(BufferView const & bv, LyXText const & text, RowList::iterator rit); /// paint the row. void paint(int y_offset, int x_offset, int y); @@ -81,7 +81,7 @@ private: LyXText const & text_; /// The row to paint - Row const & row_; + RowList::iterator row_; /// Row's paragraph Paragraph const & par_; diff --git a/src/text.C b/src/text.C index 64072bc9e9..f8b12daf21 100644 --- a/src/text.C +++ b/src/text.C @@ -1504,9 +1504,9 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout) // Do not forget the special right address boxes if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) { - Row * r = cursor.row(); - while (r->previous() && r->previous()->par() == r->par()) { - r = r->previous(); + RowList::iterator r = cursor.row(); + while (r != rows().begin() && boost::prior(r)->par() == r->par()) { + --r; y -= r->height(); } } @@ -1668,7 +1668,7 @@ void LyXText::insertChar(char c) } // get the cursor row fist - Row * row = cursor.row(); + RowList::iterator row = cursor.row(); int y = cursor.y() - row->baseline(); if (c != Paragraph::META_INSET) { // Here case LyXText::InsertInset already insertet the character @@ -1678,9 +1678,10 @@ void LyXText::insertChar(char c) if (!jumped_over_space) { // refresh the positions - Row * tmprow = row; - while (tmprow->next() && tmprow->next()->par() == row->par()) { - tmprow = tmprow->next(); + RowList::iterator tmprow = row; + while (boost::next(tmprow) != rows().end() && + boost::next(tmprow)->par() == row->par()) { + ++tmprow; tmprow->pos(tmprow->pos() + 1); } } @@ -2524,7 +2525,7 @@ void LyXText::backspace() } Paragraph * tmppar = cursor.par(); - Row * tmprow = cursor.row(); + RowList::iterator tmprow = cursor.row(); // We used to do cursorLeftIntern() here, but it is // not a good idea since it triggers the auto-delete @@ -2606,7 +2607,7 @@ void LyXText::backspace() } } - Row * row = cursor.row(); + RowList::iterator row = cursor.row(); int y = cursor.y() - row->baseline(); pos_type z; // remember that a space at the end of a row doesnt count @@ -2623,9 +2624,10 @@ void LyXText::backspace() if (cursor.pos() && cursor.par()->isNewline(cursor.pos())) { cursor.par()->erase(cursor.pos()); // refresh the positions - Row * tmprow = row; - while (tmprow->next() && tmprow->next()->par() == row->par()) { - tmprow = tmprow->next(); + RowList::iterator tmprow = row; + while (boost::next(tmprow) != rows().end() && + boost::next(tmprow)->par() == row->par()) { + ++tmprow; tmprow->pos(tmprow->pos() - 1); } if (cursor.par()->isLineSeparator(cursor.pos() - 1)) @@ -2638,8 +2640,9 @@ void LyXText::backspace() cursor.pos(), current_font); // refresh the positions tmprow = row; - while (tmprow->next() && tmprow->next()->par() == row->par()) { - tmprow = tmprow->next(); + while (boost::next(tmprow) != rows().end() && + boost::next(tmprow)->par() == row->par()) { + ++tmprow; tmprow->pos(tmprow->pos() + 1); } } @@ -2647,10 +2650,10 @@ void LyXText::backspace() cursor.par()->erase(cursor.pos()); // refresh the positions - Row * tmprow = row; - while (tmprow->next() - && tmprow->next()->par() == row->par()) { - tmprow = tmprow->next(); + RowList::iterator tmprow = row; + while (boost::next(tmprow) != rows().end() && + boost::next(tmprow)->par() == row->par()) { + ++tmprow; tmprow->pos(tmprow->pos() - 1); } @@ -2662,21 +2665,21 @@ void LyXText::backspace() cursor.par()->erase(cursor.pos()); // refresh the positions tmprow = row; - while (tmprow->next() && - tmprow->next()->par() == row->par()) { - tmprow = tmprow->next(); + while (boost::next(tmprow) != rows().end() && + boost::next(tmprow)->par() == row->par()) { + ++tmprow; tmprow->pos(tmprow->pos() - 1); } } } // is there a break one row above - if (row->previous() && row->previous()->par() == row->par()) { - z = rowBreakPoint(*row->previous()); + if (row != rows().begin() && boost::prior(row)->par() == row->par()) { + z = rowBreakPoint(*boost::prior(row)); if (z >= row->pos()) { row->pos(z + 1); - Row * tmprow = row->previous(); + RowList::iterator tmprow = boost::prior(row); // maybe the current row is now empty if (row->pos() >= row->par()->size()) { @@ -2685,8 +2688,9 @@ void LyXText::backspace() need_break_row = rows().end(); } else { breakAgainOneRow(row); - if (row->next() && row->next()->par() == row->par()) - need_break_row = row->next(); + if (boost::next(row) != rows().end() && + boost::next(row)->par() == row->par()) + need_break_row = boost::next(row); else need_break_row = rows().end(); } @@ -2712,7 +2716,8 @@ void LyXText::backspace() } // break the cursor row again - if (row->next() && row->next()->par() == row->par() && + if (boost::next(row) != rows().end() && + boost::next(row)->par() == row->par() && (row->lastPos() == row->par()->size() - 1 || rowBreakPoint(*row) != row->lastPos())) { @@ -2721,22 +2726,24 @@ void LyXText::backspace() // is to long to be broken. Well, I don t care this // hack ;-) if (row->lastPos() == row->par()->size() - 1) - removeRow(row->next()); + removeRow(boost::next(row)); postPaint(y); breakAgainOneRow(row); // will the cursor be in another row now? - if (row->next() && row->next()->par() == row->par() && + if (boost::next(row) != rows().end() && + boost::next(row)->par() == row->par() && row->lastPos() <= cursor.pos()) { - row = row->next(); + ++row; breakAgainOneRow(row); } setCursor(cursor.par(), cursor.pos(), false, cursor.boundary()); - if (row->next() && row->next()->par() == row->par()) - need_break_row = row->next(); + if (boost::next(row) != rows().end() && + boost::next(row)->par() == row->par()) + need_break_row = boost::next(row); else need_break_row = rows().end(); } else { diff --git a/src/text2.C b/src/text2.C index 00d102baab..0f30089627 100644 --- a/src/text2.C +++ b/src/text2.C @@ -637,14 +637,14 @@ void LyXText::setFont(LyXFont const & font, bool toggleall) void LyXText::redoHeightOfParagraph() { - Row * tmprow = cursor.row(); + RowList::iterator tmprow = cursor.row(); int y = cursor.y() - tmprow->baseline(); setHeightOfRow(tmprow); - while (tmprow->previous() - && tmprow->previous()->par() == tmprow->par()) { - tmprow = tmprow->previous(); + while (tmprow != rows().begin() + && boost::prior(tmprow)->par() == tmprow->par()) { + --tmprow; y -= tmprow->height(); setHeightOfRow(tmprow); } @@ -657,14 +657,14 @@ void LyXText::redoHeightOfParagraph() void LyXText::redoDrawingOfParagraph(LyXCursor const & cur) { - Row * tmprow = cur.row(); + RowList::iterator tmprow = cur.row(); int y = cur.y() - tmprow->baseline(); setHeightOfRow(tmprow); - while (tmprow->previous() - && tmprow->previous()->par() == tmprow->par()) { - tmprow = tmprow->previous(); + while (tmprow != rows().begin() + && boost::prior(tmprow)->par() == tmprow->par()) { + --tmprow; y -= tmprow->height(); } @@ -1677,7 +1677,7 @@ void LyXText::setCursor(LyXCursor & cur, Paragraph * par, RowList::iterator beg = rows().begin(); RowList::iterator old_row = row; - cur.irow(&*row); + cur.irow(row); // if we are before the first char of this row and are still in the // same paragraph and there is a previous row then put the cursor on // the end of the previous row diff --git a/src/text3.C b/src/text3.C index 12f940c04e..d5c5d595af 100644 --- a/src/text3.C +++ b/src/text3.C @@ -249,7 +249,7 @@ void LyXText::cursorPrevious() return; } - Row * cursorrow = cursor.row(); + RowList::iterator cursorrow = cursor.row(); setCursorFromCoordinates(cursor.x_fix(), y); finishUndo(); @@ -314,7 +314,7 @@ void LyXText::cursorNext() getRowNearY(y); - Row * cursorrow = cursor.row(); + RowList::iterator cursorrow = cursor.row(); setCursorFromCoordinates(cursor.x_fix(), y); // + bv->workHeight()); finishUndo(); @@ -1308,7 +1308,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd) bv->screen().hideCursor(); - Row * cursorrow = bv->text->cursor.row(); + RowList::iterator cursorrow = bv->text->cursor.row(); bv->text->setCursorFromCoordinates(cmd.x, cmd.y + bv->text->top_y()); #if 0 // sorry for this but I have a strange error that the y value jumps at