LyXCursor::x_fix -> BufferView::x_target

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8026 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-11-04 07:43:03 +00:00
parent 5adaa51785
commit 49e5945ce4
9 changed files with 57 additions and 46 deletions

View File

@ -56,7 +56,8 @@ extern BufferList bufferlist;
BufferView::BufferView(LyXView * owner, int xpos, int ypos, BufferView::BufferView(LyXView * owner, int xpos, int ypos,
int width, int height) int width, int height)
: pimpl_(new Pimpl(this, owner, xpos, ypos, width, height)) : pimpl_(new Pimpl(this, owner, xpos, ypos, width, height)),
x_target_(0)
{ {
text = 0; text = 0;
} }
@ -580,3 +581,15 @@ int BufferView::workHeight() const
{ {
return pimpl_->workarea().workHeight(); return pimpl_->workarea().workHeight();
} }
void BufferView::x_target(int x)
{
x_target_ = x;
}
int BufferView::x_target() const
{
return x_target_;
}

View File

@ -202,6 +202,11 @@ public:
/// execute the given function /// execute the given function
bool dispatch(FuncRequest const & argument); bool dispatch(FuncRequest const & argument);
/// set target x position of cursor
void BufferView::x_target(int x);
/// return target x position of cursor
int BufferView::x_target() const;
private: private:
/// Set the current locking inset /// Set the current locking inset
void theLockingInset(UpdatableInset * inset); void theLockingInset(UpdatableInset * inset);
@ -210,6 +215,21 @@ private:
friend struct BufferView::Pimpl; friend struct BufferView::Pimpl;
Pimpl * pimpl_; Pimpl * pimpl_;
/**
* The target x position of the cursor. This is used for when
* we have text like :
*
* blah blah blah blah| blah blah blah
* blah blah blah
* blah blah blah blah blah blah
*
* When we move onto row 3, we would like to be vertically aligned
* with where we were in row 1, despite the fact that row 2 is
* shorter than x()
*/
int x_target_;
}; };
#endif // BUFFERVIEW_H #endif // BUFFERVIEW_H

View File

@ -50,6 +50,13 @@
* buffer.h: * buffer.h:
* bufferview_funcs.C: remove getInsetFromId() * bufferview_funcs.C: remove getInsetFromId()
* lyxcursor.[Ch]:
* BufferView.[Ch]: move x_fix from LyXCursor to BufferView
* lyxfunc.C:
* text2.C:
* text3.C: adjust
2003-11-03 Alfredo Braunstein <abraunst@libero.it> 2003-11-03 Alfredo Braunstein <abraunst@libero.it>
* PosIterator.C (distance, advance): new * PosIterator.C (distance, advance): new

View File

@ -512,7 +512,7 @@ void InsetText::lfunMousePress(FuncRequest const & cmd)
text_.setCursorFromCoordinates(cmd.x, cmd.y + dim_.asc); text_.setCursorFromCoordinates(cmd.x, cmd.y + dim_.asc);
// set the selection cursor! // set the selection cursor!
text_.selection.cursor = text_.cursor; text_.selection.cursor = text_.cursor;
text_.cursor.x_fix(text_.cursor.x()); bv->x_target(text_.cursor.x());
text_.clearSelection(); text_.clearSelection();
updateLocal(bv, false); updateLocal(bv, false);
@ -584,7 +584,7 @@ void InsetText::lfunMouseMotion(FuncRequest const & cmd)
BufferView * bv = cmd.view(); BufferView * bv = cmd.view();
LyXCursor cur = text_.cursor; LyXCursor cur = text_.cursor;
text_.setCursorFromCoordinates (cmd.x, cmd.y + dim_.asc); text_.setCursorFromCoordinates (cmd.x, cmd.y + dim_.asc);
text_.cursor.x_fix(text_.cursor.x()); bv->x_target(text_.cursor.x());
if (cur == text_.cursor) if (cur == text_.cursor)
return; return;
text_.setSelection(); text_.setSelection();
@ -632,7 +632,7 @@ InsetText::priv_dispatch(FuncRequest const & cmd,
if (!checkAndActivateInset(bv, cmd.x, tmp_y, mouse_button::none)) { if (!checkAndActivateInset(bv, cmd.x, tmp_y, mouse_button::none)) {
text_.setCursorFromCoordinates(cmd.x, cmd.y + dim_.asc); text_.setCursorFromCoordinates(cmd.x, cmd.y + dim_.asc);
text_.cursor.x(text_.cursor.x()); text_.cursor.x(text_.cursor.x());
text_.cursor.x_fix(text_.cursor.x()); bv->x_target(text_.cursor.x());
} }
} }

View File

@ -17,7 +17,7 @@
LyXCursor::LyXCursor() LyXCursor::LyXCursor()
: par_(-1), pos_(0), boundary_(false), x_(0), x_fix_(0), y_(0) : par_(-1), pos_(0), boundary_(false), x_(0), y_(0)
{} {}
@ -62,24 +62,13 @@ void LyXCursor::x(int n)
x_ = n; x_ = n;
} }
int LyXCursor::x() const int LyXCursor::x() const
{ {
return x_; return x_;
} }
void LyXCursor::x_fix(int i)
{
x_fix_ = i;
}
int LyXCursor::x_fix() const
{
return x_fix_;
}
void LyXCursor::y(int i) void LyXCursor::y(int i)
{ {
y_ = i; y_ = i;

View File

@ -45,21 +45,6 @@ public:
void x(int i); void x(int i);
/// return the x position in pixels /// return the x position in pixels
int x() const; int x() const;
/// set the cached x position
void x_fix(int i);
/**
* Return the cached x position of the cursor. This is used for when
* we have text like :
*
* blah blah blah blah| blah blah blah
* blah blah blah
* blah blah blah blah blah blah
*
* When we move onto row 3, we would like to be vertically aligned
* with where we were in row 1, despite the fact that row 2 is
* shorter than x()
*/
int x_fix() const;
/// set the y position in pixels /// set the y position in pixels
void y(int i); void y(int i);
/// return the y position in pixels /// return the y position in pixels
@ -88,8 +73,6 @@ private:
bool boundary_; bool boundary_;
/// the pixel x position /// the pixel x position
int x_; int x_;
/// the cached x position
int x_fix_;
/// the pixel y position /// the pixel y position
int y_; int y_;
}; };

View File

@ -972,7 +972,7 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
text->cursor.x() + inset_x, text->cursor.x() + inset_x,
text->cursor.y() - text->cursor.y() -
row.baseline() - 1); row.baseline() - 1);
text->cursor.x_fix(text->cursor.x()); view()->x_target(text->cursor.x());
#else #else
text->cursorUp(view()); text->cursorUp(view());
#endif #endif
@ -995,7 +995,7 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
text->cursor.y() - text->cursor.y() -
row.baseline() + row.baseline() +
row.height() + 1); row.height() + 1);
text->cursor.x_fix(text->cursor.x()); view()->x_target(text->cursor.x());
#else #else
text->cursorDown(view()); text->cursorDown(view());
#endif #endif

View File

@ -1339,9 +1339,8 @@ void LyXText::setCursor(LyXCursor & cur, paroffset_type par,
BOOST_ASSERT(false); BOOST_ASSERT(false);
} }
// now get the cursors x position // now get the cursors x position
float x = getCursorX(pit, row, pos, boundary); cur.x(int(getCursorX(pit, row, pos, boundary)));
cur.x(int(x)); bv()->x_target(cur.x());
cur.x_fix(cur.x());
} }
@ -1620,7 +1619,7 @@ void LyXText::cursorUp(bool selecting)
ParagraphList::iterator cpit = cursorPar(); ParagraphList::iterator cpit = cursorPar();
Row const & crow = *cpit->getRow(cursor.pos()); Row const & crow = *cpit->getRow(cursor.pos());
#if 1 #if 1
int x = cursor.x_fix(); int x = bv()->x_target();
int y = cursor.y() - crow.baseline() - 1; int y = cursor.y() - crow.baseline() - 1;
setCursorFromCoordinates(x, y); setCursorFromCoordinates(x, y);
if (!selecting) { if (!selecting) {
@ -1637,7 +1636,7 @@ void LyXText::cursorUp(bool selecting)
#else #else
lyxerr << "cursorUp: y " << cursor.y() << " bl: " << lyxerr << "cursorUp: y " << cursor.y() << " bl: " <<
crow.baseline() << endl; crow.baseline() << endl;
setCursorFromCoordinates(cursor.x_fix(), setCursorFromCoordinates(bv()->x_target(),
cursor.y() - crow.baseline() - 1); cursor.y() - crow.baseline() - 1);
#endif #endif
} }
@ -1648,7 +1647,7 @@ void LyXText::cursorDown(bool selecting)
ParagraphList::iterator cpit = cursorPar(); ParagraphList::iterator cpit = cursorPar();
Row const & crow = *cpit->getRow(cursor.pos()); Row const & crow = *cpit->getRow(cursor.pos());
#if 1 #if 1
int x = cursor.x_fix(); int x = bv()->x_target();
int y = cursor.y() - crow.baseline() + crow.height() + 1; int y = cursor.y() - crow.baseline() + crow.height() + 1;
setCursorFromCoordinates(x, y); setCursorFromCoordinates(x, y);
if (!selecting) { if (!selecting) {
@ -1663,7 +1662,7 @@ void LyXText::cursorDown(bool selecting)
} }
} }
#else #else
setCursorFromCoordinates(cursor.x_fix(), setCursorFromCoordinates(bv()->x_target(),
cursor.y() - crow.baseline() + crow.height() + 1); cursor.y() - crow.baseline() + crow.height() + 1);
#endif #endif
} }

View File

@ -260,7 +260,7 @@ void LyXText::cursorPrevious()
return; return;
} }
setCursorFromCoordinates(cursor.x_fix(), y); setCursorFromCoordinates(bv()->x_target(), y);
finishUndo(); finishUndo();
if (crit == bv()->text->cursorRow()) { if (crit == bv()->text->cursorRow()) {
@ -313,7 +313,7 @@ void LyXText::cursorNext()
Row const & rr = *getRowNearY(y, dummypit); Row const & rr = *getRowNearY(y, dummypit);
y = dummypit->y + rr.y_offset(); y = dummypit->y + rr.y_offset();
setCursorFromCoordinates(cursor.x_fix(), y); setCursorFromCoordinates(bv()->x_target(), y);
// + bv->workHeight()); // + bv->workHeight());
finishUndo(); finishUndo();
@ -1326,7 +1326,7 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
bv->text->setCursorFromCoordinates(x, y + screen_first); bv->text->setCursorFromCoordinates(x, y + screen_first);
finishUndo(); finishUndo();
bv->text->selection.cursor = bv->text->cursor; bv->text->selection.cursor = bv->text->cursor;
bv->text->cursor.x_fix(bv->text->cursor.x()); bv->x_target(bv->text->cursor.x());
if (bv->fitCursor()) if (bv->fitCursor())
selection_possible = false; selection_possible = false;