Remember correctly pixel ratio used for painting

This avoids endless resize issues on HiDPI systems (e.g. Retina Mac).

Rename pixel_ratio_ to last_pixel_ratio_ to emphasize that this is a
cached value.

Inline needResize method to make the logic clearer in paintEvent.
This commit is contained in:
Jean-Marc Lasgouttes 2017-09-18 10:58:07 +02:00
parent f7e431ce73
commit 6532e5104d
2 changed files with 5 additions and 7 deletions

View File

@ -238,7 +238,7 @@ 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), preedit_lines_(1), need_resize_(false), preedit_lines_(1),
pixel_ratio_(1.0), last_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)
{ {
@ -1225,7 +1225,7 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev)
// LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x() // LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x()
// << " y: " << rc.y() << " w: " << rc.width() << " h: " << rc.height()); // << " y: " << rc.y() << " w: " << rc.width() << " h: " << rc.height());
if (d->needResize()) { if (d->need_resize_ || pixelRatio() != d->last_pixel_ratio_) {
d->resizeBufferView(); d->resizeBufferView();
if (d->caret_visible_) { if (d->caret_visible_) {
d->hideCaret(); d->hideCaret();
@ -1233,6 +1233,8 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev)
} }
} }
d->last_pixel_ratio_ = pixelRatio();
GuiPainter pain(viewport(), pixelRatio()); GuiPainter pain(viewport(), pixelRatio());
d->buffer_view_->draw(pain, d->caret_visible_); d->buffer_view_->draw(pain, d->caret_visible_);

View File

@ -97,10 +97,6 @@ struct GuiWorkArea::Private
void paintPreeditText(GuiPainter & pain); void paintPreeditText(GuiPainter & pain);
bool needResize() const {
return need_resize_ || p->pixelRatio() != pixel_ratio_;
}
/// ///
GuiWorkArea * p; GuiWorkArea * p;
/// ///
@ -133,7 +129,7 @@ struct GuiWorkArea::Private
/// Ratio between physical pixels and device-independent pixels /// Ratio between physical pixels and device-independent pixels
/// We save the last used value to detect changes of the /// We save the last used value to detect changes of the
/// current pixel_ratio of the viewport. /// current pixel_ratio of the viewport.
double pixel_ratio_; double last_pixel_ratio_;
/// ///
GuiCompleter * completer_; GuiCompleter * completer_;