From 0a79208ab4a16205266d049fca53a75eba102992 Mon Sep 17 00:00:00 2001 From: laserpants Date: Mon, 30 May 2016 16:10:15 +0300 Subject: [PATCH] add various Qt properties to Flat Button --- components/flatbutton.cpp | 41 ++++++++++++++++++++++++++++++++++++++- components/flatbutton.h | 8 ++++++++ components/flatbutton_p.h | 14 +++++++------ 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/components/flatbutton.cpp b/components/flatbutton.cpp index f2b2fd1..aa3fa0d 100644 --- a/components/flatbutton.cpp +++ b/components/flatbutton.cpp @@ -75,6 +75,13 @@ void FlatButton::setRippleStyle(Material::RippleStyle style) d->rippleStyle = style; } +Material::RippleStyle FlatButton::rippleStyle() const +{ + Q_D(const FlatButton); + + return d->rippleStyle; +} + void FlatButton::setCornerRadius(qreal radius) { Q_D(FlatButton); @@ -90,6 +97,21 @@ qreal FlatButton::cornerRadius() const return d->cornerRadius; } +void FlatButton::setBgMode(Qt::BGMode mode) +{ + Q_D(FlatButton); + + d->bgMode = mode; + update(); +} + +Qt::BGMode FlatButton::bgMode() const +{ + Q_D(const FlatButton); + + return d->bgMode; +} + void FlatButton::setRole(Material::Role role) { Q_D(FlatButton); @@ -112,6 +134,13 @@ void FlatButton::setRole(Material::Role role) update(); } +Material::Role FlatButton::role() const +{ + Q_D(const FlatButton); + + return d->role; +} + FlatButton::FlatButton(FlatButtonPrivate &d, QWidget *parent) : QPushButton(parent), d_ptr(&d) @@ -139,12 +168,22 @@ void FlatButton::paintEvent(QPaintEvent *event) const qreal bgOpacity = d->delegate->backgroundOpacity(); const qreal haloOpacity = d->delegate->focusHaloOpacity(); const qreal hs = static_cast(width())*d->delegate->focusHaloSize()/2; + const qreal cr = d->cornerRadius; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); + if (Qt::OpaqueMode == d->bgMode) { + QBrush brush; + brush.setStyle(Qt::SolidPattern); + brush.setColor(Qt::red); + painter.setOpacity(1); + painter.setBrush(brush); + painter.setPen(Qt::NoPen); + painter.drawRoundedRect(rect(), cr, cr); + } + if (isEnabled() && bgOpacity > 0) { - const qreal cr = d->cornerRadius; QBrush brush; brush.setStyle(Qt::SolidPattern); brush.setColor(d->delegate->backgroundColor()); diff --git a/components/flatbutton.h b/components/flatbutton.h index 68fc5cd..c3959d9 100644 --- a/components/flatbutton.h +++ b/components/flatbutton.h @@ -11,7 +11,10 @@ class FlatButton : public QPushButton { Q_OBJECT + Q_PROPERTY(Material::Role role WRITE setRole READ role) + Q_PROPERTY(Material::RippleStyle rippleStyle WRITE setRippleStyle READ rippleStyle) Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius) + Q_PROPERTY(Qt::BGMode bgMode WRITE setBgMode READ bgMode) public: explicit FlatButton(QWidget *parent = 0); @@ -19,12 +22,17 @@ public: ~FlatButton(); virtual void setRole(Material::Role role); + Material::Role role() const; void setRippleStyle(Material::RippleStyle style); + Material::RippleStyle rippleStyle() const; void setCornerRadius(qreal radius); qreal cornerRadius() const; + void setBgMode(Qt::BGMode mode); + Qt::BGMode bgMode() const; + protected: FlatButton(FlatButtonPrivate &d, QWidget *parent = 0); diff --git a/components/flatbutton_p.h b/components/flatbutton_p.h index 454415b..0315ed5 100644 --- a/components/flatbutton_p.h +++ b/components/flatbutton_p.h @@ -19,18 +19,20 @@ public: : q_ptr(q), role(Material::Default), rippleStyle(Material::PositionedRipple), - cornerRadius(3) + cornerRadius(3), + bgMode(Qt::TransparentMode) {} void init(); void setPaletteColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QString &themeColor); - FlatButton *const q_ptr; - RippleOverlay *ripple; - FlatButtonDelegate *delegate; - Material::Role role; + FlatButton *const q_ptr; + RippleOverlay *ripple; + FlatButtonDelegate *delegate; + Material::Role role; Material::RippleStyle rippleStyle; - qreal cornerRadius; + qreal cornerRadius; + Qt::BGMode bgMode; }; #endif // FLATBUTTON_P_H