diff --git a/components/components.pro b/components/components.pro index 8582164..17b8815 100644 --- a/components/components.pro +++ b/components/components.pro @@ -34,7 +34,9 @@ SOURCES = \ qtmaterialmenuitem_internal.cpp \ qtmaterialmenuitem.cpp \ qtmaterialcollapsiblemenu_internal.cpp \ - qtmaterialcollapsiblemenu.cpp + qtmaterialcollapsiblemenu.cpp \ + qtmaterialscrollbar_internal.cpp \ + qtmaterialscrollbar.cpp HEADERS = \ qtmaterialavatar_p.h \ qtmaterialavatar.h \ @@ -90,6 +92,9 @@ HEADERS = \ qtmaterialmenuitem.h \ qtmaterialcollapsiblemenu_internal.h \ qtmaterialcollapsiblemenu_p.h \ - qtmaterialcollapsiblemenu.h + qtmaterialcollapsiblemenu.h \ + qtmaterialscrollbar_internal.h \ + qtmaterialscrollbar_p.h \ + qtmaterialscrollbar.h RESOURCES += \ resources.qrc diff --git a/components/qtmaterialcollapsiblemenu.cpp b/components/qtmaterialcollapsiblemenu.cpp index 269e8c4..67d5018 100644 --- a/components/qtmaterialcollapsiblemenu.cpp +++ b/components/qtmaterialcollapsiblemenu.cpp @@ -1,13 +1,13 @@ -#include "xx/qtmaterialcollapsiblemenu.h" -#include "xx/qtmaterialcollapsiblemenu_p.h" -#include -#include +#include "qtmaterialcollapsiblemenu.h" +#include "qtmaterialcollapsiblemenu_p.h" +#include +#include #include -#include "xx/qtmaterialcollapsiblemenu_internal.h" -#include "xx/qtmaterialmenuitem.h" -#include "xx/qtmaterialscrollbar.h" -#include "xxlib/qtmaterialstyle.h" -#include "xxlib/qtmaterialstatetransitionevent.h" +#include "qtmaterialcollapsiblemenu_internal.h" +#include "qtmaterialmenuitem.h" +#include "qtmaterialscrollbar.h" +#include "lib/qtmaterialstyle.h" +#include "lib/qtmaterialstatetransitionevent.h" /*! * \class QtMaterialCollapsibleMenuPrivate diff --git a/components/qtmaterialcollapsiblemenu.h b/components/qtmaterialcollapsiblemenu.h index 0cc29bc..0e84da1 100644 --- a/components/qtmaterialcollapsiblemenu.h +++ b/components/qtmaterialcollapsiblemenu.h @@ -1,7 +1,7 @@ #ifndef QTMATERIALCOLLAPSIBLEMENU_H #define QTMATERIALCOLLAPSIBLEMENU_H -#include +#include #include class QtMaterialCollapsibleMenuPrivate; diff --git a/components/qtmaterialcollapsiblemenu_internal.cpp b/components/qtmaterialcollapsiblemenu_internal.cpp index f144daf..46bb11a 100644 --- a/components/qtmaterialcollapsiblemenu_internal.cpp +++ b/components/qtmaterialcollapsiblemenu_internal.cpp @@ -1,9 +1,9 @@ -#include "xx/qtmaterialcollapsiblemenu_internal.h" +#include "qtmaterialcollapsiblemenu_internal.h" #include #include #include -#include "xx/qtmaterialcollapsiblemenu.h" -#include "xxlib/qtmaterialstatetransition.h" +#include "qtmaterialcollapsiblemenu.h" +#include "lib/qtmaterialstatetransition.h" /*! * \class QtMaterialCollapsibleMenuStateMachine diff --git a/components/qtmaterialcollapsiblemenu_internal.h b/components/qtmaterialcollapsiblemenu_internal.h index 582684e..c721b00 100644 --- a/components/qtmaterialcollapsiblemenu_internal.h +++ b/components/qtmaterialcollapsiblemenu_internal.h @@ -2,8 +2,8 @@ #define QTMATERIALCOLLAPSIBLEMENU_INTERNAL_H #include -#include -#include +#include +#include #include class QState; diff --git a/components/qtmaterialmenuitem.cpp b/components/qtmaterialmenuitem.cpp index c2c9f57..1a4a46c 100644 --- a/components/qtmaterialmenuitem.cpp +++ b/components/qtmaterialmenuitem.cpp @@ -1,8 +1,8 @@ -#include "xx/qtmaterialmenuitem.h" -#include "xx/qtmaterialmenuitem_p.h" +#include "qtmaterialmenuitem.h" +#include "qtmaterialmenuitem_p.h" #include -#include "xx/qtmaterialmenuitem_internal.h" -#include "xxlib/qtmaterialstyle.h" +#include "qtmaterialmenuitem_internal.h" +#include "lib/qtmaterialstyle.h" /*! * \class QtMaterialMenuItemPrivate @@ -39,7 +39,7 @@ void QtMaterialMenuItemPrivate::init() font.setStyleName("Regular"); q->setFont(font); - q->setOverlayStyle(XXMaterial::GrayOverlay); + q->setOverlayStyle(Material::GrayOverlay); q->setForegroundColor(QtMaterialStyle::instance().themeColor("text")); q->setCornerRadius(0); } @@ -97,7 +97,7 @@ void QtMaterialMenuItem::paintForeground(QPainter *painter) QRect textGeometry(QPoint(14, base.height()/2), textSize); QRect iconGeometry(QPoint(14, (height()-iconSize().height())/2), iconSize()); - if (XXMaterial::LeftIcon == iconPlacement()) { + if (Material::LeftIcon == iconPlacement()) { textGeometry.translate(iw, 0); } else { iconGeometry.translate(textSize.width() + IconPadding, 0); diff --git a/components/qtmaterialmenuitem.h b/components/qtmaterialmenuitem.h index 9239556..23fe020 100644 --- a/components/qtmaterialmenuitem.h +++ b/components/qtmaterialmenuitem.h @@ -1,7 +1,7 @@ #ifndef QTMATERIALMENUITEM_H #define QTMATERIALMENUITEM_H -#include "xx/qtmaterialflatbutton.h" +#include "qtmaterialflatbutton.h" class QtMaterialMenuItemPrivate; diff --git a/components/qtmaterialmenuitem_internal.cpp b/components/qtmaterialmenuitem_internal.cpp index 0f106da..6a8c287 100644 --- a/components/qtmaterialmenuitem_internal.cpp +++ b/components/qtmaterialmenuitem_internal.cpp @@ -1,4 +1,4 @@ -#include "xx/qtmaterialmenuitem_internal.h" +#include "qtmaterialmenuitem_internal.h" #include #include diff --git a/components/qtmaterialmenuitem_internal.h b/components/qtmaterialmenuitem_internal.h index ec62fbe..5733406 100644 --- a/components/qtmaterialmenuitem_internal.h +++ b/components/qtmaterialmenuitem_internal.h @@ -3,7 +3,7 @@ #include #include -#include "xx/qtmaterialmenuitem.h" +#include "qtmaterialmenuitem.h" class QtMaterialMenuItem; diff --git a/components/qtmaterialmenuitem_p.h b/components/qtmaterialmenuitem_p.h index c4f8718..d60ec3a 100644 --- a/components/qtmaterialmenuitem_p.h +++ b/components/qtmaterialmenuitem_p.h @@ -1,7 +1,7 @@ #ifndef QTMATERIALMENUITEM_P_H #define QTMATERIALMENUITEM_P_H -#include "xx/qtmaterialflatbutton_p.h" +#include "qtmaterialflatbutton_p.h" class QtMaterialMenuItem; class QtMaterialMenuItemStateMachine; diff --git a/components/qtmaterialscrollbar.cpp b/components/qtmaterialscrollbar.cpp new file mode 100644 index 0000000..75eb219 --- /dev/null +++ b/components/qtmaterialscrollbar.cpp @@ -0,0 +1,195 @@ +#include "qtmaterialscrollbar.h" +#include "qtmaterialscrollbar_p.h" +#include +#include "qtmaterialscrollbar_internal.h" +#include "lib/qtmaterialstyle.h" + +/*! + * \class QtMaterialScrollBarPrivate + * \internal + */ + +QtMaterialScrollBarPrivate::QtMaterialScrollBarPrivate(QtMaterialScrollBar *q) + : q_ptr(q) +{ +} + +QtMaterialScrollBarPrivate::~QtMaterialScrollBarPrivate() +{ +} + +void QtMaterialScrollBarPrivate::init() +{ + Q_Q(QtMaterialScrollBar); + + stateMachine = new QtMaterialScrollBarStateMachine(q); + hideOnMouseOut = true; + useThemeColors = true; + + q->setMouseTracking(true); + q->setStyle(&QtMaterialStyle::instance()); + q->setStyleSheet("QScrollBar:vertical { margin: 0; }" + "QScrollBar::add-line:vertical { height: 0; margin: 0; }" + "QScrollBar::sub-line:vertical { height: 0; margin: 0; }"); + + stateMachine->start(); +} + +/*! + * \class QtMaterialScrollBar + */ + +QtMaterialScrollBar::QtMaterialScrollBar(QWidget *parent) + : QScrollBar(parent), + d_ptr(new QtMaterialScrollBarPrivate(this)) +{ + d_func()->init(); +} + +QtMaterialScrollBar::~QtMaterialScrollBar() +{ +} + +/*! + * \reimp + */ +QSize QtMaterialScrollBar::sizeHint() const +{ + if (Qt::Horizontal == orientation()) { + return QSize(1, 10); + } else { + return QSize(10, 1); + } +} + +void QtMaterialScrollBar::setUseThemeColors(bool value) +{ + Q_D(QtMaterialScrollBar); + + if (d->useThemeColors == value) { + return; + } + + d->useThemeColors = value; + update(); +} + +bool QtMaterialScrollBar::useThemeColors() const +{ + Q_D(const QtMaterialScrollBar); + + return d->useThemeColors; +} + +void QtMaterialScrollBar::setCanvasColor(const QColor &color) +{ + Q_D(QtMaterialScrollBar); + + d->canvasColor = color; + setUseThemeColors(false); +} + +QColor QtMaterialScrollBar::canvasColor() const +{ + Q_D(const QtMaterialScrollBar); + + if (d->useThemeColors || !d->canvasColor.isValid()) { + return parentWidget()->palette().color(backgroundRole()); + } else { + return d->canvasColor; + } +} + +void QtMaterialScrollBar::setBackgroundColor(const QColor &color) +{ + Q_D(QtMaterialScrollBar); + + d->backgroundColor = color; + setUseThemeColors(false); +} + +QColor QtMaterialScrollBar::backgroundColor() const +{ + Q_D(const QtMaterialScrollBar); + + if (d->useThemeColors || !d->backgroundColor.isValid()) { + return QtMaterialStyle::instance().themeColor("border"); + } else { + return d->backgroundColor; + } +} + +void QtMaterialScrollBar::setSliderColor(const QColor &color) +{ + Q_D(QtMaterialScrollBar); + + d->sliderColor = color; + setUseThemeColors(false); +} + +QColor QtMaterialScrollBar::sliderColor() const +{ + Q_D(const QtMaterialScrollBar); + + if (d->useThemeColors || !d->sliderColor.isValid()) { + return QtMaterialStyle::instance().themeColor("primary1"); + } else { + return d->sliderColor; + } +} + +void QtMaterialScrollBar::setHideOnMouseOut(bool value) +{ + Q_D(QtMaterialScrollBar); + + d->hideOnMouseOut = value; + update(); +} + +bool QtMaterialScrollBar::hideOnMouseOut() const +{ + Q_D(const QtMaterialScrollBar); + + return d->hideOnMouseOut; +} + +/*! + * \reimp + */ +void QtMaterialScrollBar::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + + Q_D(QtMaterialScrollBar); + + QPainter painter(this); + painter.fillRect(rect(), canvasColor()); + + int x, y, w, h; + rect().getRect(&x, &y, &w, &h); + + QMargins margins(2, 2, 2, 2); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + brush.setColor(backgroundColor()); + painter.setBrush(brush); + painter.setPen(Qt::NoPen); + + if (d->hideOnMouseOut) { + painter.setOpacity(d->stateMachine->opacity()); + } + + painter.drawRect(rect().marginsRemoved(margins)); + + const qreal q = h / static_cast(maximum()-minimum()+pageStep()-1); + + QRect handle = Qt::Horizontal == orientation() + ? QRect(sliderPosition()*q, y, pageStep()*q, h) + : QRect(x, sliderPosition()*q, w, pageStep()*q); + + brush.setColor(sliderColor()); + painter.setBrush(brush); + + painter.drawRect(handle.marginsRemoved(margins)); +} diff --git a/components/qtmaterialscrollbar.h b/components/qtmaterialscrollbar.h new file mode 100644 index 0000000..591c9f1 --- /dev/null +++ b/components/qtmaterialscrollbar.h @@ -0,0 +1,47 @@ +#ifndef QTMATERIALSCROLLBAR_H +#define QTMATERIALSCROLLBAR_H + +#include + +class QtMaterialScrollBarPrivate; + +class QtMaterialScrollBar : public QScrollBar +{ + Q_OBJECT + + Q_PROPERTY(QColor canvasColor WRITE setCanvasColor READ canvasColor) + Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor) + Q_PROPERTY(QColor sliderColor WRITE setSliderColor READ sliderColor) + +public: + explicit QtMaterialScrollBar(QWidget *parent = 0); + ~QtMaterialScrollBar(); + + QSize sizeHint() const Q_DECL_OVERRIDE; + + void setUseThemeColors(bool value); + bool useThemeColors() const; + + void setCanvasColor(const QColor &color); + QColor canvasColor() const; + + void setBackgroundColor(const QColor &color); + QColor backgroundColor() const; + + void setSliderColor(const QColor &color); + QColor sliderColor() const; + + void setHideOnMouseOut(bool value); + bool hideOnMouseOut() const; + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + + const QScopedPointer d_ptr; + +private: + Q_DISABLE_COPY(QtMaterialScrollBar) + Q_DECLARE_PRIVATE(QtMaterialScrollBar) +}; + +#endif // QTMATERIALSCROLLBAR_H diff --git a/components/qtmaterialscrollbar_internal.cpp b/components/qtmaterialscrollbar_internal.cpp new file mode 100644 index 0000000..e473698 --- /dev/null +++ b/components/qtmaterialscrollbar_internal.cpp @@ -0,0 +1,51 @@ +#include "qtmaterialscrollbar_internal.h" +#include +#include + +/*! + * \class QtMaterialScrollBarStateMachine + * \internal + */ + +/*! + * \internal + */ +QtMaterialScrollBarStateMachine::QtMaterialScrollBarStateMachine(QtMaterialScrollBar *parent) + : QStateMachine(parent), + m_scrollBar(parent), + m_focusState(new QState), + m_blurState(new QState), + m_opacity(0) +{ + Q_ASSERT(parent); + + addState(m_focusState); + addState(m_blurState); + setInitialState(m_blurState); + + QEventTransition *transition; + + transition = new QEventTransition(parent, QEvent::HoverEnter); + transition->setTargetState(m_focusState); + m_blurState->addTransition(transition); + + transition = new QEventTransition(parent, QEvent::HoverLeave); + transition->setTargetState(m_blurState); + m_focusState->addTransition(transition); + + m_focusState->assignProperty(this, "opacity", 1); + m_blurState->assignProperty(this, "opacity", 0); + + QPropertyAnimation *animation; + + animation = new QPropertyAnimation(this, "opacity", this); + animation->setDuration(340); + addDefaultAnimation(animation); +} + +/*! + * \internal + */ +QtMaterialScrollBarStateMachine::~QtMaterialScrollBarStateMachine() +{ +} diff --git a/components/qtmaterialscrollbar_internal.h b/components/qtmaterialscrollbar_internal.h new file mode 100644 index 0000000..adffdbd --- /dev/null +++ b/components/qtmaterialscrollbar_internal.h @@ -0,0 +1,40 @@ +#ifndef QTMATERIALSCROLLBAR_INTERNAL_H +#define QTMATERIALSCROLLBAR_INTERNAL_H + +#include +#include "qtmaterialscrollbar.h" + +class QtMaterialScrollBarStateMachine : public QStateMachine +{ + Q_OBJECT + + Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity) + +public: + QtMaterialScrollBarStateMachine(QtMaterialScrollBar *parent); + ~QtMaterialScrollBarStateMachine(); + + inline void setOpacity(qreal opacity); + inline qreal opacity() const; + +private: + Q_DISABLE_COPY(QtMaterialScrollBarStateMachine) + + QtMaterialScrollBar *const m_scrollBar; + QState *m_focusState; + QState *m_blurState; + qreal m_opacity; +}; + +inline void QtMaterialScrollBarStateMachine::setOpacity(qreal opacity) +{ + m_opacity = opacity; + m_scrollBar->update(); +} + +inline qreal QtMaterialScrollBarStateMachine::opacity() const +{ + return m_opacity; +} + +#endif // QTMATERIALSCROLLBAR_INTERNAL_H diff --git a/components/qtmaterialscrollbar_p.h b/components/qtmaterialscrollbar_p.h new file mode 100644 index 0000000..1d22cc0 --- /dev/null +++ b/components/qtmaterialscrollbar_p.h @@ -0,0 +1,30 @@ +#ifndef QTMATERIALSCROLLBAR_P_H +#define QTMATERIALSCROLLBAR_P_H + +#include +#include + +class QtMaterialScrollBar; +class QtMaterialScrollBarStateMachine; + +class QtMaterialScrollBarPrivate +{ + Q_DISABLE_COPY(QtMaterialScrollBarPrivate) + Q_DECLARE_PUBLIC(QtMaterialScrollBar) + +public: + QtMaterialScrollBarPrivate(QtMaterialScrollBar *q); + ~QtMaterialScrollBarPrivate(); + + void init(); + + QtMaterialScrollBar *const q_ptr; + QtMaterialScrollBarStateMachine *stateMachine; + QColor backgroundColor; + QColor sliderColor; + QColor canvasColor; + bool hideOnMouseOut; + bool useThemeColors; +}; + +#endif // QTMATERIALSCROLLBAR_P_H diff --git a/examples/selectfieldsettingseditor.cpp b/examples/selectfieldsettingseditor.cpp index 2e3c374..3168997 100644 --- a/examples/selectfieldsettingseditor.cpp +++ b/examples/selectfieldsettingseditor.cpp @@ -1,9 +1,9 @@ -#include "yy/selectfieldsettingseditor.h" +#include "selectfieldsettingseditor.h" #include #include #include -#include "xx/qtmaterialselectfield.h" -#include "xx/qtmaterialmenuitem.h" +#include "qtmaterialselectfield.h" +#include "qtmaterialmenuitem.h" SelectFieldSettingsEditor::SelectFieldSettingsEditor(QWidget *parent) : QWidget(parent),