From 6532e5104dfad5416817d89a5f91e53c30cdd523 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 18 Sep 2017 10:58:07 +0200 Subject: [PATCH] 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. --- src/frontends/qt4/GuiWorkArea.cpp | 6 ++++-- src/frontends/qt4/GuiWorkArea_Private.h | 6 +----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index cb9769ab52..36dd253f4e 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -238,7 +238,7 @@ GuiWorkArea::Private::Private(GuiWorkArea * parent) : p(parent), buffer_view_(0), lyx_view_(0), caret_(0), caret_visible_(false), 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), 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() // << " y: " << rc.y() << " w: " << rc.width() << " h: " << rc.height()); - if (d->needResize()) { + if (d->need_resize_ || pixelRatio() != d->last_pixel_ratio_) { d->resizeBufferView(); if (d->caret_visible_) { d->hideCaret(); @@ -1233,6 +1233,8 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev) } } + d->last_pixel_ratio_ = pixelRatio(); + GuiPainter pain(viewport(), pixelRatio()); d->buffer_view_->draw(pain, d->caret_visible_); diff --git a/src/frontends/qt4/GuiWorkArea_Private.h b/src/frontends/qt4/GuiWorkArea_Private.h index 8be28694cd..ef2bb7e1df 100644 --- a/src/frontends/qt4/GuiWorkArea_Private.h +++ b/src/frontends/qt4/GuiWorkArea_Private.h @@ -97,10 +97,6 @@ struct GuiWorkArea::Private void paintPreeditText(GuiPainter & pain); - bool needResize() const { - return need_resize_ || p->pixelRatio() != pixel_ratio_; - } - /// GuiWorkArea * p; /// @@ -133,7 +129,7 @@ struct GuiWorkArea::Private /// Ratio between physical pixels and device-independent pixels /// We save the last used value to detect changes of the /// current pixel_ratio of the viewport. - double pixel_ratio_; + double last_pixel_ratio_; /// GuiCompleter * completer_; -- 2.39.2