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)
{
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) {
}
fitCursor();
- update();
}
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;
}
text->init(bv_);
update();
- bv_->cursor().updatePos();
fitCursor();
switchKeyMap();
// 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();
+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
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)
{}
clear();
push_back(CursorSlice(inset));
anchor_ = DocIterator(inset);
- cached_y_ = 0;
clearTargetX();
selection_ = false;
mark_ = false;
}
-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()) {
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.
}
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
DispatchResult disp_;
private:
- ///
- int cached_y_;
/**
* The target x position of the cursor. This is used for when
* we have text like :
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;
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)
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