fitcursor work

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8591 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Alfredo Braunstein 2004-04-02 22:06:21 +00:00
parent 5d2127ac8e
commit 0d47b55a84
8 changed files with 26 additions and 63 deletions

View File

@ -379,23 +379,10 @@ void BufferView::setCursor(ParIterator const & par, lyx::pos_type pos)
par[i].inset().edit(cursor(), true);
cursor().setCursor(makeDocIterator(par, pos), false);
par[0].text()->redoParagraph(par[0].par());
}
/*
if the fitCursor call refers to some point in never-explored-land, then we
don't have y information in insets there, then we cannot even do an update
to get it (because we need the y infomation for setting top_y first). So
this is solved in putSelectionAt with:
- setting top_y to the y of the outerPar (that has good info)
- calling update
- calling cursor().updatePos()
- then call fitCursor()
Ab.
*/
void BufferView::putSelectionAt(DocIterator const & cur,
int length, bool backwards)
{
@ -403,15 +390,7 @@ void BufferView::putSelectionAt(DocIterator const & cur,
cursor().clearSelection();
LyXText & text = *cur[0].text();
setCursor(par, cur.pos());
// hack for the chicken and egg problem
top_y(text.getPar(par.outerPar()).y);
update();
//text.setCursor(cursor(), cur.par(), cur.pos());
cursor().updatePos();
if (length) {
if (backwards) {
@ -424,7 +403,6 @@ void BufferView::putSelectionAt(DocIterator const & cur,
}
fitCursor();
update();
}

View File

@ -355,11 +355,14 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
lyx::graphics::Previews::get().generateBufferPreviews(*buffer_);
}
bool BufferView::Pimpl::fitCursor()
{
// this is enough to get the right y cursor info for fitCursor
cursor_.top().text()->redoParagraph(cursor_.top().par());
if (!screen().fitCursor(bv_))
return false;
updateScrollbar();
return true;
}
@ -388,7 +391,6 @@ void BufferView::Pimpl::resizeCurrentBuffer()
text->init(bv_);
update();
bv_->cursor().updatePos();
fitCursor();
switchKeyMap();
@ -892,14 +894,12 @@ bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & cmd0)
// If the request was dispatched the temp cursor should have been
// in a way to be used as new 'real' cursor.
if (res.dispatched())
if (res.dispatched()) {
bv_->cursor() = cur;
// Redraw if requested or necessary.
if (res.update())
update();
if (fitCursor())
update();
// Redraw if requested or necessary.
if (fitCursor() || res.update())
update();
}
// see workAreaKeyPress
cursor_timeout.restart();

View File

@ -1,4 +1,18 @@
2004-04-03 Alfredo Braunstein <abraunst@lyx.org>
* cursor.[Ch] (LCursor): remove cached_y_ and updatePos
(getDim) remove outdated comment
* BufferView_pimpl.C (fitCursor): call redoParagraph on the outer
cursor paragraph to obtain good cursor y info
(workAreaDispatch): remove unneeded update call
* BufferView.C (setCursor): call redoParagraph, as some insets
could have been opened
(putSelectionAt): remove the double update and all that cleverness
(simplified and transfered to fitCursor where it belongs).
2004-04-01 Alfredo Braunstein <abraunst@lyx.org>
* text3.C (getStatus): add LFUN_BEGINNINGBUF

View File

@ -84,8 +84,7 @@ void region(CursorSlice const & i1, CursorSlice const & i2,
LCursor::LCursor(BufferView & bv)
: DocIterator(), bv_(&bv),
anchor_(), cached_y_(0), x_target_(-1),
: DocIterator(), bv_(&bv), anchor_(), x_target_(-1),
selection_(false), mark_(false)
{}
@ -95,7 +94,6 @@ void LCursor::reset(InsetBase & inset)
clear();
push_back(CursorSlice(inset));
anchor_ = DocIterator(inset);
cached_y_ = 0;
clearTargetX();
selection_ = false;
mark_ = false;
@ -236,15 +234,6 @@ int LCursor::currentMode()
}
void LCursor::updatePos()
{
BOOST_ASSERT(!empty());
if (size() > 1)
cached_y_ = bv().top_y() + back().inset().yo();
//cached_y_ = back().inset().yo();
}
void LCursor::getDim(int & asc, int & des) const
{
if (inMathed()) {
@ -270,16 +259,6 @@ void LCursor::getPos(int & x, int & y) const
y = 0;
if (!empty())
inset().getCursorPos(back(), x, y);
// getCursorPos gives _screen_ coordinates. We need to add
// top_y to get document coordinates. This is hidden in cached_y_.
//y += cached_y_ - inset().yo();
// The rest is non-obvious. The reason we have to have these
// extra computation is that the getCursorPos() calls rely
// on the inset's own knowledge of its screen position.
// If we scroll up or down in a big enough increment,
// inset->draw() is not called: this doesn't update
// inset.yo_, so getCursor() returns an old value.
// Ugly as you like.
}

View File

@ -149,8 +149,6 @@ public:
CursorSlice & anchor();
/// access to selection anchor
CursorSlice const & anchor() const;
/// cache the absolute coordinate from the top inset
void updatePos();
/// sets anchor to cursor position
void resetAnchor();
/// access to owning BufferView
@ -187,8 +185,6 @@ public:
DispatchResult disp_;
private:
///
int cached_y_;
/**
* The target x position of the cursor. This is used for when
* we have text like :

View File

@ -214,7 +214,7 @@ bool LyXScreen::fitCursor(BufferView * bv)
bv->cursor().getPos(x, y);
bv->cursor().getDim(asc, desc);
//lyxerr << "LyXScreen::fitCursor: x: " << x << " y: " << y
// << " top_y: " << top_y << endl;
// << " top_y: " << top_y << endl;
bool const big_row = h / 4 < asc + desc && asc + desc < h;

View File

@ -1362,7 +1362,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose)
if (view()->available()) {
view()->fitCursor();
view()->update();
view()->cursor().updatePos();
// if we executed a mutating lfun, mark the buffer as dirty
if (getStatus(cmd).enabled()
&& !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)

View File

@ -1136,9 +1136,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
finishUndo();
cur.x_target() = cursorX(cur.top());
if (bv->fitCursor())
selection_possible = false;
// Insert primary selection with middle mouse
// if there is a local selection in the current buffer,
// insert this