mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +00:00
rowlist9
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6669 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
2c64f8a503
commit
82d3d4dff6
@ -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
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
///
|
||||
|
@ -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_;
|
||||
}
|
||||
|
@ -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
|
||||
|
135
src/rowpainter.C
135
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 *>(&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();
|
||||
}
|
||||
|
||||
|
@ -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_;
|
||||
|
71
src/text.C
71
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 {
|
||||
|
18
src/text2.C
18
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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user