#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 ¤tcolor) { if (currentcolor == m_currentColor) return; m_currentColor = currentcolor; repaint(); } }