set fill in fill(...) istead of returning it.

use isLastRow()


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7974 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-10-24 07:59:04 +00:00
parent fe1d419981
commit 70f983b97f
5 changed files with 15 additions and 33 deletions

View File

@ -1022,14 +1022,16 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
owner->view_state_changed();
}
goto exit_with_message;
case LFUN_DOWN:
if (view()->text->cursorRow() != view()->text->lastRow())
case LFUN_DOWN: {
LyXText * text = view()->text;
if (text->isLastRow(text->cursorPar(), *text->cursorRow()))
view()->text->cursorDown(view());
else
view()->text->cursorRight(view());
moveCursorUpdate();
owner->view_state_changed();
goto exit_with_message;
}
default:
break;
}

View File

@ -415,8 +415,8 @@ private:
/// for example, the pos after which isNewLine(pos) == true
void rowBreakPoint(ParagraphList::iterator pit, Row & row) const;
/// returns the minimum space a row needs on the screen in pixel
int fill(ParagraphList::iterator pit, Row & row, int workwidth) const;
/// sets row.witdh to the minimum space a row needs on the screen in pixel
void fill(ParagraphList::iterator pit, Row & row, int workwidth) const;
/**
* returns the minimum space a manual label needs on the

View File

@ -1055,7 +1055,6 @@ int paintRows(BufferView const & bv, LyXText const & text,
int xo, int y, int yf, int yo)
{
//lyxerr << " paintRows: rit: " << &*rit << endl;
//const_cast<LyXText&>(text).updateRowPositions();
int const yy = yf - y;
int const y2 = bv.painter().paperHeight();

View File

@ -601,13 +601,8 @@ void LyXText::rowBreakPoint(ParagraphList::iterator pit, Row & row) const
// returns the minimum space a row needs on the screen in pixel
int LyXText::fill(ParagraphList::iterator pit, Row & row, int paper_width) const
void LyXText::fill(ParagraphList::iterator pit, Row & row, int paper_width) const
{
if (paper_width < 0) {
lyxerr << "paperwidth < 0: " << paper_width << " Why?" << endl;
return 0;
}
int w;
// get the pure distance
pos_type const last = lastPos(*pit, row);
@ -620,8 +615,9 @@ int LyXText::fill(ParagraphList::iterator pit, Row & row, int paper_width) const
row.fill(0); // the minfill in leftMargin()
w = leftMargin(pit, row);
row.fill(tmpfill);
} else
} else {
w = leftMargin(pit, row);
}
pos_type const body_pos = pit->beginningOfBody();
pos_type i = row.pos();
@ -659,20 +655,8 @@ int LyXText::fill(ParagraphList::iterator pit, Row & row, int paper_width) const
}
int const fill = paper_width - w - rightMargin(*pit, *bv()->buffer(), row);
// If this case happens, it means that our calculation
// of the widths of the chars when we do rowBreakPoint()
// went wrong for some reason. Typically in list bodies.
// Things just about hobble on anyway, though you'll end
// up with a "fill_separator" less than zero, which corresponds
// to inter-word spacing being too small. Hopefully this problem
// will die when the label hacks die.
if (lyxerr.debugging() && fill < 0) {
lyxerr[Debug::GUI] << "Eek, fill() was < 0: " << fill
<< " w " << w << " paper_width " << paper_width
<< " right margin " << rightMargin(*pit, *bv()->buffer(), row) << endl;
}
return fill;
row.fill(fill);
row.width(paper_width - fill);
}
@ -1977,16 +1961,13 @@ void LyXText::redoParagraphInternal(ParagraphList::iterator pit)
Row row(z);
rowBreakPoint(pit, row);
z = row.endpos();
int const f = fill(pit, row, ww);
unsigned int const w = ww - f;
pit->width = std::max(pit->width, w);
row.fill(f);
row.width(w);
fill(pit, row, ww);
prepareToPrint(pit, row);
setHeightOfRow(pit, row);
row.y_offset(pit->height);
pit->height += row.height();
pit->rows.push_back(row);
pit->width = std::max(pit->width, row.width());
pit->height += row.height();
}
height += pit->height;
//lyxerr << "redoParagraph: " << pit->rows.size() << " rows\n";

View File

@ -302,7 +302,7 @@ void LyXText::cursorNext()
int topy = bv_owner->top_y();
RowList::iterator rit = cursorRow();
if (rit == lastRow()) {
if (isLastRow(cursorPar(), *cursorRow())) {
int y = cursor.y() - rit->baseline() + cursorRow()->height();
if (y > topy + bv()->workHeight())
bv_owner->updateScrollbar();