From d39db592a8a8672c8091a4fefa68cbfcc84bc0bc Mon Sep 17 00:00:00 2001 From: laserpants Date: Sat, 14 May 2016 11:52:28 +0300 Subject: [PATCH] refactor flat button code --- components/flatbutton.cpp | 268 ++++++++++++++++++++------------------ components/flatbutton.h | 70 ++++++---- 2 files changed, 187 insertions(+), 151 deletions(-) diff --git a/components/flatbutton.cpp b/components/flatbutton.cpp index 3b8a9a1..48c01ab 100644 --- a/components/flatbutton.cpp +++ b/components/flatbutton.cpp @@ -1,139 +1,157 @@ -#include -#include -#include -#include #include "flatbutton.h" #include "lib/style.h" FlatButton::FlatButton(QWidget *parent) - : QAbstractButton(parent), - _overlay(new RippleOverlay(this)) + : QPushButton(parent) { setStyle(&Style::instance()); - setAttribute(Qt::WA_Hover); - - QFont font(this->font()); - font.setCapitalization(QFont::AllUppercase); - font.setPointSizeF(10.5); - font.setStyleName("Medium"); - setFont(font); } FlatButton::FlatButton(const QString &text, QWidget *parent) - : QAbstractButton(parent), - _overlay(new RippleOverlay(this)) + : QPushButton(parent) { setText(text); + setStyle(&Style::instance()); - setAttribute(Qt::WA_Hover); - - QFont font(this->font()); - font.setCapitalization(QFont::AllUppercase); - font.setPointSizeF(10.5); - font.setStyleName("Medium"); - setFont(font); } -FlatButton::~FlatButton() -{ -} - -QSize FlatButton::sizeHint() const -{ - // Mostly lifted from QPushButton - - ensurePolished(); - - int w = 0, - h = 0; - - QStyleOptionButton option(getStyleOption()); - -#ifndef QT_NO_ICON - if (!icon().isNull()) { - int ih = option.iconSize.height(); - int iw = option.iconSize.width() + 4; - w += iw; - h = qMax(h, ih); - } -#endif - - QString s(text()); - bool empty = s.isEmpty(); - if (empty) - s = QString::fromLatin1("XXXX"); - QFontMetrics fm = fontMetrics(); - QSize sz = fm.size(Qt::TextShowMnemonic, s); - if (!empty || !w) - w += sz.width(); - if (!empty || !h) - h = qMax(h, sz.height()); - return (style()->sizeFromContents(QStyle::CT_PushButton, &option, QSize(w, h), this) - .expandedTo(QApplication::globalStrut())); -} - -void FlatButton::resizeEvent(QResizeEvent *event) -{ - Q_UNUSED(event) - - updateOverlayGeometry(); -} - -void FlatButton::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event) - - QStylePainter painter(this); - - painter.drawControl(QStyle::CE_PushButton, getStyleOption()); - - if (testAttribute(Qt::WA_Hover) && underMouse()) { - QRect r(rect()); - QBrush brush; - brush.setStyle(Qt::SolidPattern); - painter.setOpacity(0.1); - painter.fillRect(r, brush); - } -} - -void FlatButton::mousePressEvent(QMouseEvent *event) -{ - if (!_overlay) - return; - - _overlay->addRipple(event->pos()); -} - -void FlatButton::mouseReleaseEvent(QMouseEvent *event) -{ - Q_UNUSED(event) - - emit clicked(); -} - -void FlatButton::enterEvent(QEvent *event) -{ - Q_UNUSED(event) - - update(); -} - -void FlatButton::leaveEvent(QEvent *event) -{ - Q_UNUSED(event) - - update(); -} - -QStyleOptionButton FlatButton::getStyleOption() const -{ - QStyleOptionButton option; - option.initFrom(this); - option.features = QStyleOptionButton::Flat; - if (isChecked()) - option.state |= QStyle::State_On; - option.text = text(); - option.icon = icon(); - option.iconSize = iconSize(); - return option; -} +//#include +//#include +//#include +//#include +//#include "flatbutton.h" +//#include "lib/style.h" +// +//FlatButton::FlatButton(QWidget *parent) +// : QAbstractButton(parent), +// _overlay(new RippleOverlay(this)) +//{ +// setStyle(&Style::instance()); +// setAttribute(Qt::WA_Hover); +// +// QFont font(this->font()); +// font.setCapitalization(QFont::AllUppercase); +// font.setPointSizeF(10.5); +// font.setStyleName("Medium"); +// setFont(font); +//} +// +//FlatButton::FlatButton(const QString &text, QWidget *parent) +// : QAbstractButton(parent), +// _overlay(new RippleOverlay(this)) +//{ +// setText(text); +// setStyle(&Style::instance()); +// setAttribute(Qt::WA_Hover); +// +// QFont font(this->font()); +// font.setCapitalization(QFont::AllUppercase); +// font.setPointSizeF(10.5); +// font.setStyleName("Medium"); +// setFont(font); +//} +// +//FlatButton::~FlatButton() +//{ +//} +// +//QSize FlatButton::sizeHint() const +//{ +// // Mostly lifted from QPushButton +// +// ensurePolished(); +// +// int w = 0, +// h = 0; +// +// QStyleOptionButton option(getStyleOption()); +// +//#ifndef QT_NO_ICON +// if (!icon().isNull()) { +// int ih = option.iconSize.height(); +// int iw = option.iconSize.width() + 4; +// w += iw; +// h = qMax(h, ih); +// } +//#endif +// +// QString s(text()); +// bool empty = s.isEmpty(); +// if (empty) +// s = QString::fromLatin1("XXXX"); +// QFontMetrics fm = fontMetrics(); +// QSize sz = fm.size(Qt::TextShowMnemonic, s); +// if (!empty || !w) +// w += sz.width(); +// if (!empty || !h) +// h = qMax(h, sz.height()); +// return (style()->sizeFromContents(QStyle::CT_PushButton, &option, QSize(w, h), this) +// .expandedTo(QApplication::globalStrut())); +//} +// +//void FlatButton::resizeEvent(QResizeEvent *event) +//{ +// Q_UNUSED(event) +// +// updateOverlayGeometry(); +//} +// +//void FlatButton::paintEvent(QPaintEvent *event) +//{ +// Q_UNUSED(event) +// +// QStylePainter painter(this); +// +// painter.drawControl(QStyle::CE_PushButton, getStyleOption()); +// +// if (testAttribute(Qt::WA_Hover) && underMouse()) { +// QRect r(rect()); +// QBrush brush; +// brush.setStyle(Qt::SolidPattern); +// painter.setOpacity(0.1); +// painter.fillRect(r, brush); +// } +//} +// +//void FlatButton::mousePressEvent(QMouseEvent *event) +//{ +// if (!_overlay) +// return; +// +// _overlay->addRipple(event->pos()); +//} +// +//void FlatButton::mouseReleaseEvent(QMouseEvent *event) +//{ +// Q_UNUSED(event) +// +// emit clicked(); +//} +// +//void FlatButton::enterEvent(QEvent *event) +//{ +// Q_UNUSED(event) +// +// update(); +//} +// +//void FlatButton::leaveEvent(QEvent *event) +//{ +// Q_UNUSED(event) +// +// update(); +//} +// +//QStyleOptionButton FlatButton::getStyleOption() const +//{ +// QStyleOptionButton option; +// option.initFrom(this); +// option.features = QStyleOptionButton::Flat; +// if (isChecked()) +// option.state |= QStyle::State_On; +// option.text = text(); +// option.icon = icon(); +// option.iconSize = iconSize(); +// return option; +//} +// diff --git a/components/flatbutton.h b/components/flatbutton.h index bca4481..1e7f853 100644 --- a/components/flatbutton.h +++ b/components/flatbutton.h @@ -1,11 +1,9 @@ #ifndef FLATBUTTON_H #define FLATBUTTON_H -#include -#include -#include "../lib/rippleoverlay.h" +#include -class FlatButton : public QAbstractButton +class FlatButton : public QPushButton { Q_OBJECT @@ -13,28 +11,48 @@ public: explicit FlatButton(QWidget *parent = 0); explicit FlatButton(const QString &text, QWidget *parent = 0); ~FlatButton(); - - QSize sizeHint() const Q_DECL_OVERRIDE; - -protected: - void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; - void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; - void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - void enterEvent(QEvent *event) Q_DECL_OVERRIDE; - void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; - - QStyleOptionButton getStyleOption() const; - -private: - inline void updateOverlayGeometry() - { - if (_overlay) { - _overlay->setGeometry(rect()); - } - } - - RippleOverlay *const _overlay; }; #endif // FLATBUTTON_H + +//#ifndef FLATBUTTON_H +//#define FLATBUTTON_H +// +//#include +//#include +//#include "../lib/rippleoverlay.h" +// +//class FlatButton : public QAbstractButton +//{ +// Q_OBJECT +// +//public: +// explicit FlatButton(QWidget *parent = 0); +// explicit FlatButton(const QString &text, QWidget *parent = 0); +// ~FlatButton(); +// +// QSize sizeHint() const Q_DECL_OVERRIDE; +// +//protected: +// void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; +// void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; +// void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; +// void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; +// void enterEvent(QEvent *event) Q_DECL_OVERRIDE; +// void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; +// +// QStyleOptionButton getStyleOption() const; +// +//private: +// inline void updateOverlayGeometry() +// { +// if (_overlay) { +// _overlay->setGeometry(rect()); +// } +// } +// +// RippleOverlay *const _overlay; +//}; +// +//#endif // FLATBUTTON_H +//