From 9c82a7f081c5f1574dc7f209798c9540648041ec Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 24 Oct 2012 00:38:50 +0200 Subject: [PATCH] Highlight ruler cursor on mouseover: http://kdenlive.org/mantis/view.php?id=2786 --- src/customruler.cpp | 29 +++++++++++++++++++++++++---- src/customruler.h | 4 ++-- src/smallruler.cpp | 22 +++++++++++++++++++++- src/smallruler.h | 2 ++ 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/customruler.cpp b/src/customruler.cpp index 1a32d778..82485665 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -59,7 +59,8 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) : m_lastSeekPosition(SEEK_INACTIVE), m_clickedGuide(-1), m_rate(-1), - m_mouseMove(NO_MOVE) + m_mouseMove(NO_MOVE), + m_cursorColor(palette().text()) { setFont(KGlobalSettings::toolBarFont()); QFontMetricsF fontMetrics(font()); @@ -216,7 +217,17 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) update(min * m_factor - m_offset - 2, 0, (max - min) * m_factor + 4, height()); } else { - int pos = (int)((event->x() + offset())); + int pos = (int)((event->x() + m_offset)); + if (m_cursorColor == palette().text() && qAbs(pos - m_view->cursorPos() * m_factor) < 7) { + // Mouse is over cursor + m_cursorColor = palette().highlight(); + update(m_view->cursorPos() * m_factor - m_offset - 10, 0, 20, height()); + } + else if (m_cursorColor == palette().highlight() && qAbs(pos - m_view->cursorPos() * m_factor) >= 7) { + m_cursorColor = palette().text(); + update(m_view->cursorPos() * m_factor - m_offset - 10, 0, 20, height()); + } + if (event->y() <= 10) setCursor(Qt::ArrowCursor); else if (qAbs(pos - m_zoneStart * m_factor) < 4) { setCursor(KCursor("left_side", Qt::SizeHorCursor)); @@ -239,6 +250,16 @@ void CustomRuler::mouseMoveEvent(QMouseEvent * event) } +// virtual +void CustomRuler::leaveEvent(QEvent * event) +{ + QWidget::leaveEvent(event); + if (m_cursorColor == palette().highlight()) { + m_cursorColor = palette().text(); + update(); + } +} + // virtual void CustomRuler::wheelEvent(QWheelEvent * e) { @@ -282,7 +303,7 @@ void CustomRuler::slotCursorMoved(int oldpos, int newpos) max = qMax(max, m_lastSeekPosition); } } - update(min * m_factor - offset() - 6, BIG_MARK_X, (max - min) * m_factor + 14, MAX_HEIGHT - BIG_MARK_X); + update(min * m_factor - m_offset - 6, BIG_MARK_X, (max - min) * m_factor + 14, MAX_HEIGHT - BIG_MARK_X); } void CustomRuler::updateRuler() @@ -461,7 +482,7 @@ void CustomRuler::paintEvent(QPaintEvent *e) const int value = m_view->cursorPos() * m_factor - m_offset; QPolygon pa(3); pa.setPoints(3, value - 6, BIG_MARK_X, value + 6, BIG_MARK_X, value, MAX_HEIGHT - 1); - p.setBrush(palette().text()); + p.setBrush(m_cursorColor); p.setPen(Qt::NoPen); p.drawPolygon(pa); diff --git a/src/customruler.h b/src/customruler.h index da91fb6b..abdc5944 100644 --- a/src/customruler.h +++ b/src/customruler.h @@ -57,6 +57,7 @@ protected: virtual void mousePressEvent(QMouseEvent * event); virtual void mouseReleaseEvent(QMouseEvent * event); virtual void mouseMoveEvent(QMouseEvent * event); + virtual void leaveEvent(QEvent * event); private: Timecode m_timecode; @@ -64,8 +65,6 @@ private: int m_zoneStart; int m_zoneEnd; int m_duration; - QColor m_bgColor; - QColor m_cursorColor; QColor m_zoneColor; double m_textSpacing; double m_factor; @@ -83,6 +82,7 @@ private: int m_startRate; MOUSE_MOVE m_mouseMove; QMenu *m_goMenu; + QBrush m_cursorColor; public slots: diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 0cf185b0..24a016dd 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -39,6 +39,7 @@ SmallRuler::SmallRuler(MonitorManager *manager, Render *render, QWidget *parent) ,m_manager(manager) ,m_render(render) ,m_lastSeekPosition(SEEK_INACTIVE) + ,m_cursorColor(palette().text()) { m_zoneStart = 10; m_zoneEnd = 60; @@ -135,10 +136,20 @@ void SmallRuler::mousePressEvent(QMouseEvent * event) } } +// virtual +void SmallRuler::leaveEvent(QEvent * event) +{ + QWidget::leaveEvent(event); + if (m_cursorColor == palette().highlight()) { + m_cursorColor = palette().text(); + update(); + } +} // virtual void SmallRuler::mouseMoveEvent(QMouseEvent * event) { + QWidget::mouseMoveEvent(event); const int pos = event->x() / m_scale; if (event->buttons() & Qt::LeftButton) { m_render->seekToFrame(pos); @@ -146,6 +157,15 @@ void SmallRuler::mouseMoveEvent(QMouseEvent * event) update(); } else { + if (m_cursorColor == palette().text() && qAbs(pos - m_cursorFramePosition) * m_scale < 7) { + // Mouse is over cursor + m_cursorColor = palette().highlight(); + update(); + } + else if (m_cursorColor == palette().highlight() && qAbs(pos - m_cursorFramePosition) * m_scale >= 7) { + m_cursorColor = palette().text(); + update(); + } if (qAbs((pos - m_zoneStart) * m_scale) < 4) { setToolTip(i18n("Zone start: %1", m_manager->timecode().getTimecodeFromFrames(m_zoneStart))); } else if (qAbs((pos - m_zoneEnd) * m_scale) < 4) { @@ -236,7 +256,7 @@ void SmallRuler::paintEvent(QPaintEvent *e) // draw pointer QPolygon pa(3); pa.setPoints(3, cursorPos - 6, 10, cursorPos + 6, 10, cursorPos/*+0*/, 4); - p.setBrush(palette().text()); + p.setBrush(m_cursorColor); p.setPen(Qt::NoPen); p.drawPolygon(pa); diff --git a/src/smallruler.h b/src/smallruler.h index 6080ca2e..5e0a5736 100644 --- a/src/smallruler.h +++ b/src/smallruler.h @@ -47,6 +47,7 @@ public: protected: virtual void paintEvent(QPaintEvent *e); virtual void resizeEvent(QResizeEvent *); + virtual void leaveEvent(QEvent * event); private: int m_cursorPosition; @@ -63,6 +64,7 @@ private: MonitorManager *m_manager; Render *m_render; int m_lastSeekPosition; + QBrush m_cursorColor; void updatePixmap(); public slots: -- 2.39.2