80 lines
3.0 KiB
C++
80 lines
3.0 KiB
C++
#include "ElaScrollArea.h"
|
|
|
|
#include <QScrollBar>
|
|
#include <QScroller>
|
|
|
|
#include "ElaScrollAreaPrivate.h"
|
|
#include "ElaScrollBar.h"
|
|
|
|
ElaScrollArea::ElaScrollArea(QWidget* parent)
|
|
: QScrollArea(parent), d_ptr(new ElaScrollAreaPrivate())
|
|
{
|
|
Q_D(ElaScrollArea);
|
|
d->q_ptr = this;
|
|
setObjectName("ElaScrollArea");
|
|
setStyleSheet("#ElaScrollArea{background-color:transparent;border:0px;}");
|
|
setHorizontalScrollBar(new ElaScrollBar(this));
|
|
setVerticalScrollBar(new ElaScrollBar(this));
|
|
QScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
QScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
}
|
|
|
|
ElaScrollArea::~ElaScrollArea()
|
|
{
|
|
}
|
|
|
|
void ElaScrollArea::setIsGrabGesture(bool isEnable, qreal mousePressEventDelay)
|
|
{
|
|
if (isEnable)
|
|
{
|
|
QScroller::grabGesture(this->viewport(), QScroller::LeftMouseButtonGesture);
|
|
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
|
|
properties.setScrollMetric(QScrollerProperties::MousePressEventDelay, mousePressEventDelay);
|
|
properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.35);
|
|
properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, 0.5);
|
|
properties.setScrollMetric(QScrollerProperties::FrameRate, QScrollerProperties::Fps60);
|
|
QScroller::scroller(this->viewport())->setScrollerProperties(properties);
|
|
}
|
|
else
|
|
{
|
|
QScroller::ungrabGesture(this->viewport());
|
|
}
|
|
}
|
|
|
|
void ElaScrollArea::setIsOverShoot(Qt::Orientation orientation, bool isEnable)
|
|
{
|
|
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
|
|
properties.setScrollMetric(orientation == Qt::Horizontal ? QScrollerProperties::HorizontalOvershootPolicy : QScrollerProperties::VerticalOvershootPolicy, isEnable ? QScrollerProperties::OvershootAlwaysOn : QScrollerProperties::OvershootAlwaysOff);
|
|
QScroller::scroller(this->viewport())->setScrollerProperties(properties);
|
|
}
|
|
|
|
bool ElaScrollArea::getIsOverShoot(Qt::Orientation orientation) const
|
|
{
|
|
QScrollerProperties properties = QScroller::scroller(this->viewport())->scrollerProperties();
|
|
return properties.scrollMetric(orientation == Qt::Horizontal ? QScrollerProperties::HorizontalOvershootPolicy : QScrollerProperties::VerticalOvershootPolicy).toBool();
|
|
}
|
|
|
|
void ElaScrollArea::setIsAnimation(Qt::Orientation orientation, bool isAnimation)
|
|
{
|
|
if (orientation == Qt::Horizontal)
|
|
{
|
|
dynamic_cast<ElaScrollBar*>(this->horizontalScrollBar())->setIsAnimation(isAnimation);
|
|
}
|
|
else
|
|
{
|
|
dynamic_cast<ElaScrollBar*>(this->verticalScrollBar())->setIsAnimation(isAnimation);
|
|
}
|
|
}
|
|
|
|
bool ElaScrollArea::getIsAnimation(Qt::Orientation orientation) const
|
|
{
|
|
if (orientation == Qt::Horizontal)
|
|
{
|
|
return dynamic_cast<ElaScrollBar*>(this->horizontalScrollBar())->getIsAnimation();
|
|
}
|
|
else
|
|
{
|
|
return dynamic_cast<ElaScrollBar*>(this->verticalScrollBar())->getIsAnimation();
|
|
}
|
|
}
|