#include "lts_splitter_handle.h" #include #include #include #include #include #include namespace LtsWidgets { LtsSplitterHandle::LtsSplitterHandle(Qt::Orientation orientation, QSplitter* parent) : QSplitterHandle(orientation, parent) { auto bgrole = backgroundRole(); QPalette p = palette(); m_endColor = p.color(bgrole); m_colorAnimation = new QPropertyAnimation(this, "splittercolor"); m_colorAnimation->setDuration(1000); m_colorAnimation->setStartValue(m_currentColor); m_colorAnimation->setEndValue(m_endColor); m_colorAnimation->setLoopCount(2); connect(m_colorAnimation, &QPropertyAnimation::finished, this, [this] { m_animate = false; m_currentColor = m_endColor; repaint(); }); } LtsSplitterHandle::~LtsSplitterHandle() {} void LtsSplitterHandle::paintEvent(QPaintEvent* event) { if (!m_animate) { QSplitterHandle::paintEvent(event); return; } QPainter painter(this); QLinearGradient gradient; gradient.setColorAt(0, m_currentColor); if (orientation() == Qt::Horizontal) { gradient.setStart(rect().left(), rect().height() / 2); gradient.setFinalStop(rect().height(), rect().height() / 2); } else { gradient.setStart(rect().width() / 2, rect().top()); gradient.setFinalStop(rect().width() / 2, rect().bottom() / 2); } painter.fillRect(event->rect(), QBrush(gradient)); } void LtsSplitterHandle::animate() { if (m_colorAnimation->state() == QPropertyAnimation::Running) return; m_currentColor = QColor(239, 87, 50); m_animate = true; m_colorAnimation->start(); } QColor LtsSplitterHandle::splitterColor() const { return m_currentColor; } void LtsSplitterHandle::setCurrentColor(const QColor& currentcolor) { if (currentcolor == m_currentColor) return; m_currentColor = currentcolor; repaint(); } } // namespace LtsWidgets