make Style class singleton

This commit is contained in:
laserpants 2016-03-20 19:43:05 +03:00
parent fc933ae16c
commit 64fa985928
5 changed files with 32 additions and 20 deletions

View File

@ -3,11 +3,13 @@
#include <QMouseEvent> #include <QMouseEvent>
#include <QApplication> #include <QApplication>
#include "flatbutton.h" #include "flatbutton.h"
#include "style.h"
FlatButton::FlatButton(QWidget *parent) FlatButton::FlatButton(QWidget *parent)
: QAbstractButton(parent), : QAbstractButton(parent),
_overlay(new RippleOverlay(this)) _overlay(new RippleOverlay(this))
{ {
setStyle(&Style::instance());
} }
FlatButton::FlatButton(const QString &text, QWidget *parent) FlatButton::FlatButton(const QString &text, QWidget *parent)
@ -15,6 +17,7 @@ FlatButton::FlatButton(const QString &text, QWidget *parent)
_overlay(new RippleOverlay(this)) _overlay(new RippleOverlay(this))
{ {
setText(text); setText(text);
setStyle(&Style::instance());
} }
FlatButton::~FlatButton() FlatButton::~FlatButton()
@ -51,8 +54,8 @@ QSize FlatButton::sizeHint() const
w += sz.width(); w += sz.width();
if (!empty || !h) if (!empty || !h)
h = qMax(h, sz.height()); h = qMax(h, sz.height());
return (style()->sizeFromContents(QStyle::CT_PushButton, &option, QSize(w, h), this). return (style()->sizeFromContents(QStyle::CT_PushButton, &option, QSize(w, h), this)
expandedTo(QApplication::globalStrut())); .expandedTo(QApplication::globalStrut()));
} }
void FlatButton::resizeEvent(QResizeEvent *event) void FlatButton::resizeEvent(QResizeEvent *event)
@ -68,11 +71,9 @@ void FlatButton::paintEvent(QPaintEvent *event)
QStylePainter painter(this); QStylePainter painter(this);
QStyleOptionButton option(getStyleOption()); painter.drawControl(QStyle::CE_PushButton, getStyleOption());
painter.drawControl(QStyle::CE_PushButton, option); if (testAttribute(Qt::WA_Hover) && underMouse()) {
if (underMouse()) {
QRect r(rect()); QRect r(rect());
QBrush brush; QBrush brush;
brush.setStyle(Qt::SolidPattern); brush.setStyle(Qt::SolidPattern);

View File

@ -5,6 +5,7 @@
#include <QDebug> #include <QDebug>
#include "iconbutton.h" #include "iconbutton.h"
#include "../lib/rippleoverlay.h" #include "../lib/rippleoverlay.h"
#include "style.h"
IconButton::IconButton(const QIcon &icon, QWidget *parent) IconButton::IconButton(const QIcon &icon, QWidget *parent)
: QAbstractButton(parent), : QAbstractButton(parent),
@ -18,6 +19,8 @@ IconButton::IconButton(const QIcon &icon, QWidget *parent)
setSizePolicy(policy); setSizePolicy(policy);
setGeometryWidget(this); setGeometryWidget(this);
setStyle(&Style::instance());
} }
IconButton::~IconButton() IconButton::~IconButton()

View File

@ -2,6 +2,7 @@
#include <QEvent> #include <QEvent>
#include <QHeaderView> #include <QHeaderView>
#include "table.h" #include "table.h"
#include "style.h"
Table::Table(QWidget *parent) Table::Table(QWidget *parent)
: QTableWidget(parent) : QTableWidget(parent)
@ -10,6 +11,8 @@ Table::Table(QWidget *parent)
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);
setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionBehavior(QAbstractItemView::SelectRows);
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
setStyle(&Style::instance());
} }
Table::~Table() Table::~Table()

View File

@ -1,17 +1,9 @@
#include <QDebug> #include <QDebug>
#include <QPainter> #include <QPainter>
#include <QStyleOption> #include <QStyleOption>
#include <QStyleOptionButton>
#include "style.h" #include "style.h"
Style::Style()
: QProxyStyle()
{
}
Style::~Style()
{
}
void Style::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, void Style::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
const QWidget *w) const const QWidget *w) const
{ {
@ -20,7 +12,7 @@ void Style::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter
switch (pe) { switch (pe) {
case PE_FrameFocusRect: case PE_FrameFocusRect:
p->setPen(Qt::blue); p->setPen(Qt::blue);
p->drawRect(opt->rect); p->drawRect(opt->rect.adjusted(0, 0, -1, -1));
break; break;
default: default:
QProxyStyle::drawPrimitive(pe, opt, p, w); QProxyStyle::drawPrimitive(pe, opt, p, w);
@ -33,6 +25,12 @@ void Style::drawControl(ControlElement element, const QStyleOption *opt,
qDebug() << element; qDebug() << element;
switch (element) { switch (element) {
case CE_CheckBox:
if (const QStyleOptionButton *item = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
}
p->fillRect(opt->rect, Qt::black);
break;
/* /*
case CE_FocusFrame: case CE_FocusFrame:
p->fillRect(opt->rect, opt->palette.foreground()); p->fillRect(opt->rect, opt->palette.foreground());

15
style.h
View File

@ -3,14 +3,16 @@
#include <QProxyStyle> #include <QProxyStyle>
//class Style : public QCommonStyle
class Style : public QProxyStyle class Style : public QProxyStyle
{ {
Q_OBJECT Q_OBJECT
public: public:
Style(); static Style &instance()
~Style(); {
static Style instance;
return instance;
}
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
const QWidget *w = 0) const Q_DECL_OVERRIDE; const QWidget *w = 0) const Q_DECL_OVERRIDE;
@ -24,7 +26,12 @@ public:
const QWidget *w = 0) const Q_DECL_OVERRIDE; const QWidget *w = 0) const Q_DECL_OVERRIDE;
int pixelMetric(PixelMetric m, const QStyleOption *opt = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE; int pixelMetric(PixelMetric m, const QStyleOption *opt = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
private:
Style() {}
Style(Style const&);
void operator=(Style const&);
}; };
#endif // STYLE_H #endif // STYLE_H