Files
GUI/src/components/SlideWidget.cpp
2023-09-07 17:30:26 +08:00

62 lines
1.3 KiB
C++

#include "SlideWidget.h"
#include <QScrollBar>
#include <QMouseEvent>
#include <QApplication>
#include <qdebug.h>
SlideWidget::SlideWidget(QWidget* parent):
QWidget(parent)
, mIsDragging(false)
, mOriginPosY(-1)
, mOriginScrollBarV(0)
{
}
SlideWidget::~SlideWidget()
{
}
void SlideWidget::setVerticalScrollBar(QScrollBar* bar)
{
if (!bar) return;
mVerticalScrollBar = bar;
}
void SlideWidget::mousePressEvent(QMouseEvent* ev)
{
mIsDragging = true;
mOriginPosY = ev->globalPos().y();
mOriginScrollBarV = this->verticalScrollBar()->value();
QWidget::mousePressEvent(ev);
}
void SlideWidget::mouseMoveEvent(QMouseEvent* ev)
{
if (!mIsDragging) {
QWidget::mouseMoveEvent(ev);
return;
}
if (this->verticalScrollBar()->isVisible()) {
int offset = mOriginPosY - ev->globalPos().y();
int nv = offset+mOriginScrollBarV;
int max = this->verticalScrollBar()->maximum();
int min = this->verticalScrollBar()->minimum();
nv = nv > max ? max : (nv < min ? min : nv);
this->verticalScrollBar()->setValue(nv);
}
QWidget::mouseMoveEvent(ev);
}
void SlideWidget::mouseReleaseEvent(QMouseEvent* ev)
{
if (!mIsDragging)mIsDragging = false;
QWidget::mouseReleaseEvent(ev);
}
QScrollBar* SlideWidget::verticalScrollBar()
{
return mVerticalScrollBar;
}