mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-03 08:28:25 +00:00
Some more fixes to selection, fitCursor calls for InsetText/Tabular.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3864 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
b45d1b31f5
commit
5e3b849ce7
@ -83,9 +83,9 @@ void BufferView::redraw()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BufferView::fitCursor()
|
bool BufferView::fitCursor()
|
||||||
{
|
{
|
||||||
pimpl_->fitCursor();
|
return pimpl_->fitCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
///
|
///
|
||||||
void redraw();
|
void redraw();
|
||||||
///
|
///
|
||||||
void fitCursor();
|
bool fitCursor();
|
||||||
///
|
///
|
||||||
void update();
|
void update();
|
||||||
//
|
//
|
||||||
@ -169,7 +169,7 @@ public:
|
|||||||
///
|
///
|
||||||
void hideLockedInsetCursor();
|
void hideLockedInsetCursor();
|
||||||
///
|
///
|
||||||
void fitLockedInsetCursor(int x, int y, int asc, int desc);
|
bool fitLockedInsetCursor(int x, int y, int asc, int desc);
|
||||||
///
|
///
|
||||||
int unlockInset(UpdatableInset * inset);
|
int unlockInset(UpdatableInset * inset);
|
||||||
///
|
///
|
||||||
|
@ -587,13 +587,16 @@ void BufferView::hideLockedInsetCursor()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BufferView::fitLockedInsetCursor(int x, int y, int asc, int desc)
|
bool BufferView::fitLockedInsetCursor(int x, int y, int asc, int desc)
|
||||||
{
|
{
|
||||||
if (theLockingInset() && available()) {
|
if (theLockingInset() && available()) {
|
||||||
y += text->cursor.y() + theLockingInset()->insetInInsetY();
|
y += text->cursor.y() + theLockingInset()->insetInInsetY();
|
||||||
if (pimpl_->screen_->fitManualCursor(text, this, x, y, asc, desc))
|
if (pimpl_->screen_->fitManualCursor(text, this, x, y, asc, desc)) {
|
||||||
updateScrollbar();
|
updateScrollbar();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
2002-03-29 Juergen Vigna <jug@sad.it>
|
2002-03-29 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* lyxfunc.C (dispatch): add a missing fitCursor call.
|
||||||
|
|
||||||
|
* BufferView2.C (fitLockedInsetCursor): the inset needs to know if
|
||||||
|
it was scrolled by a cursor move, so return the bool status.
|
||||||
|
|
||||||
|
* BufferView.C (fitCursor): return the bool flag also to the outside
|
||||||
|
world as this is needed.
|
||||||
|
|
||||||
|
* screen.C (toggleToggle): don't subtract the offset if it's positive.
|
||||||
|
|
||||||
* BufferView_pimpl.C (workAreaButtonPress): just lock the inset don't
|
* BufferView_pimpl.C (workAreaButtonPress): just lock the inset don't
|
||||||
call the edit() as it is not needed (and wrong) IMO.
|
call the edit() as it is not needed (and wrong) IMO.
|
||||||
(workAreaButtonPress): set the screen_first variable before evt.
|
(workAreaButtonPress): set the screen_first variable before evt.
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
2002-03-29 Juergen Vigna <jug@sad.it>
|
2002-03-29 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* insettext.C (updateLocal): fixes to fitCursor calls when locking/
|
||||||
|
unlocking inset.
|
||||||
|
|
||||||
|
* insettabular.C (edit): call fitCursor().
|
||||||
|
|
||||||
* insettext.C (insetButtonPress): change behaviour of no_selection
|
* insettext.C (insetButtonPress): change behaviour of no_selection
|
||||||
to the one in the BufferView selection_possible and fix the spurious
|
to the one in the BufferView selection_possible and fix the spurious
|
||||||
selection bug with it.
|
selection bug with it.
|
||||||
|
(localDispatch): revoke selection on BREAK... functions.
|
||||||
|
|
||||||
2002-03-28 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
|
2002-03-28 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
|
||||||
|
|
||||||
|
@ -578,6 +578,7 @@ void InsetTabular::edit(BufferView * bv, bool front)
|
|||||||
lyxerr[Debug::INSETTEXT] << "InsetTabular::Cannot lock inset" << endl;
|
lyxerr[Debug::INSETTEXT] << "InsetTabular::Cannot lock inset" << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
finishUndo();
|
||||||
locked = true;
|
locked = true;
|
||||||
the_locking_inset = 0;
|
the_locking_inset = 0;
|
||||||
inset_x = 0;
|
inset_x = 0;
|
||||||
@ -588,7 +589,7 @@ void InsetTabular::edit(BufferView * bv, bool front)
|
|||||||
actcell = tabular->GetNumberOfCells() - 1;
|
actcell = tabular->GetNumberOfCells() - 1;
|
||||||
clearSelection();
|
clearSelection();
|
||||||
resetPos(bv);
|
resetPos(bv);
|
||||||
finishUndo();
|
bv->fitCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1276,7 +1277,10 @@ InsetTabular::localDispatch(BufferView * bv, kb_action action,
|
|||||||
}
|
}
|
||||||
if (result < FINISHED) {
|
if (result < FINISHED) {
|
||||||
if (!the_locking_inset) {
|
if (!the_locking_inset) {
|
||||||
// showInsetCursor(bv);
|
if (bv->fitCursor())
|
||||||
|
updateLocal(bv, FULL, false);
|
||||||
|
if (locked)
|
||||||
|
showInsetCursor(bv);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
bv->unlockInset(this);
|
bv->unlockInset(this);
|
||||||
@ -1454,14 +1458,18 @@ void InsetTabular::hideInsetCursor(BufferView * bv)
|
|||||||
void InsetTabular::fitInsetCursor(BufferView * bv) const
|
void InsetTabular::fitInsetCursor(BufferView * bv) const
|
||||||
{
|
{
|
||||||
if (the_locking_inset) {
|
if (the_locking_inset) {
|
||||||
|
int old_first_y = bv->text->first_y;
|
||||||
the_locking_inset->fitInsetCursor(bv);
|
the_locking_inset->fitInsetCursor(bv);
|
||||||
|
if (old_first_y != bv->text->first_y)
|
||||||
|
need_update = FULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LyXFont font;
|
LyXFont font;
|
||||||
|
|
||||||
int const asc = lyxfont::maxAscent(font);
|
int const asc = lyxfont::maxAscent(font);
|
||||||
int const desc = lyxfont::maxDescent(font);
|
int const desc = lyxfont::maxDescent(font);
|
||||||
bv->fitLockedInsetCursor(cursor_.x(), cursor_.y(), asc, desc);
|
if (bv->fitLockedInsetCursor(cursor_.x(), cursor_.y(), asc, desc))
|
||||||
|
need_update = FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -618,16 +618,17 @@ void InsetText::updateLocal(BufferView * bv, int what, bool mark_dirty) const
|
|||||||
}
|
}
|
||||||
lt->fullRebreak(bv);
|
lt->fullRebreak(bv);
|
||||||
setUpdateStatus(bv, what);
|
setUpdateStatus(bv, what);
|
||||||
bool flag = (((need_update != CURSOR) && (need_update != NONE)) ||
|
bool flag = mark_dirty ||
|
||||||
(lt->status() != LyXText::UNCHANGED) || lt->selection.set());
|
(((need_update != CURSOR) && (need_update != NONE)) ||
|
||||||
|
(lt->status() != LyXText::UNCHANGED) || lt->selection.set());
|
||||||
if (!lt->selection.set())
|
if (!lt->selection.set())
|
||||||
lt->selection.cursor = lt->cursor;
|
lt->selection.cursor = lt->cursor;
|
||||||
if (clear)
|
if (clear)
|
||||||
lt = 0;
|
lt = 0;
|
||||||
|
if (locked && (need_update & CURSOR) && bv->fitCursor())
|
||||||
|
need_update |= FULL;
|
||||||
if (flag)
|
if (flag)
|
||||||
bv->updateInset(const_cast<InsetText *>(this), mark_dirty);
|
bv->updateInset(const_cast<InsetText *>(this), mark_dirty);
|
||||||
else
|
|
||||||
bv->fitCursor();
|
|
||||||
|
|
||||||
if (need_update == CURSOR)
|
if (need_update == CURSOR)
|
||||||
need_update = NONE;
|
need_update = NONE;
|
||||||
@ -681,7 +682,6 @@ void InsetText::edit(BufferView * bv, int x, int y, unsigned int button)
|
|||||||
font.setLanguage(bv->getParentLanguage(this));
|
font.setLanguage(bv->getParentLanguage(this));
|
||||||
setFont(bv, font, false);
|
setFont(bv, font, false);
|
||||||
}
|
}
|
||||||
// showInsetCursor(bv);
|
|
||||||
if (clear)
|
if (clear)
|
||||||
lt = 0;
|
lt = 0;
|
||||||
|
|
||||||
@ -689,6 +689,7 @@ void InsetText::edit(BufferView * bv, int x, int y, unsigned int button)
|
|||||||
if (drawFrame_ == LOCKED)
|
if (drawFrame_ == LOCKED)
|
||||||
code = CURSOR|DRAW_FRAME;
|
code = CURSOR|DRAW_FRAME;
|
||||||
updateLocal(bv, code, false);
|
updateLocal(bv, code, false);
|
||||||
|
showInsetCursor(bv);
|
||||||
|
|
||||||
// Tell the paragraph dialog that we've entered an insettext.
|
// Tell the paragraph dialog that we've entered an insettext.
|
||||||
bv->owner()->getDialogs()->updateParagraph();
|
bv->owner()->getDialogs()->updateParagraph();
|
||||||
@ -733,13 +734,13 @@ void InsetText::edit(BufferView * bv, bool front)
|
|||||||
font.setLanguage(bv->getParentLanguage(this));
|
font.setLanguage(bv->getParentLanguage(this));
|
||||||
setFont(bv, font, false);
|
setFont(bv, font, false);
|
||||||
}
|
}
|
||||||
// showInsetCursor(bv);
|
|
||||||
if (clear)
|
if (clear)
|
||||||
lt = 0;
|
lt = 0;
|
||||||
int code = CURSOR;
|
int code = CURSOR;
|
||||||
if (drawFrame_ == LOCKED)
|
if (drawFrame_ == LOCKED)
|
||||||
code = CURSOR|DRAW_FRAME;
|
code = CURSOR|DRAW_FRAME;
|
||||||
updateLocal(bv, code, false);
|
updateLocal(bv, code, false);
|
||||||
|
showInsetCursor(bv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -918,7 +919,7 @@ bool InsetText::updateInsetInInset(BufferView * bv, Inset * inset)
|
|||||||
|
|
||||||
void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
|
void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
|
||||||
{
|
{
|
||||||
no_selection = false;
|
no_selection = true;
|
||||||
|
|
||||||
// use this to check mouse motion for selection!
|
// use this to check mouse motion for selection!
|
||||||
mouse_x = x;
|
mouse_x = x;
|
||||||
@ -953,8 +954,8 @@ void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
|
|||||||
the_locking_inset->insetUnlock(bv);
|
the_locking_inset->insetUnlock(bv);
|
||||||
the_locking_inset = 0;
|
the_locking_inset = 0;
|
||||||
}
|
}
|
||||||
if (inset)
|
if (!inset)
|
||||||
no_selection = true;
|
no_selection = false;
|
||||||
|
|
||||||
if (bv->theLockingInset()) {
|
if (bv->theLockingInset()) {
|
||||||
if (isHighlyEditableInset(inset)) {
|
if (isHighlyEditableInset(inset)) {
|
||||||
@ -1057,13 +1058,15 @@ bool InsetText::insetButtonRelease(BufferView * bv, int x, int y, int button)
|
|||||||
|
|
||||||
void InsetText::insetMotionNotify(BufferView * bv, int x, int y, int state)
|
void InsetText::insetMotionNotify(BufferView * bv, int x, int y, int state)
|
||||||
{
|
{
|
||||||
if (no_selection || ((mouse_x == x) && (mouse_y == y)))
|
|
||||||
return;
|
|
||||||
if (the_locking_inset) {
|
if (the_locking_inset) {
|
||||||
the_locking_inset->insetMotionNotify(bv, x - inset_x,
|
the_locking_inset->insetMotionNotify(bv, x - inset_x,
|
||||||
y - inset_y,state);
|
y - inset_y,state);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (no_selection || ((mouse_x == x) && (mouse_y == y)))
|
||||||
|
return;
|
||||||
|
|
||||||
bool clear = false;
|
bool clear = false;
|
||||||
if (!lt) {
|
if (!lt) {
|
||||||
lt = getLyXText(bv);
|
lt = getLyXText(bv);
|
||||||
@ -1147,6 +1150,7 @@ InsetText::localDispatch(BufferView * bv,
|
|||||||
#ifdef WITH_WARNINGS
|
#ifdef WITH_WARNINGS
|
||||||
#warning I changed this to always return Dispatched maybe it is wrong (20011001 Jug)
|
#warning I changed this to always return Dispatched maybe it is wrong (20011001 Jug)
|
||||||
#endif
|
#endif
|
||||||
|
updateLocal(bv, CURSOR, false);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1322,7 +1326,7 @@ InsetText::localDispatch(BufferView * bv,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lt->breakParagraph(bv, 0);
|
lt->breakParagraph(bv, 0);
|
||||||
updwhat = FULL;
|
updwhat = CURSOR | FULL;
|
||||||
updflag = true;
|
updflag = true;
|
||||||
break;
|
break;
|
||||||
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
|
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
|
||||||
@ -1331,7 +1335,7 @@ InsetText::localDispatch(BufferView * bv,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lt->breakParagraph(bv, 1);
|
lt->breakParagraph(bv, 1);
|
||||||
updwhat = FULL;
|
updwhat = CURSOR | FULL;
|
||||||
updflag = true;
|
updflag = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1343,7 +1347,7 @@ InsetText::localDispatch(BufferView * bv,
|
|||||||
setUndo(bv, Undo::INSERT,
|
setUndo(bv, Undo::INSERT,
|
||||||
lt->cursor.par(), lt->cursor.par()->next());
|
lt->cursor.par(), lt->cursor.par()->next());
|
||||||
lt->insertChar(bv, Paragraph::META_NEWLINE);
|
lt->insertChar(bv, Paragraph::META_NEWLINE);
|
||||||
updwhat = CURSOR_PAR;
|
updwhat = CURSOR | CURSOR_PAR;
|
||||||
updflag = true;
|
updflag = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1454,6 +1458,9 @@ InsetText::localDispatch(BufferView * bv,
|
|||||||
|
|
||||||
if (result >= FINISHED)
|
if (result >= FINISHED)
|
||||||
bv->unlockInset(this);
|
bv->unlockInset(this);
|
||||||
|
|
||||||
|
if (result == DISPATCHED_NOUPDATE && (need_update & FULL))
|
||||||
|
result = DISPATCHED;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1771,7 +1778,8 @@ void InsetText::fitInsetCursor(BufferView * bv) const
|
|||||||
int const asc = lyxfont::maxAscent(font);
|
int const asc = lyxfont::maxAscent(font);
|
||||||
int const desc = lyxfont::maxDescent(font);
|
int const desc = lyxfont::maxDescent(font);
|
||||||
|
|
||||||
bv->fitLockedInsetCursor(cx(bv), cy(bv), asc, desc);
|
if (bv->fitLockedInsetCursor(cx(bv), cy(bv), asc, desc))
|
||||||
|
need_update |= FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -922,6 +922,8 @@ string const LyXFunc::dispatch(kb_action action, string argument)
|
|||||||
TEXT()->cursorUp(owner->view());
|
TEXT()->cursorUp(owner->view());
|
||||||
moveCursorUpdate(true, false);
|
moveCursorUpdate(true, false);
|
||||||
owner->showState();
|
owner->showState();
|
||||||
|
} else {
|
||||||
|
owner->view()->update(TEXT(), BufferView::SELECT|BufferView::FITCUR);
|
||||||
}
|
}
|
||||||
goto exit_with_message;
|
goto exit_with_message;
|
||||||
} else if (result == UpdatableInset::FINISHED_DOWN) {
|
} else if (result == UpdatableInset::FINISHED_DOWN) {
|
||||||
|
@ -522,10 +522,11 @@ void LyXScreen::toggleToggle(LyXText * text, BufferView * bv,
|
|||||||
- text->toggle_end_cursor.row()->baseline()
|
- text->toggle_end_cursor.row()->baseline()
|
||||||
+ text->toggle_end_cursor.row()->height();
|
+ text->toggle_end_cursor.row()->height();
|
||||||
|
|
||||||
|
int const offset = y_offset < 0 ? y_offset : 0;
|
||||||
int const bottom = min(max(bottom_tmp, text->first_y),
|
int const bottom = min(max(bottom_tmp, text->first_y),
|
||||||
static_cast<int>(text->first_y + owner.height()))-y_offset;
|
static_cast<int>(text->first_y + owner.height()))-offset;
|
||||||
int const top = min(max(top_tmp, text->first_y),
|
int const top = min(max(top_tmp, text->first_y),
|
||||||
static_cast<int>(text->first_y + owner.height()))-y_offset;
|
static_cast<int>(text->first_y + owner.height()))-offset;
|
||||||
|
|
||||||
drawFromTo(text, bv, top - text->first_y,
|
drawFromTo(text, bv, top - text->first_y,
|
||||||
bottom - text->first_y, y_offset,
|
bottom - text->first_y, y_offset,
|
||||||
|
Loading…
Reference in New Issue
Block a user