diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-10-05 22:49:02 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-10-05 22:50:34 +0200 |
commit | 96cd6bc12cd606154ce69889b94043c0a658fdc3 (patch) | |
tree | ab797466f1a0ca07afd88450e89eb2d5c3ec27c0 | |
parent | 48632ae113bc4a6e47756327699fa3f626b4afe9 (diff) |
api, cv, gui, pose-widget: remove window visibility check
Causes freezes on multiple displays.
Reported and tested in realtime by: @kzfr
-rw-r--r-- | api/is-window-visible.cpp | 33 | ||||
-rw-r--r-- | api/is-window-visible.hpp | 7 | ||||
-rw-r--r-- | cv/video-widget.cpp | 8 | ||||
-rw-r--r-- | cv/video-widget.hpp | 4 | ||||
-rw-r--r-- | gui/main-window.cpp | 2 | ||||
-rw-r--r-- | pose-widget/glwidget.cpp | 19 | ||||
-rw-r--r-- | pose-widget/glwidget.h | 6 |
7 files changed, 6 insertions, 73 deletions
diff --git a/api/is-window-visible.cpp b/api/is-window-visible.cpp deleted file mode 100644 index f70e01c8..00000000 --- a/api/is-window-visible.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "is-window-visible.hpp" -#include <QPoint> - -#ifdef _WIN32 - -#include <windows.h> - -OPENTRACK_API_EXPORT bool is_window_visible(const QWidget* widget) -{ - const QPoint p = widget->mapToGlobal(QPoint(0, 0)); - const QSize s = widget->size(); - - const POINT points[] = - { - { p.x(), p.y() }, - { p.x() + s.width(), p.y() }, - { p.x() + s.width(), p.y() + s.height() }, - { p.x(), p.y() + s.height() }, - { p.x() + s.width()/2, p.y() + s.height()/2 }, - }; - - for (const POINT& pt : points) - if (WindowFromPoint(pt) == (HWND) widget->winId()) - return true; - return false; -} - -#else -OPENTRACK_API_EXPORT bool is_window_visible(const QWidget*) -{ - return true; -} -#endif diff --git a/api/is-window-visible.hpp b/api/is-window-visible.hpp deleted file mode 100644 index 18c9251a..00000000 --- a/api/is-window-visible.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include <QWidget> -#include "export.hpp" - -OPENTRACK_API_EXPORT bool is_window_visible(const QWidget* widget); - diff --git a/cv/video-widget.cpp b/cv/video-widget.cpp index bc143378..0a26da39 100644 --- a/cv/video-widget.cpp +++ b/cv/video-widget.cpp @@ -47,14 +47,7 @@ void cv_video_widget::update_and_repaint() { QMutexLocker l(&mtx); - if (window_check_timer.elapsed_ms() > 250) - { - visible = is_window_visible(this); - window_check_timer.start(); - } - if (visible) - { if (_frame.empty() || !freshp) return; cv::cvtColor(_frame, _frame2, cv::COLOR_RGB2BGR); @@ -67,5 +60,4 @@ void cv_video_widget::update_and_repaint() texture = QImage((const unsigned char*) _frame3.data, _frame3.cols, _frame3.rows, QImage::Format_RGB888); freshp = false; update(); - } } diff --git a/cv/video-widget.hpp b/cv/video-widget.hpp index 46332afe..3e328977 100644 --- a/cv/video-widget.hpp +++ b/cv/video-widget.hpp @@ -8,7 +8,6 @@ #pragma once -#include "compat/timer.hpp" #include <opencv2/core/core.hpp> #include <memory> #include <QObject> @@ -33,7 +32,6 @@ private: QMutex mtx; QImage texture; QTimer timer; - Timer window_check_timer; cv::Mat _frame, _frame2, _frame3; - bool freshp, visible; + bool freshp; }; diff --git a/gui/main-window.cpp b/gui/main-window.cpp index 43b7158b..51925c49 100644 --- a/gui/main-window.cpp +++ b/gui/main-window.cpp @@ -477,7 +477,7 @@ void MainWindow::stopTracker() opts::set_teardown_flag(true); // XXX hack -sh 20160926 pose_update_timer.stop(); - ui.pose_display->rotateBy_real(0, 0, 0, 0, 0, 0); + ui.pose_display->rotateBy(0, 0, 0, 0, 0, 0); if (pTrackerDialog) pTrackerDialog->unregister_tracker(); diff --git a/pose-widget/glwidget.cpp b/pose-widget/glwidget.cpp index 0aa06350..8e7784ed 100644 --- a/pose-widget/glwidget.cpp +++ b/pose-widget/glwidget.cpp @@ -6,7 +6,6 @@ */ #include "glwidget.h" -#include "api/is-window-visible.hpp" #include "compat/util.hpp" #include <cmath> #include <algorithm> @@ -15,20 +14,20 @@ #include <QDebug> -GLWidget::GLWidget(QWidget *parent) : QWidget(parent), visible(true) +GLWidget::GLWidget(QWidget *parent) : QWidget(parent) { Q_INIT_RESOURCE(posewidget); front = QImage(QString(":/images/side1.png")); back = QImage(QString(":/images/side6.png")); - rotateBy_real(0, 0, 0, 0, 0, 0); + rotateBy(0, 0, 0, 0, 0, 0); } GLWidget::~GLWidget() { } -void GLWidget::paintEvent (QPaintEvent * event) +void GLWidget::paintEvent(QPaintEvent * event) { QPainter p(this); project_quad_texture(); @@ -37,18 +36,6 @@ void GLWidget::paintEvent (QPaintEvent * event) void GLWidget::rotateBy(double xAngle, double yAngle, double zAngle, double x, double y, double z) { - if (visible_timer.elapsed_ms() > 250) - { - visible = is_window_visible(this); - visible_timer.start(); - } - - if (visible) - rotateBy_real(xAngle, yAngle, zAngle, x, y, z); -} - -void GLWidget::rotateBy_real(double xAngle, double yAngle, double zAngle, double x, double y, double z) -{ using std::sin; using std::cos; diff --git a/pose-widget/glwidget.h b/pose-widget/glwidget.h index 7965130c..072ea644 100644 --- a/pose-widget/glwidget.h +++ b/pose-widget/glwidget.h @@ -12,7 +12,6 @@ #include <QPixmap> #include "api/plugin-api.hpp" #include "logic/simple-mat.hpp" -#include "compat/timer.hpp" #ifdef BUILD_pose_widget # define POSE_WIDGET_EXPORT Q_DECL_EXPORT @@ -31,9 +30,8 @@ public: GLWidget(QWidget *parent); ~GLWidget(); void rotateBy(double xAngle, double yAngle, double zAngle, double x, double y, double z); - void rotateBy_real(double xAngle, double yAngle, double zAngle, double x, double y, double z); protected: - void paintEvent (QPaintEvent *event) override; + void paintEvent(QPaintEvent *event) override; private: vec2 project(const vec3& point); vec3 project2(const vec3& point); @@ -45,6 +43,4 @@ private: QImage front; QImage back; QImage image; - Timer visible_timer; - bool visible; }; |