mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Compute metrics when graphics is updated
Remove the old schedule_redraw_ mechanism that was only useful because of our synchronous drawing code. Now that actual painting is scheduled instead of forced, it becomes pointless. Rename WorkArea::redraw(bool) to scheduleRedraw(bool), to show that the drawing is not done right away. In GuiView::updateInset, call scheduleRedraw(true), so that metrics are correctly computed (this was the whole point of the exercise).
This commit is contained in:
parent
5699791d0f
commit
a31d3dc67d
@ -36,8 +36,8 @@ public:
|
|||||||
///
|
///
|
||||||
virtual ~WorkArea() {}
|
virtual ~WorkArea() {}
|
||||||
|
|
||||||
/// redraw the screen, without using existing pixmap
|
/// Update metrics if needed and schedule a paint event
|
||||||
virtual void redraw(bool update_metrics) = 0;
|
virtual void scheduleRedraw(bool update_metrics) = 0;
|
||||||
|
|
||||||
/// close this work area.
|
/// close this work area.
|
||||||
/// Slot for Buffer::closing signal.
|
/// Slot for Buffer::closing signal.
|
||||||
|
@ -35,7 +35,7 @@ void WorkAreaManager::remove(WorkArea * wa)
|
|||||||
void WorkAreaManager::redrawAll(bool update_metrics)
|
void WorkAreaManager::redrawAll(bool update_metrics)
|
||||||
{
|
{
|
||||||
for (WorkArea * wa : work_areas_)
|
for (WorkArea * wa : work_areas_)
|
||||||
wa->redraw(update_metrics);
|
wa->scheduleRedraw(update_metrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4345,7 +4345,7 @@ Buffer const * GuiView::updateInset(Inset const * inset)
|
|||||||
continue;
|
continue;
|
||||||
Buffer const * buffer = &(wa->bufferView().buffer());
|
Buffer const * buffer = &(wa->bufferView().buffer());
|
||||||
if (inset_buffer == buffer)
|
if (inset_buffer == buffer)
|
||||||
wa->scheduleRedraw();
|
wa->scheduleRedraw(true);
|
||||||
}
|
}
|
||||||
return inset_buffer;
|
return inset_buffer;
|
||||||
}
|
}
|
||||||
|
@ -237,7 +237,7 @@ SyntheticMouseEvent::SyntheticMouseEvent()
|
|||||||
GuiWorkArea::Private::Private(GuiWorkArea * parent)
|
GuiWorkArea::Private::Private(GuiWorkArea * parent)
|
||||||
: p(parent), buffer_view_(0), lyx_view_(0),
|
: p(parent), buffer_view_(0), lyx_view_(0),
|
||||||
caret_(0), caret_visible_(false),
|
caret_(0), caret_visible_(false),
|
||||||
need_resize_(false), schedule_redraw_(false), preedit_lines_(1),
|
need_resize_(false), preedit_lines_(1),
|
||||||
pixel_ratio_(1.0),
|
pixel_ratio_(1.0),
|
||||||
completer_(new GuiCompleter(p, p)), dialog_mode_(false), shell_escape_(false),
|
completer_(new GuiCompleter(p, p)), dialog_mode_(false), shell_escape_(false),
|
||||||
read_only_(false), clean_(true), externally_modified_(false)
|
read_only_(false), clean_(true), externally_modified_(false)
|
||||||
@ -449,7 +449,7 @@ void GuiWorkArea::toggleCaret()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GuiWorkArea::redraw(bool update_metrics)
|
void GuiWorkArea::scheduleRedraw(bool update_metrics)
|
||||||
{
|
{
|
||||||
if (!isVisible())
|
if (!isVisible())
|
||||||
// No need to redraw in this case.
|
// No need to redraw in this case.
|
||||||
@ -630,18 +630,6 @@ void GuiWorkArea::Private::showCaret()
|
|||||||
|
|
||||||
caret_->update(point.x_, point.y_, h, l_shape, isrtl, completable);
|
caret_->update(point.x_, point.y_, h, l_shape, isrtl, completable);
|
||||||
|
|
||||||
if (schedule_redraw_) {
|
|
||||||
// This happens when a graphic conversion is finished. As we don't know
|
|
||||||
// the size of the new graphics, it's better the update everything.
|
|
||||||
// We can't use redraw() here because this would trigger a infinite
|
|
||||||
// recursive loop with showCaret().
|
|
||||||
buffer_view_->resize(p->viewport()->width(), p->viewport()->height());
|
|
||||||
p->viewport()->update();
|
|
||||||
updateScrollbar();
|
|
||||||
schedule_redraw_ = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
p->viewport()->update(caret_->rect());
|
p->viewport()->update(caret_->rect());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1352,12 +1340,6 @@ bool GuiWorkArea::isFullScreen() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GuiWorkArea::scheduleRedraw()
|
|
||||||
{
|
|
||||||
d->schedule_redraw_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool GuiWorkArea::inDialogMode() const
|
bool GuiWorkArea::inDialogMode() const
|
||||||
{
|
{
|
||||||
return d->dialog_mode_;
|
return d->dialog_mode_;
|
||||||
@ -1770,7 +1752,7 @@ void TabWorkArea::on_currentTabChanged(int i)
|
|||||||
GuiWorkArea * wa = workArea(i);
|
GuiWorkArea * wa = workArea(i);
|
||||||
LASSERT(wa, return);
|
LASSERT(wa, return);
|
||||||
wa->setUpdatesEnabled(true);
|
wa->setUpdatesEnabled(true);
|
||||||
wa->redraw(true);
|
wa->scheduleRedraw(true);
|
||||||
wa->setFocus();
|
wa->setFocus();
|
||||||
///
|
///
|
||||||
currentWorkAreaChanged(wa);
|
currentWorkAreaChanged(wa);
|
||||||
|
@ -59,13 +59,11 @@ public:
|
|||||||
/// is GuiView in fullscreen mode?
|
/// is GuiView in fullscreen mode?
|
||||||
bool isFullScreen() const;
|
bool isFullScreen() const;
|
||||||
///
|
///
|
||||||
void scheduleRedraw();
|
|
||||||
///
|
|
||||||
BufferView & bufferView();
|
BufferView & bufferView();
|
||||||
///
|
///
|
||||||
BufferView const & bufferView() const;
|
BufferView const & bufferView() const;
|
||||||
///
|
///
|
||||||
void redraw(bool update_metrics);
|
void scheduleRedraw(bool update_metrics);
|
||||||
|
|
||||||
/// return true if the key is part of a shortcut
|
/// return true if the key is part of a shortcut
|
||||||
bool queryKeySym(KeySymbol const & key, KeyModifier mod) const;
|
bool queryKeySym(KeySymbol const & key, KeyModifier mod) const;
|
||||||
|
@ -122,8 +122,6 @@ struct GuiWorkArea::Private
|
|||||||
|
|
||||||
///
|
///
|
||||||
bool need_resize_;
|
bool need_resize_;
|
||||||
///
|
|
||||||
bool schedule_redraw_;
|
|
||||||
|
|
||||||
/// the current preedit text of the input method
|
/// the current preedit text of the input method
|
||||||
docstring preedit_string_;
|
docstring preedit_string_;
|
||||||
|
Loading…
Reference in New Issue
Block a user