]> git.sesse.net Git - kdenlive/blobdiff - src/colorpickerwidget.cpp
Const'ref
[kdenlive] / src / colorpickerwidget.cpp
index 3c91f0fd5e8e68198dafe2403167c7558c6ae9b4..a9b8ce860973cb5aa22c3ad999bbf04efcb15664 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();
@@ -120,12 +135,14 @@ void ColorPickerWidget::slotGetAverageColor()
         emit displayMessage(i18n("Calculated average color for rectangle."), -1);
 
     emit colorPicked(QColor(sumR / numPixel, sumG / numPixel, sumB / numPixel));
+    emit disableCurrentFilter(false);
 }
 
 void ColorPickerWidget::mousePressEvent(QMouseEvent* event)
 {
     if (event->button() != Qt::LeftButton) {
         closeEventFilter();
+       emit disableCurrentFilter(false);
         event->accept();
         return;
     }
@@ -142,20 +159,20 @@ 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()));
+           emit disableCurrentFilter(false);
         } 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;
     }
     QWidget::mouseReleaseEvent(event);
@@ -173,6 +190,7 @@ void ColorPickerWidget::mouseMoveEvent(QMouseEvent* event)
 
 void ColorPickerWidget::slotSetupEventFilter()
 {
+    emit disableCurrentFilter(true);
     m_filterActive = true;
     setFocus();
     installEventFilter(this);
@@ -193,6 +211,7 @@ bool ColorPickerWidget::eventFilter(QObject *object, QEvent *event)
     // Close color picker on any key press
     if (event->type() == QEvent::KeyPress || event->type() == QEvent::ShortcutOverride) {
         closeEventFilter();
+       emit disableCurrentFilter(false);
         event->setAccepted(true);
         return true;
     }