git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6669 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2003-04-01 10:10:28 +00:00
parent 2c64f8a503
commit 82d3d4dff6
13 changed files with 175 additions and 136 deletions

View File

@ -1,3 +1,29 @@
2003-04-01 Lars Gullik Bjønnes <larsbj@gullik.net>
* 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 <leeming@lyx.org>
* bufferview_funcs.C (string2font): rewrite so that it no longer uses

View File

@ -1,3 +1,9 @@
2003-04-01 Lars Gullik Bjønnes <larsbj@gullik.net>
* screen.C (topCursorVisible): adjust
(drawFromTo): adjust
(drawOneRow): adjust
2003-03-31 John Levon <levon@movementarian.org>
* lyx_gui.h: add new font name helpers, move

View File

@ -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());
}

View File

@ -1,5 +1,8 @@
2003-04-01 Lars Gullik Bjønnes <larsbj@gullik.net>
* insettext.C (draw): adjust
(crow): return a RowList::iterator not a Row*
* insetminipage.C (localDispatch): adjust
* insetert.C (localDispatch): adjust

View File

@ -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();
}

View File

@ -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;
///

View File

@ -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_;
}

View File

@ -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

View File

@ -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 *>(&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 *>(&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();
}

View File

@ -14,12 +14,12 @@
#include <config.h>
#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_;

View File

@ -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 {

View File

@ -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

View File

@ -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