Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <QApplication>
00025 #include <QPushButton>
00026 #include <QStyleOption>
00027 #include <QPainter>
00028 #include <QPixmap>
00029 #include <QStyle>
00030 #include <QPaintEvent>
00031
00032 #include <klfdefs.h>
00033 #include "klfpixmapbutton.h"
00034
00035
00036
00037 KLFPixmapButton::KLFPixmapButton(const QPixmap& pix, QWidget *parent)
00038 : QPushButton(parent), _pix(pix), _pixmargin(2), _xalignfactor(0.5f), _yalignfactor(0.5f), _pixscale(1.f)
00039 {
00040 setText(QString());
00041 setIcon(QIcon());
00042 if (parent != NULL) {
00043 _pixscale = parent->devicePixelRatio();
00044 }
00045 }
00046
00047 QSize KLFPixmapButton::minimumSizeHint() const
00048 {
00049 return sizeHint();
00050 }
00051
00052 QSize KLFPixmapButton::sizeHint() const
00053 {
00054
00055
00056 ensurePolished();
00057
00058 int w = 0, h = 0;
00059 QStyleOptionButton opt;
00060 initStyleOption(&opt);
00061
00062
00063 w = _pix.width() / _pixscale + _pixmargin;
00064 h = _pix.height() / _pixscale + _pixmargin;
00065
00066 if (menu()) {
00067 w += style()->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt, this);
00068 }
00069
00070 return (style()->sizeFromContents(QStyle::CT_PushButton, &opt, QSize(w, h), this).
00071 expandedTo(QApplication::globalStrut()).expandedTo(QSize(50, 30)));
00072
00073 }
00074
00075 void KLFPixmapButton::paintEvent(QPaintEvent *event)
00076 {
00077 QPushButton::paintEvent(event);
00078 QPainter p(this);
00079 p.setClipRect(event->rect());
00080 QSizeF pixsz = _pix.size(); pixsz /= _pixscale;
00081 p.drawPixmap(QRectF(QPointF( _xalignfactor*(width()-(2*_pixmargin+pixsz.width())) + _pixmargin,
00082 _yalignfactor*(height()-(2*_pixmargin+pixsz.height())) + _pixmargin ),
00083 pixsz),
00084 _pix,
00085 QRectF(QPointF(0,0), _pix.size()));
00086 }
00087
00088
00089