]> git.sesse.net Git - kdenlive/commitdiff
Fix color selection widget when getting average color for a region
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 20 Jun 2012 09:01:31 +0000 (11:01 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 20 Jun 2012 09:02:11 +0000 (11:02 +0200)
src/colorpickerwidget.cpp
src/colorpickerwidget.h

index 3c91f0fd5e8e68198dafe2403167c7558c6ae9b4..14daf208c8a024c0004842e82eccda0edd94acc8 100644 (file)
 #include <fixx11h.h>
 #endif 
 
+MyFrame::MyFrame(QWidget* parent) :
+    QFrame(parent)
+{
+    setFrameStyle(QFrame::Box | QFrame::Plain);
+    setWindowOpacity(0.5);
+    setWindowFlags(Qt::FramelessWindowHint);
+}
+
+// virtual
+void MyFrame::hideEvent ( QHideEvent * event )
+{
+    QFrame::hideEvent(event);
+    // We need a timer here since hiding the frame will trigger a monitor refresh timer that will
+    // repaint the monitor after 70 ms.
+    QTimer::singleShot(250, this, SIGNAL(getColor()));
+}
+
 
 ColorPickerWidget::ColorPickerWidget(QWidget *parent) :
         QWidget(parent),
@@ -59,10 +76,7 @@ ColorPickerWidget::ColorPickerWidget(QWidget *parent) :
     layout->addWidget(button);
     setFocusPolicy(Qt::StrongFocus);
 
-    m_grabRectFrame = new QFrame();
-    m_grabRectFrame->setFrameStyle(QFrame::Box | QFrame::Plain);
-    m_grabRectFrame->setWindowOpacity(0.5);
-    m_grabRectFrame->setWindowFlags(Qt::FramelessWindowHint);
+    m_grabRectFrame = new MyFrame();
     m_grabRectFrame->hide();
 }
 
@@ -74,6 +88,7 @@ ColorPickerWidget::~ColorPickerWidget()
 
 void ColorPickerWidget::slotGetAverageColor()
 {
+    disconnect(m_grabRectFrame, SIGNAL(getColor()), this, SLOT(slotGetAverageColor()));
     m_grabRect = m_grabRect.normalized();
 
     int numPixel = m_grabRect.width() * m_grabRect.height();
@@ -142,18 +157,18 @@ void ColorPickerWidget::mousePressEvent(QMouseEvent* event)
 void ColorPickerWidget::mouseReleaseEvent(QMouseEvent *event)
 {
     if (m_filterActive) {
-        m_grabRectFrame->hide();
-
         closeEventFilter();
 
         m_grabRect.setWidth(event->globalX() - m_grabRect.x());
         m_grabRect.setHeight(event->globalY() - m_grabRect.y());
 
         if (m_grabRect.width() * m_grabRect.height() == 0) {
+           m_grabRectFrame->hide();
             emit colorPicked(grabColor(event->globalPos()));
         } else {
             // delay because m_grabRectFrame does not hide immediately
-            QTimer::singleShot(50, this, SLOT(slotGetAverageColor()));
+            connect(m_grabRectFrame, SIGNAL(getColor()), this, SLOT(slotGetAverageColor()));
+           m_grabRectFrame->hide();
         }
 
         return;
index 16782e79d7656e9854e45ae6b5a75aa5a372b1bf..7838fcf4fab09c4e0d168c9482342e79c9b15c5d 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <QtCore>
 #include <QWidget>
+#include <QFrame>
 
 class QSpinBox;
 class QFrame;
@@ -31,6 +32,19 @@ class QFrame;
 #endif
 
 
+class MyFrame : public QFrame
+{
+    Q_OBJECT
+public:
+    MyFrame(QWidget* parent = 0);
+
+protected:
+    virtual void hideEvent ( QHideEvent * event );
+
+signals:
+    void getColor();
+};
+
 /**
  * @class ColorPickerWidget
  * @brief A widget to pick a color anywhere on the screen.