This commit is contained in:
Achraf k 2022-02-17 04:12:00 +01:00
parent a910b39a2f
commit 803bce5281
5 changed files with 131 additions and 119 deletions

View File

@ -6,28 +6,30 @@
#include <QPropertyAnimation>
#include "qtmaterialtoggle_internal.h"
#include "lib/qtmaterialstyle.h"
namespace md
{
/*!
* \class QtMaterialTogglePrivate
* \internal
*/
QtMaterialTogglePrivate::QtMaterialTogglePrivate(QtMaterialToggle *q)
TogglePrivate::TogglePrivate(Toggle *q)
: q_ptr(q)
{
}
QtMaterialTogglePrivate::~QtMaterialTogglePrivate()
TogglePrivate::~TogglePrivate()
{
}
void QtMaterialTogglePrivate::init()
void TogglePrivate::init()
{
Q_Q(QtMaterialToggle);
Q_Q(Toggle);
track = new QtMaterialToggleTrack(q);
thumb = new QtMaterialToggleThumb(q);
rippleOverlay = new QtMaterialToggleRippleOverlay(thumb, track, q);
track = new ToggleTrack(q);
thumb = new ToggleThumb(q);
rippleOverlay = new ToggleRippleOverlay(thumb, track, q);
stateMachine = new QStateMachine(q);
offState = new QState;
onState = new QState;
@ -106,9 +108,9 @@ void QtMaterialTogglePrivate::init()
QCoreApplication::processEvents();
}
void QtMaterialTogglePrivate::setupProperties()
void TogglePrivate::setupProperties()
{
Q_Q(QtMaterialToggle);
Q_Q(Toggle);
if (q->isEnabled()) {
const qreal shift = thumb->shift();
@ -134,35 +136,35 @@ void QtMaterialTogglePrivate::setupProperties()
* \class QtMaterialToggle
*/
QtMaterialToggle::QtMaterialToggle(QWidget *parent)
Toggle::Toggle(QWidget *parent)
: QAbstractButton(parent),
d_ptr(new QtMaterialTogglePrivate(this))
d_ptr(new TogglePrivate(this))
{
d_func()->init();
}
QtMaterialToggle::~QtMaterialToggle()
Toggle::~Toggle()
{
}
void QtMaterialToggle::setUseThemeColors(bool value)
void Toggle::setUseThemeColors(bool value)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
d->useThemeColors = value;
d->setupProperties();
}
bool QtMaterialToggle::useThemeColors() const
bool Toggle::useThemeColors() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
return d->useThemeColors;
}
void QtMaterialToggle::setDisabledColor(const QColor &color)
void Toggle::setDisabledColor(const QColor &color)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
d->disabledColor = color;
@ -170,20 +172,20 @@ void QtMaterialToggle::setDisabledColor(const QColor &color)
d->setupProperties();
}
QColor QtMaterialToggle::disabledColor() const
QColor Toggle::disabledColor() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
if (d->useThemeColors || !d->disabledColor.isValid()) {
return QtMaterialStyle::instance().themeColor("disabled");
return Style::instance().themeColor("disabled");
} else {
return d->disabledColor;
}
}
void QtMaterialToggle::setActiveColor(const QColor &color)
void Toggle::setActiveColor(const QColor &color)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
d->activeColor = color;
@ -191,20 +193,20 @@ void QtMaterialToggle::setActiveColor(const QColor &color)
d->setupProperties();
}
QColor QtMaterialToggle::activeColor() const
QColor Toggle::activeColor() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
if (d->useThemeColors || !d->activeColor.isValid()) {
return QtMaterialStyle::instance().themeColor("primary1");
return Style::instance().themeColor("primary1");
} else {
return d->activeColor;
}
}
void QtMaterialToggle::setInactiveColor(const QColor &color)
void Toggle::setInactiveColor(const QColor &color)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
d->inactiveColor = color;
@ -212,20 +214,20 @@ void QtMaterialToggle::setInactiveColor(const QColor &color)
d->setupProperties();
}
QColor QtMaterialToggle::inactiveColor() const
QColor Toggle::inactiveColor() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
if (d->useThemeColors || !d->inactiveColor.isValid()) {
return QtMaterialStyle::instance().themeColor("canvas");
return Style::instance().themeColor("canvas");
} else {
return d->inactiveColor;
}
}
void QtMaterialToggle::setTrackColor(const QColor &color)
void Toggle::setTrackColor(const QColor &color)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
d->trackColor = color;
@ -233,20 +235,20 @@ void QtMaterialToggle::setTrackColor(const QColor &color)
d->setupProperties();
}
QColor QtMaterialToggle::trackColor() const
QColor Toggle::trackColor() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
if (d->useThemeColors || !d->trackColor.isValid()) {
return QtMaterialStyle::instance().themeColor("accent3");
return Style::instance().themeColor("accent3");
} else {
return d->trackColor;
}
}
void QtMaterialToggle::setOrientation(Qt::Orientation orientation)
void Toggle::setOrientation(Qt::Orientation orientation)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
if (d->orientation == orientation) {
return;
@ -256,25 +258,25 @@ void QtMaterialToggle::setOrientation(Qt::Orientation orientation)
updateGeometry();
}
Qt::Orientation QtMaterialToggle::orientation() const
Qt::Orientation Toggle::orientation() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
return d->orientation;
}
QSize QtMaterialToggle::sizeHint() const
QSize Toggle::sizeHint() const
{
Q_D(const QtMaterialToggle);
Q_D(const Toggle);
return Qt::Horizontal == d->orientation
? QSize(64, 48)
: QSize(48, 64);
}
bool QtMaterialToggle::event(QEvent *event)
bool Toggle::event(QEvent *event)
{
Q_D(QtMaterialToggle);
Q_D(Toggle);
switch (event->type())
{
@ -292,7 +294,8 @@ bool QtMaterialToggle::event(QEvent *event)
return QAbstractButton::event(event);
}
void QtMaterialToggle::paintEvent(QPaintEvent *event)
void Toggle::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
}
}

View File

@ -2,10 +2,12 @@
#define QTMATERIALTOGGLE_H
#include <QtWidgets/QAbstractButton>
namespace md
{
class QtMaterialTogglePrivate;
class TogglePrivate;
class QtMaterialToggle : public QAbstractButton
class Toggle : public QAbstractButton
{
Q_OBJECT
@ -15,8 +17,8 @@ class QtMaterialToggle : public QAbstractButton
Q_PROPERTY(QColor trackColor WRITE setTrackColor READ trackColor)
public:
explicit QtMaterialToggle(QWidget *parent = 0);
~QtMaterialToggle();
explicit Toggle(QWidget *parent = 0);
~Toggle();
void setUseThemeColors(bool value);
bool useThemeColors() const;
@ -42,11 +44,11 @@ protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
const QScopedPointer<QtMaterialTogglePrivate> d_ptr;
const QScopedPointer<TogglePrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialToggle)
Q_DECLARE_PRIVATE(QtMaterialToggle)
Q_DISABLE_COPY(Toggle)
Q_DECLARE_PRIVATE(Toggle)
};
}
#endif // QTMATERIALTOGGLE_H

View File

@ -4,17 +4,19 @@
#include <QtWidgets/QGraphicsDropShadowEffect>
#include "qtmaterialtoggle.h"
#include "lib/qtmaterialripple.h"
namespace md
{
/*!
* \class QtMaterialToggleRippleOverlay
* \internal
*/
QtMaterialToggleRippleOverlay::QtMaterialToggleRippleOverlay(
QtMaterialToggleThumb *thumb,
QtMaterialToggleTrack *track,
QtMaterialToggle *parent)
: QtMaterialRippleOverlay(parent->parentWidget()),
ToggleRippleOverlay::ToggleRippleOverlay(
ToggleThumb *thumb,
ToggleTrack *track,
Toggle *parent)
: RippleOverlay(parent->parentWidget()),
m_toggle(parent),
m_thumb(thumb),
m_track(track)
@ -24,11 +26,11 @@ QtMaterialToggleRippleOverlay::QtMaterialToggleRippleOverlay(
thumb->installEventFilter(this);
}
QtMaterialToggleRippleOverlay::~QtMaterialToggleRippleOverlay()
ToggleRippleOverlay::~ToggleRippleOverlay()
{
}
void QtMaterialToggleRippleOverlay::addToggleRipple()
void ToggleRippleOverlay::addToggleRipple()
{
if (!m_toggle->isEnabled()) {
return;
@ -44,7 +46,7 @@ void QtMaterialToggleRippleOverlay::addToggleRipple()
w = m_thumb->width()/2+10;
}
QtMaterialRipple *ripple = new QtMaterialRipple(QPoint(10+t, 20+t));
Ripple *ripple = new Ripple(QPoint(10+t, 20+t));
ripple->setColor(m_track->trackColor());
ripple->setRadiusEndValue(w);
ripple->setOpacityStartValue(0.8);
@ -52,21 +54,21 @@ void QtMaterialToggleRippleOverlay::addToggleRipple()
addRipple(ripple);
}
bool QtMaterialToggleRippleOverlay::eventFilter(QObject *obj, QEvent *event)
bool ToggleRippleOverlay::eventFilter(QObject *obj, QEvent *event)
{
if (QEvent::Paint == event->type()) {
setGeometry(overlayGeometry());
QList<QtMaterialRipple *>::const_iterator i;
QList<QtMaterialRipple *> items = ripples();
QList<Ripple *>::const_iterator i;
QList<Ripple *> items = ripples();
QColor color = m_track->trackColor();
for (i = items.begin(); i != items.end(); ++i) {
(*i)->setColor(color);
}
}
return QtMaterialRippleOverlay::eventFilter(obj, event);
return RippleOverlay::eventFilter(obj, event);
}
QRect QtMaterialToggleRippleOverlay::overlayGeometry() const
QRect ToggleRippleOverlay::overlayGeometry() const
{
const qreal offset = m_thumb->offset();
if (Qt::Horizontal == m_toggle->orientation()) {
@ -81,7 +83,7 @@ QRect QtMaterialToggleRippleOverlay::overlayGeometry() const
* \internal
*/
QtMaterialToggleThumb::QtMaterialToggleThumb(QtMaterialToggle *parent)
ToggleThumb::ToggleThumb(Toggle *parent)
: QWidget(parent),
m_toggle(parent),
m_shift(0),
@ -98,11 +100,11 @@ QtMaterialToggleThumb::QtMaterialToggleThumb(QtMaterialToggle *parent)
parent->installEventFilter(this);
}
QtMaterialToggleThumb::~QtMaterialToggleThumb()
ToggleThumb::~ToggleThumb()
{
}
void QtMaterialToggleThumb::setShift(qreal shift)
void ToggleThumb::setShift(qreal shift)
{
if (m_shift == shift) {
return;
@ -112,7 +114,7 @@ void QtMaterialToggleThumb::setShift(qreal shift)
updateOffset();
}
bool QtMaterialToggleThumb::eventFilter(QObject *obj, QEvent *event)
bool ToggleThumb::eventFilter(QObject *obj, QEvent *event)
{
const QEvent::Type type = event->type();
@ -124,7 +126,7 @@ bool QtMaterialToggleThumb::eventFilter(QObject *obj, QEvent *event)
return QWidget::eventFilter(obj, event);
}
void QtMaterialToggleThumb::paintEvent(QPaintEvent *event)
void ToggleThumb::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
@ -158,7 +160,7 @@ void QtMaterialToggleThumb::paintEvent(QPaintEvent *event)
}
}
void QtMaterialToggleThumb::updateOffset()
void ToggleThumb::updateOffset()
{
const QSize s(Qt::Horizontal == m_toggle->orientation()
? size() : size().transposed());
@ -171,7 +173,7 @@ void QtMaterialToggleThumb::updateOffset()
* \internal
*/
QtMaterialToggleTrack::QtMaterialToggleTrack(QtMaterialToggle *parent)
ToggleTrack::ToggleTrack(Toggle *parent)
: QWidget(parent),
m_toggle(parent)
{
@ -180,17 +182,17 @@ QtMaterialToggleTrack::QtMaterialToggleTrack(QtMaterialToggle *parent)
parent->installEventFilter(this);
}
QtMaterialToggleTrack::~QtMaterialToggleTrack()
ToggleTrack::~ToggleTrack()
{
}
void QtMaterialToggleTrack::setTrackColor(const QColor &color)
void ToggleTrack::setTrackColor(const QColor &color)
{
m_trackColor = color;
update();
}
bool QtMaterialToggleTrack::eventFilter(QObject *obj, QEvent *event)
bool ToggleTrack::eventFilter(QObject *obj, QEvent *event)
{
const QEvent::Type type = event->type();
@ -200,7 +202,7 @@ bool QtMaterialToggleTrack::eventFilter(QObject *obj, QEvent *event)
return QWidget::eventFilter(obj, event);
}
void QtMaterialToggleTrack::paintEvent(QPaintEvent *event)
void ToggleTrack::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
@ -229,3 +231,4 @@ void QtMaterialToggleTrack::paintEvent(QPaintEvent *event)
painter.drawRoundedRect(r.adjusted(4, 14, -4, -14), w/2-4, w/2-4);
}
}
}

View File

@ -3,20 +3,22 @@
#include <QtWidgets/QWidget>
#include "lib/qtmaterialrippleoverlay.h"
namespace md
{
class QtMaterialToggle;
class QtMaterialToggleThumb;
class QtMaterialToggleTrack;
class Toggle;
class ToggleThumb;
class ToggleTrack;
class QtMaterialToggleRippleOverlay : public QtMaterialRippleOverlay
class ToggleRippleOverlay : public RippleOverlay
{
Q_OBJECT
public:
QtMaterialToggleRippleOverlay(QtMaterialToggleThumb *thumb,
QtMaterialToggleTrack *track,
QtMaterialToggle *parent);
~QtMaterialToggleRippleOverlay();
ToggleRippleOverlay(ToggleThumb *thumb,
ToggleTrack *track,
Toggle *parent);
~ToggleRippleOverlay();
protected slots:
void addToggleRipple();
@ -26,14 +28,14 @@ protected:
QRect overlayGeometry() const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QtMaterialToggleRippleOverlay)
Q_DISABLE_COPY(ToggleRippleOverlay)
QtMaterialToggle *const m_toggle;
QtMaterialToggleThumb *const m_thumb;
QtMaterialToggleTrack *const m_track;
Toggle *const m_toggle;
ToggleThumb *const m_thumb;
ToggleTrack *const m_track;
};
class QtMaterialToggleThumb : public QWidget
class ToggleThumb : public QWidget
{
Q_OBJECT
@ -41,8 +43,8 @@ class QtMaterialToggleThumb : public QWidget
Q_PROPERTY(QColor thumbColor WRITE setThumbColor READ thumbColor)
public:
QtMaterialToggleThumb(QtMaterialToggle *parent);
~QtMaterialToggleThumb();
ToggleThumb(Toggle *parent);
~ToggleThumb();
void setShift(qreal shift);
inline qreal shift() const;
@ -57,46 +59,46 @@ protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QtMaterialToggleThumb)
Q_DISABLE_COPY(ToggleThumb)
void updateOffset();
QtMaterialToggle *const m_toggle;
Toggle *const m_toggle;
QColor m_thumbColor;
qreal m_shift;
qreal m_offset;
};
inline qreal QtMaterialToggleThumb::shift() const
inline qreal ToggleThumb::shift() const
{
return m_shift;
}
inline qreal QtMaterialToggleThumb::offset() const
inline qreal ToggleThumb::offset() const
{
return m_offset;
}
inline void QtMaterialToggleThumb::setThumbColor(const QColor &color)
inline void ToggleThumb::setThumbColor(const QColor &color)
{
m_thumbColor = color;
update();
}
inline QColor QtMaterialToggleThumb::thumbColor() const
inline QColor ToggleThumb::thumbColor() const
{
return m_thumbColor;
}
class QtMaterialToggleTrack : public QWidget
class ToggleTrack : public QWidget
{
Q_OBJECT
Q_PROPERTY(QColor trackColor WRITE setTrackColor READ trackColor)
public:
QtMaterialToggleTrack(QtMaterialToggle *parent);
~QtMaterialToggleTrack();
ToggleTrack(Toggle *parent);
~ToggleTrack();
void setTrackColor(const QColor &color);
inline QColor trackColor() const;
@ -106,15 +108,15 @@ protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QtMaterialToggleTrack)
Q_DISABLE_COPY(ToggleTrack)
QtMaterialToggle *const m_toggle;
Toggle *const m_toggle;
QColor m_trackColor;
};
inline QColor QtMaterialToggleTrack::trackColor() const
inline QColor ToggleTrack::trackColor() const
{
return m_trackColor;
}
}
#endif // QTMATERIALTOGGLE_INTERNAL_H

View File

@ -2,31 +2,33 @@
#define QTMATERIALTOGGLE_P_H
#include <Qt>
namespace md
{
class QStateMachine;
class QState;
class QColor;
class QtMaterialToggle;
class QtMaterialToggleTrack;
class QtMaterialToggleThumb;
class QtMaterialToggleRippleOverlay;
class Toggle;
class ToggleTrack;
class ToggleThumb;
class ToggleRippleOverlay;
class QtMaterialTogglePrivate
class TogglePrivate
{
Q_DISABLE_COPY(QtMaterialTogglePrivate)
Q_DECLARE_PUBLIC(QtMaterialToggle)
Q_DISABLE_COPY(TogglePrivate)
Q_DECLARE_PUBLIC(Toggle)
public:
QtMaterialTogglePrivate(QtMaterialToggle *q);
~QtMaterialTogglePrivate();
TogglePrivate(Toggle *q);
~TogglePrivate();
void init();
void setupProperties();
QtMaterialToggle *const q_ptr;
QtMaterialToggleTrack *track;
QtMaterialToggleThumb *thumb;
QtMaterialToggleRippleOverlay *rippleOverlay;
Toggle *const q_ptr;
ToggleTrack *track;
ToggleThumb *thumb;
ToggleRippleOverlay *rippleOverlay;
QStateMachine *stateMachine;
QState *offState;
QState *onState;
@ -37,5 +39,5 @@ public:
QColor trackColor;
bool useThemeColors;
};
}
#endif // QTMATERIALTOGGLE_P_H