From 754ae1a54132eb41332267fc70a42595017c5a6e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 16 Jul 2016 23:44:31 +0200 Subject: gui, tracker/{aruco,pt}, api: detect whether widget is visible on screen Sadly, it's only implemented right now on win32. Remove "set enabled" code for the video widget since it only works for explicit window minimization, not covering by other windows. --- tracker-pt/pt_video_widget.cpp | 29 ++++++++++++++++++++++------- tracker-pt/pt_video_widget.h | 18 ++++-------------- 2 files changed, 26 insertions(+), 21 deletions(-) (limited to 'tracker-pt') diff --git a/tracker-pt/pt_video_widget.cpp b/tracker-pt/pt_video_widget.cpp index 99f86eb2..38d7a5e8 100644 --- a/tracker-pt/pt_video_widget.cpp +++ b/tracker-pt/pt_video_widget.cpp @@ -1,20 +1,28 @@ /* Copyright (c) 2012 Patrick Ruoff - * Copyright (c) 2015 Stanislaw Halik + * Copyright (c) 2014-2016 Stanislaw Halik * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. - * - * 20130312, WVR: Add 7 lines to resizeGL after resize_frame. This should lower CPU-load. */ #include "pt_video_widget.h" #include +#include "opentrack/is-window-visible.hpp" + +PTVideoWidget::PTVideoWidget(QWidget* parent) : + QWidget(parent), + freshp(false) +{ + connect(&timer, SIGNAL(timeout()), this, SLOT(update_and_repaint())); + timer.start(50); +} + void PTVideoWidget::update_image(const cv::Mat& frame) { QMutexLocker foo(&mtx); - + if (!freshp) { if (_frame.cols != frame.cols || _frame.rows != frame.rows) @@ -27,20 +35,27 @@ void PTVideoWidget::update_image(const cv::Mat& frame) } } +void PTVideoWidget::paintEvent(QPaintEvent* e) +{ + QMutexLocker foo(&mtx); + QPainter painter(this); + painter.drawImage(e->rect(), texture); +} + void PTVideoWidget::update_and_repaint() { - if (static_cast(parent())->isEnabled()) + if (is_window_visible(this)) { QMutexLocker foo(&mtx); if (_frame.empty() || !freshp) return; cv::cvtColor(_frame, _frame2, cv::COLOR_RGB2BGR); - + if (_frame3.cols != width() || _frame3.rows != height()) _frame3 = cv::Mat(height(), width(), CV_8U); cv::resize(_frame2, _frame3, cv::Size(width(), height()), 0, 0, cv::INTER_NEAREST); - + texture = QImage((const unsigned char*) _frame3.data, _frame3.cols, _frame3.rows, QImage::Format_RGB888); freshp = false; update(); diff --git a/tracker-pt/pt_video_widget.h b/tracker-pt/pt_video_widget.h index d9144ac0..c2957876 100644 --- a/tracker-pt/pt_video_widget.h +++ b/tracker-pt/pt_video_widget.h @@ -1,5 +1,5 @@ /* Copyright (c) 2012 Patrick Ruoff - * Copyright (c) 2014 Stanislaw Halik + * Copyright (c) 2014-2016 Stanislaw Halik * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -19,25 +19,15 @@ #include #include -class PTVideoWidget : public QWidget +class PTVideoWidget final : public QWidget { Q_OBJECT public: - PTVideoWidget(QWidget *parent) : - QWidget(parent), - freshp(false) - { - connect(&timer, SIGNAL(timeout()), this, SLOT(update_and_repaint())); - timer.start(50); - } + PTVideoWidget(QWidget *parent); void update_image(const cv::Mat &frame); protected slots: - void paintEvent( QPaintEvent* e ) { - QMutexLocker foo(&mtx); - QPainter painter(this); - painter.drawImage(e->rect(), texture); - } + void paintEvent(QPaintEvent* e) override; void update_and_repaint(); private: QMutex mtx; -- cgit v1.2.3