X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcolorpickerwidget.cpp;h=a9b8ce860973cb5aa22c3ad999bbf04efcb15664;hb=3c844989ad9fdb96bb9258a990a9874773b3d792;hp=3c91f0fd5e8e68198dafe2403167c7558c6ae9b4;hpb=5921b4904043ceb41bf887bb87836ae69a4b07b7;p=kdenlive diff --git a/src/colorpickerwidget.cpp b/src/colorpickerwidget.cpp index 3c91f0fd..a9b8ce86 100644 --- a/src/colorpickerwidget.cpp +++ b/src/colorpickerwidget.cpp @@ -38,6 +38,23 @@ #include #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; }