* LyXView::updateInset(): schedule a redraw instead of redraw immediately.

* WorkArea::sheduleRedraw(): new pure virtual method.

* GuiWorkArea::showCursor(): handle the scheduled redraw.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16708 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-01-16 15:16:09 +00:00
parent 323116ac0e
commit 2ea1ce7851
4 changed files with 24 additions and 5 deletions

View File

@ -431,11 +431,10 @@ Buffer const * const LyXView::updateInset(InsetBase const * inset) const
{
Buffer const * buffer_ptr = 0;
if (inset) {
buffer_ptr = work_area_->bufferView().buffer();
// No FitCursor:
BOOST_ASSERT(work_area_);
work_area_->bufferView().update(Update::Force);
work_area_->redraw();
work_area_->sheduleRedraw();
buffer_ptr = work_area_->bufferView().buffer();
}
return buffer_ptr;
}

View File

@ -82,6 +82,9 @@ public:
*/
virtual void setScrollbarParams(int height, int pos, int line_height) = 0;
///
virtual void sheduleRedraw() = 0;
/// redraw the screen, without using existing pixmap
virtual void redraw();
///

View File

@ -159,7 +159,7 @@ SyntheticMouseEvent::SyntheticMouseEvent()
GuiWorkArea::GuiWorkArea(int w, int h, int id, LyXView & lyx_view)
: WorkArea(id, lyx_view), need_resize_(false)
: WorkArea(id, lyx_view), need_resize_(false), shedule_redraw_(false)
{
cursor_ = new frontend::CursorWidget();
cursor_->hide();
@ -535,6 +535,19 @@ void GuiWorkArea::updateScreen()
void GuiWorkArea::showCursor(int x, int y, int h, CursorShape shape)
{
if (shedule_redraw_) {
if (buffer_view_ && buffer_view_->buffer()) {
buffer_view_->update(Update::Force);
updateScreen();
viewport()->update(QRect(0, 0, viewport()->width(), viewport()->height()));
}
shedule_redraw_ = false;
// Show the cursor immediately after the update.
hideCursor();
toggleCursor();
return;
}
cursor_->update(x, y, h, shape);
cursor_->show();
viewport()->update(cursor_->rect());

View File

@ -103,6 +103,8 @@ public:
virtual int height() const { return viewport()->height(); }
///
virtual void setScrollbarParams(int height, int pos, int line_height);
///
virtual void sheduleRedraw() { shedule_redraw_ = true; }
/// update the passed area.
void update(int x, int y, int w, int h);
@ -171,6 +173,8 @@ private:
QPixmap screen_;
///
bool need_resize_;
///
bool shedule_redraw_;
};
} // namespace frontend