Files
qt6-migration-pipeline/Lts/Common/LtsWidgets/lts_splitter_handle.cpp
T

88 lines
1.8 KiB
C++
Executable File

#include "lts_splitter_handle.h"
#include <QPainter>
#include <QPaintEvent>
#include <QBrush>
#include <QEvent>
#include <QLinearGradient>
#include <QDebug>
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();
}
}