diff --git a/README.md b/README.md index d6f2499..c8d0daf 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ I finally took the time to go through and clean up this code. The build includes - + - @@ -31,7 +31,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -44,7 +44,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -57,7 +57,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -83,7 +83,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -96,7 +96,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -109,7 +109,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -122,7 +122,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -135,7 +135,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -148,7 +148,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -161,7 +161,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -174,7 +174,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -187,7 +187,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -200,7 +200,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -213,7 +213,7 @@ I finally took the time to go through and clean up this code. The build includes - @@ -226,7 +226,7 @@ I finally took the time to go through and clean up this code. The build includes - diff --git a/components/components.pro b/components/components.pro index 3889810..886e5eb 100644 --- a/components/components.pro +++ b/components/components.pro @@ -38,7 +38,8 @@ SOURCES = \ qtmaterialdialog_internal.cpp \ qtmaterialdialog.cpp \ qtmaterialdrawer_internal.cpp \ - qtmaterialdrawer.cpp + qtmaterialdrawer.cpp \ + qtmaterialappbar.cpp HEADERS = \ qtmaterialdivider_p.h \ qtmaterialdivider.h \ @@ -100,6 +101,8 @@ HEADERS = \ qtmaterialdialog.h \ qtmaterialdrawer_internal.h \ qtmaterialdrawer_p.h \ - qtmaterialdrawer.h + qtmaterialdrawer.h \ + qtmaterialappbar.h \ + qtmaterialappbar_p.h RESOURCES += \ resources.qrc diff --git a/components/qtmaterialappbar.cpp b/components/qtmaterialappbar.cpp new file mode 100644 index 0000000..5e5e230 --- /dev/null +++ b/components/qtmaterialappbar.cpp @@ -0,0 +1,139 @@ +#include "qtmaterialappbar.h" +#include "qtmaterialappbar_p.h" +#include +#include +#include +#include "lib/qtmaterialstyle.h" + +/*! + * \class QtMaterialAppBarPrivate + * \internal + */ + +/*! + * \internal + */ +QtMaterialAppBarPrivate::QtMaterialAppBarPrivate(QtMaterialAppBar *q) + : q_ptr(q) +{ +} + +/*! + * \internal + */ +QtMaterialAppBarPrivate::~QtMaterialAppBarPrivate() +{ +} + +/*! + * \internal + */ +void QtMaterialAppBarPrivate::init() +{ + Q_Q(QtMaterialAppBar); + + useThemeColors = true; + + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; + effect->setBlurRadius(11); + effect->setColor(QColor(0, 0, 0, 50)); + effect->setOffset(0, 3); + + q->setGraphicsEffect(effect); + + QHBoxLayout *layout = new QHBoxLayout; + q->setLayout(layout); +} + +/*! + * \class QtMaterialAppBar + */ + +QtMaterialAppBar::QtMaterialAppBar(QWidget *parent) + : QWidget(parent) +{ + d_func()->init(); +} + +QtMaterialAppBar::~QtMaterialAppBar() +{ +} + +QSize QtMaterialAppBar::sizeHint() const +{ + return QSize(-1, 64); +} + +void QtMaterialAppBar::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + + QPainter painter(this); + + painter.fillRect(rect(), backgroundColor()); +} + +void QtMaterialAppBar::setUseThemeColors(bool value) +{ + Q_D(QtMaterialAppBar); + + if (d->useThemeColors == value) { + return; + } + + d->useThemeColors = value; + update(); +} + +bool QtMaterialAppBar::useThemeColors() const +{ + Q_D(const QtMaterialAppBar); + + return d->useThemeColors; +} + +void QtMaterialAppBar::setForegroundColor(const QColor &color) +{ + Q_D(QtMaterialAppBar); + + d->foregroundColor = color; + + if (d->useThemeColors == true) { + d->useThemeColors = false; + } + update(); +} + +QColor QtMaterialAppBar::foregroundColor() const +{ + Q_D(const QtMaterialAppBar); + + if (d->useThemeColors || !d->foregroundColor.isValid()) { + return QtMaterialStyle::instance().themeColor("primary1"); + } else { + return d->foregroundColor; + } +} + +void QtMaterialAppBar::setBackgroundColor(const QColor &color) +{ + Q_D(QtMaterialAppBar); + + d->backgroundColor = color; + + if (d->useThemeColors == true) { + d->useThemeColors = false; + } + update(); +} + +QColor QtMaterialAppBar::backgroundColor() const +{ + Q_D(const QtMaterialAppBar); + + if (d->useThemeColors || !d->backgroundColor.isValid()) { + return QtMaterialStyle::instance().themeColor("primary1"); + } else { + return d->backgroundColor; + } +} diff --git a/components/qtmaterialappbar.h b/components/qtmaterialappbar.h new file mode 100644 index 0000000..6558ccf --- /dev/null +++ b/components/qtmaterialappbar.h @@ -0,0 +1,40 @@ +#ifndef QTMATERIALAPPBAR_H +#define QTMATERIALAPPBAR_H + +#include + +class QtMaterialAppBarPrivate; + +class QtMaterialAppBar : public QWidget +{ + Q_OBJECT + + Q_PROPERTY(QColor foregroundColor WRITE setForegroundColor READ foregroundColor) + Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor) + +public: + explicit QtMaterialAppBar(QWidget *parent = 0); + ~QtMaterialAppBar(); + + QSize sizeHint() const Q_DECL_OVERRIDE; + + void setUseThemeColors(bool value); + bool useThemeColors() const; + + void setForegroundColor(const QColor &color); + QColor foregroundColor() const; + + void setBackgroundColor(const QColor &color); + QColor backgroundColor() const; + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + + const QScopedPointer d_ptr; + +private: + Q_DISABLE_COPY(QtMaterialAppBar) + Q_DECLARE_PRIVATE(QtMaterialAppBar) +}; + +#endif // QTMATERIALAPPBAR_H diff --git a/components/qtmaterialappbar_p.h b/components/qtmaterialappbar_p.h new file mode 100644 index 0000000..0586556 --- /dev/null +++ b/components/qtmaterialappbar_p.h @@ -0,0 +1,26 @@ +#ifndef QTMATERIALAPPBAR_P_H +#define QTMATERIALAPPBAR_P_H + +#include +#include + +class QtMaterialAppBar; + +class QtMaterialAppBarPrivate +{ + Q_DISABLE_COPY(QtMaterialAppBarPrivate) + Q_DECLARE_PUBLIC(QtMaterialAppBar) + +public: + QtMaterialAppBarPrivate(QtMaterialAppBar *q); + ~QtMaterialAppBarPrivate(); + + void init(); + + QtMaterialAppBar *const q_ptr; + bool useThemeColors; + QColor foregroundColor; + QColor backgroundColor; +}; + +#endif // QTMATERIALAPPBAR_P_H diff --git a/components/qtmaterialtextfield.cpp b/components/qtmaterialtextfield.cpp index 86643d6..97480c9 100644 --- a/components/qtmaterialtextfield.cpp +++ b/components/qtmaterialtextfield.cpp @@ -29,6 +29,7 @@ void QtMaterialTextFieldPrivate::init() label = 0; labelFontSize = 9.5; showLabel = false; + showUnderline = true; useThemeColors = true; q->setFrame(false); @@ -231,6 +232,25 @@ QColor QtMaterialTextField::underlineColor() const } } +void QtMaterialTextField::setShowUnderline(bool value) +{ + Q_D(QtMaterialTextField); + + if (d->showUnderline == value) { + return; + } + + d->showUnderline = value; + update(); +} + +bool QtMaterialTextField::hasUnderline() const +{ + Q_D(const QtMaterialTextField); + + return d->showUnderline; +} + /*! * \reimp */ @@ -274,22 +294,25 @@ void QtMaterialTextField::paintEvent(QPaintEvent *event) const int y = height()-1; const int wd = width()-5; - QPen pen; - pen.setWidth(1); - pen.setColor(underlineColor()); - painter.setPen(pen); - painter.setOpacity(1); - painter.drawLine(2.5, y, wd, y); - - QBrush brush; - brush.setStyle(Qt::SolidPattern); - brush.setColor(inkColor()); - - if (progress > 0) + if (d->showUnderline) { - painter.setPen(Qt::NoPen); - painter.setBrush(brush); - const int w = (1-progress)*static_cast(wd/2); - painter.drawRect(w+2.5, height()-2, wd-w*2, 2); + QPen pen; + pen.setWidth(1); + pen.setColor(underlineColor()); + painter.setPen(pen); + painter.setOpacity(1); + painter.drawLine(2.5, y, wd, y); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + brush.setColor(inkColor()); + + if (progress > 0) + { + painter.setPen(Qt::NoPen); + painter.setBrush(brush); + const int w = (1-progress)*static_cast(wd/2); + painter.drawRect(w+2.5, height()-2, wd-w*2, 2); + } } } diff --git a/components/qtmaterialtextfield.h b/components/qtmaterialtextfield.h index 81f740b..d4a12f6 100644 --- a/components/qtmaterialtextfield.h +++ b/components/qtmaterialtextfield.h @@ -42,6 +42,9 @@ public: void setUnderlineColor(const QColor &color); QColor underlineColor() const; + void setShowUnderline(bool value); + bool hasUnderline() const; + protected: bool event(QEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; diff --git a/components/qtmaterialtextfield_p.h b/components/qtmaterialtextfield_p.h index ad4db28..51d7cc1 100644 --- a/components/qtmaterialtextfield_p.h +++ b/components/qtmaterialtextfield_p.h @@ -29,6 +29,7 @@ public: QString labelString; qreal labelFontSize; bool showLabel; + bool showUnderline; bool useThemeColors; }; diff --git a/examples/textfieldsettingseditor.cpp b/examples/textfieldsettingseditor.cpp index dcb7069..ce21cd1 100644 --- a/examples/textfieldsettingseditor.cpp +++ b/examples/textfieldsettingseditor.cpp @@ -41,6 +41,7 @@ TextFieldSettingsEditor::TextFieldSettingsEditor(QWidget *parent) connect(ui->inkColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor())); connect(ui->underlineColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor())); connect(ui->labelColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor())); + connect(ui->underlineCheckBox, SIGNAL(toggled(bool)), this, SLOT(setShowUnderline())); connect(m_textField, SIGNAL(textChanged(QString)), this, SLOT(setupForm())); } @@ -58,6 +59,7 @@ void TextFieldSettingsEditor::setupForm() ui->labelCheckBox->setChecked(m_textField->hasLabel()); ui->labelTextLineEdit->setText(m_textField->label()); ui->useThemeColorsCheckBox->setChecked(m_textField->useThemeColors()); + ui->underlineCheckBox->setChecked(m_textField->hasUnderline()); } void TextFieldSettingsEditor::updateWidget() @@ -68,6 +70,7 @@ void TextFieldSettingsEditor::updateWidget() m_textField->setLabel(ui->labelTextLineEdit->text()); m_textField->setShowLabel(ui->labelCheckBox->isChecked()); m_textField->setUseThemeColors(ui->useThemeColorsCheckBox->isChecked()); + m_textField->setShowUnderline(ui->underlineCheckBox->isChecked()); } void TextFieldSettingsEditor::selectColor() @@ -92,3 +95,8 @@ void TextFieldSettingsEditor::selectColor() } setupForm(); } + +void TextFieldSettingsEditor::setShowUnderline() +{ + m_textField->setShowUnderline( ui->underlineCheckBox->isChecked() ); +} diff --git a/examples/textfieldsettingseditor.h b/examples/textfieldsettingseditor.h index 21c69f5..6631e27 100644 --- a/examples/textfieldsettingseditor.h +++ b/examples/textfieldsettingseditor.h @@ -18,6 +18,7 @@ protected slots: void setupForm(); void updateWidget(); void selectColor(); + void setShowUnderline(); private: Ui::TextFieldSettingsForm *const ui; diff --git a/examples/textfieldsettingsform.ui b/examples/textfieldsettingsform.ui index 106c58c..12e1c87 100644 --- a/examples/textfieldsettingsform.ui +++ b/examples/textfieldsettingsform.ui @@ -167,6 +167,16 @@ + + + + Underline + + + + + +
@@ -18,7 +18,7 @@ I finally took the time to go through and clean up this code. The build includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+