summaryrefslogtreecommitdiff
path: root/test/darkbutton/DarkButton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/darkbutton/DarkButton.cpp')
-rw-r--r--test/darkbutton/DarkButton.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/test/darkbutton/DarkButton.cpp b/test/darkbutton/DarkButton.cpp
new file mode 100644
index 0000000..b785961
--- /dev/null
+++ b/test/darkbutton/DarkButton.cpp
@@ -0,0 +1,99 @@
+#include "DarkButton.h"
+#include <QPainter>
+
+DarkButton::DarkButton(QWidget *parent) :
+ QPushButton(parent)
+{
+ setMinimumHeight(36);
+ setMaximumHeight(36);
+ setStyleSheet("border:none;color:#afb;");
+ over=false;
+ enabled=true;
+}
+
+void DarkButton::paintEvent(QPaintEvent * event)
+{
+ if(backgroundLeft.isNull() || backgroundLeft.height()!=height())
+ {
+ QPixmap background(":/darkButton.png");
+ if(background.isNull())
+ abort();
+ QPixmap backgroundPushed(":/darkButtonPushed.png");
+ if(backgroundPushed.isNull())
+ abort();
+ QPixmap over(":/darkButtonOver.png");
+ if(over.isNull())
+ abort();
+ if(height()==background.height())
+ {
+ backgroundLeft=background.copy(0,0,10,36);
+ backgroundMiddle=background.copy(10,0,46,36);
+ backgroundRight=background.copy(56,0,10,36);
+ backgroundPushedLeft=backgroundPushed.copy(0,0,10,36);
+ backgroundPushedMiddle=backgroundPushed.copy(10,0,46,36);
+ backgroundPushedRight=backgroundPushed.copy(56,0,10,36);
+ overLeft=over.copy(0,0,10,36);
+ overMiddle=over.copy(10,0,46,36);
+ overRight=over.copy(56,0,10,36);
+ }
+ else
+ {
+ backgroundLeft=background.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundMiddle=background.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundRight=background.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedLeft=backgroundPushed.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedMiddle=backgroundPushed.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedRight=backgroundPushed.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overLeft=over.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overMiddle=over.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overRight=over.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ }
+ }
+ QPainter paint;
+ paint.begin(this);
+ if(enabled && !isEnabled())
+ {
+ setStyleSheet("border:none;color:#fab;");
+ enabled=false;
+ }
+ if(!enabled && isEnabled())
+ {
+ setStyleSheet("border:none;color:#afb;");
+ enabled=true;
+ }
+ if(isDown() && isEnabled())
+ {
+ paint.drawPixmap(0,0,backgroundPushedLeft.width(), backgroundPushedLeft.height(), backgroundPushedLeft);
+ paint.drawPixmap(backgroundPushedLeft.width(), 0,
+ width()-backgroundPushedLeft.width()-backgroundPushedRight.width(), backgroundPushedLeft.height(),backgroundPushedMiddle);
+ paint.drawPixmap(width()-backgroundPushedRight.width(),0, backgroundPushedRight.width(), backgroundPushedRight.height(),backgroundPushedRight);
+ }
+ else
+ {
+ paint.drawPixmap(0,0,backgroundLeft.width(), backgroundLeft.height(), backgroundLeft);
+ paint.drawPixmap(backgroundLeft.width(), 0,
+ width()-backgroundLeft.width()-backgroundRight.width(), backgroundLeft.height(),backgroundMiddle);
+ paint.drawPixmap(width()-backgroundRight.width(),0, backgroundRight.width(), backgroundRight.height(),backgroundRight);
+ }
+ if(over && isEnabled())
+ {
+ paint.drawPixmap(0,0,overLeft.width(), overLeft.height(), overLeft);
+ paint.drawPixmap(overLeft.width(), 0,
+ width()-overLeft.width()-overRight.width(), overLeft.height(),overMiddle);
+ paint.drawPixmap(width()-overRight.width(),0, overRight.width(), overRight.height(),overRight);
+ }
+ QPushButton::paintEvent(event);
+}
+
+void DarkButton::enterEvent(QEvent *e)
+{
+ over=true;
+ QWidget::enterEvent(e);
+ update();
+}
+void DarkButton::leaveEvent(QEvent *e)
+{
+ over=false;
+ QWidget::leaveEvent(e);
+ update();
+}