commit c43b6a9ecf7d78a2187384e776d439698633f01f
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Mon Sep 18 10:58:07 2017 +0200
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.
(cherry picked from commit 6532e5104dfad5416817d89a5f91e53c30cdd523)
---
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 6520c3a..f4380da 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)
{
@@ -1243,7 +1243,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();
@@ -1251,6 +1251,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 8be2869..ef2bb7e 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_;