Disable antialiasing on high-DPI displays
authorRyan Govostes <rgovostes+git@gmail.com>
Tue, 19 Mar 2019 23:30:24 +0000 (19:30 -0400)
committerUwe Hermann <uwe@hermann-uwe.de>
Thu, 28 Mar 2019 16:58:58 +0000 (17:58 +0100)
pv/views/trace/analogsignal.cpp
pv/views/trace/trace.cpp
pv/views/trace/viewport.cpp

index d9b72ad..5992464 100644 (file)
@@ -319,6 +319,7 @@ void AnalogSignal::paint_fore(QPainter &p, ViewItemPaintParams &pp)
 
 void AnalogSignal::paint_grid(QPainter &p, int y, int left, int right)
 {
+       bool wasAntialiased = p.testRenderHint(QPainter::Antialiasing);
        p.setRenderHint(QPainter::Antialiasing, false);
 
        if (pos_vdivs_ > 0) {
@@ -363,7 +364,7 @@ void AnalogSignal::paint_grid(QPainter &p, int y, int left, int right)
                }
        }
 
-       p.setRenderHint(QPainter::Antialiasing, true);
+       p.setRenderHint(QPainter::Antialiasing, wasAntialiased);
 }
 
 void AnalogSignal::paint_trace(QPainter &p,
index d7e02bc..65abaf0 100644 (file)
@@ -292,12 +292,13 @@ void Trace::paint_back(QPainter &p, ViewItemPaintParams &pp)
 
 void Trace::paint_axis(QPainter &p, ViewItemPaintParams &pp, int y)
 {
+       bool wasAntialiased = p.testRenderHint(QPainter::Antialiasing);
        p.setRenderHint(QPainter::Antialiasing, false);
 
        p.setPen(axis_pen_);
        p.drawLine(QPointF(pp.left(), y), QPointF(pp.right(), y));
 
-       p.setRenderHint(QPainter::Antialiasing, true);
+       p.setRenderHint(QPainter::Antialiasing, wasAntialiased);
 }
 
 void Trace::add_color_option(QWidget *parent, QFormLayout *form)
@@ -328,10 +329,11 @@ void Trace::paint_hover_marker(QPainter &p)
 
        const pair<int, int> extents = v_extents();
 
+       bool wasAntialiased = p.testRenderHint(QPainter::Antialiasing);
        p.setRenderHint(QPainter::Antialiasing, false);
        p.drawLine(x, get_visual_y() + extents.first,
                x, get_visual_y() + extents.second);
-       p.setRenderHint(QPainter::Antialiasing, true);
+       p.setRenderHint(QPainter::Antialiasing, wasAntialiased);
 }
 
 void Trace::create_popup_form()
index 83abb7b..44c912a 100644 (file)
@@ -30,6 +30,8 @@
 #include <pv/session.hpp>
 
 #include <QMouseEvent>
+#include <QScreen>
+#include <QWindow>
 
 #include <QDebug>
 
@@ -172,7 +174,10 @@ void Viewport::paintEvent(QPaintEvent*)
                [](const shared_ptr<TimeItem> &t) { return !t; }));
 
        QPainter p(this);
-       p.setRenderHint(QPainter::Antialiasing);
+
+       bool useAntialiasing =
+               window()->windowHandle()->screen()->devicePixelRatio() < 2.0;
+       p.setRenderHint(QPainter::Antialiasing, useAntialiasing);
 
        for (LayerPaintFunc *paint_func = layer_paint_funcs;
                        *paint_func; paint_func++) {