More debug mode work.

- some cursor movement
- selection


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8122 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2003-11-22 15:51:12 +00:00
parent 7dd8cd705b
commit 6832f63f96
3 changed files with 24 additions and 12 deletions

View File

@ -1,5 +1,12 @@
2003-11-22 Lars Gullik Bjonnes <larsbj@gullik.net>
* text3.C (cursorPrevious): make sure that we do not compare
iterators form different containers.
(cursorNext): ditto
* rowpainter.C (paintSelection): make sure that we do not compare
iterators from different containers.
* text3.C (dispatch): [PRIOR] make sure that we do not compare
iterators from different ParagraphList containers.
[NEXT] ditto

View File

@ -389,12 +389,13 @@ void RowPainter::paintSelection()
int const h = row_.height();
int const row_y = pit_->y + row_.y_offset();
if (text_.bidi.same_direction()) {
int x;
int y = yo_;
int w;
if (startrow == rit_ && endrow == rit_) {
if ((startpit == pit_ && startrow == rit_) &&
(endpit == pit_ && endrow == rit_)) {
if (startx < endx) {
x = int(xo_) + startx;
w = endx - startx;
@ -403,22 +404,23 @@ void RowPainter::paintSelection()
w = startx - endx;
}
pain_.fillRectangle(x, y, w, h, LColor::selection);
} else if (startrow == rit_) {
} else if (startpit == pit_ && 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 == rit_) {
} else if (endpit == pit_ && 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);
} else if (row_y > starty && row_y < endy) {
pain_.fillRectangle(int(xo_), y, width_, h, LColor::selection);
}
return;
}
if (startrow != rit_ && endrow != rit_) {
if ((startpit != pit_ && startrow != rit_) &&
(endpit != pit_ && endrow != rit_)) {
if (y_ > starty && y_ < endy) {
int w = width_;
pain_.fillRectangle(int(xo_), yo_, w, h, LColor::selection);
@ -426,7 +428,7 @@ void RowPainter::paintSelection()
return;
}
if ((startrow != rit_ && !is_rtl) || (endrow != rit_ && is_rtl))
if ((startpit != pit_ && startrow != rit_ && !is_rtl) || (endpit != pit_ && endrow != rit_ && is_rtl))
pain_.fillRectangle(int(xo_), yo_,
int(x_), h, LColor::selection);
@ -459,15 +461,16 @@ void RowPainter::paintSelection()
tmpx += separator_;
}
if ((startrow != rit_ || text_.selection.start.pos() <= pos) &&
(endrow != rit_ || pos < text_.selection.end.pos())) {
if (((startpit != pit_ && startrow != rit_) || text_.selection.start.pos() <= pos) &&
((endpit != pit_ && 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), h, LColor::selection);
}
}
if ((startrow != rit_ && is_rtl) || (endrow != rit_ && !is_rtl)) {
if ((startpit != pit_ && startrow != rit_ && is_rtl) ||
(endpit != pit_ && endrow != rit_ && !is_rtl)) {
pain_.fillRectangle(int(xo_ + tmpx),
yo_, int(bv_.workWidth() - tmpx), h, LColor::selection);
}

View File

@ -365,12 +365,13 @@ void LyXText::cursorPrevious()
{
RowList::iterator crit = cursorRow();
ParagraphList::iterator cpar = cursorPar();
int x = bv()->x_target() - xo_;
int y = bv()->top_y() - yo_;
setCursorFromCoordinates(x, y);
if (crit == cursorRow()) {
if (cpar == cursorPar() && crit == cursorRow()) {
// we have a row which is taller than the workarea. The
// simplest solution is to move to the previous row instead.
cursorUp(true);
@ -384,12 +385,13 @@ void LyXText::cursorPrevious()
void LyXText::cursorNext()
{
RowList::iterator crit = cursorRow();
ParagraphList::iterator cpar = cursorPar();
int x = bv()->x_target() - xo_;
int y = bv()->top_y() + bv()->workHeight() - yo_;
setCursorFromCoordinates(x, y);
if (crit == cursorRow()) {
if (cpar == cursorPar() && crit == cursorRow()) {
// we have a row which is taller than the workarea. The
// simplest solution is to move to the next row instead.
cursorDown(true);