1
mirror of https://invent.kde.org/network/falkon.git synced 2024-11-11 09:32:12 +01:00

[ToolButton] Use QImage for multiIcon

Instead of 4 separate QPixmaps, use just one QImage and paint only
the current part (according to button state) of the image on button.
This commit is contained in:
David Rosca 2014-04-24 11:05:41 +02:00
parent 0f79797be4
commit 6bdc6f90ce
2 changed files with 17 additions and 24 deletions

View File

@ -38,23 +38,16 @@ ToolButton::ToolButton(QWidget* parent)
connect(&m_pressTimer, SIGNAL(timeout()), this, SLOT(showMenu())); connect(&m_pressTimer, SIGNAL(timeout()), this, SLOT(showMenu()));
} }
QPixmap ToolButton::multiIcon() const QImage ToolButton::multiIcon() const
{ {
return m_normalIcon; return m_multiIcon;
} }
void ToolButton::setMultiIcon(const QPixmap &icon) void ToolButton::setMultiIcon(const QImage &image)
{ {
int w = icon.width();
int h = icon.height();
m_normalIcon = icon.copy(0, 0, w, h / 4);
m_hoverIcon = icon.copy(0, h / 4, w, h / 4);
m_activeIcon = icon.copy(0, h / 2, w, h / 4);
m_disabledIcon = icon.copy(0, 3 * h / 4, w, h / 4);
m_options |= MultiIconOption; m_options |= MultiIconOption;
setFixedSize(m_normalIcon.size()); m_multiIcon = image;
setFixedSize(m_multiIcon.width(), m_multiIcon.height() / 4);
update(); update();
} }
@ -72,7 +65,7 @@ void ToolButton::setThemeIcon(const QString &icon)
QIcon ToolButton::icon() const QIcon ToolButton::icon() const
{ {
return m_options & MultiIconOption ? multiIcon() : QToolButton::icon(); return QToolButton::icon();
} }
void ToolButton::setIcon(const QIcon &icon) void ToolButton::setIcon(const QIcon &icon)
@ -219,12 +212,15 @@ void ToolButton::paintEvent(QPaintEvent* e)
QPainter p(this); QPainter p(this);
const int w = m_multiIcon.width();
const int h4 = m_multiIcon.height() / 4;
if (!isEnabled()) if (!isEnabled())
p.drawPixmap(0, 0, m_disabledIcon); p.drawImage(0, 0, m_multiIcon, 0, h4 * 3, w, h4);
else if (isDown()) else if (isDown())
p.drawPixmap(0, 0, m_activeIcon); p.drawImage(0, 0, m_multiIcon, 0, h4 * 2, w, h4);
else if (underMouse()) else if (underMouse())
p.drawPixmap(0, 0, m_hoverIcon); p.drawImage(0, 0, m_multiIcon, 0, h4 * 1, w, h4);
else else
p.drawPixmap(0, 0, m_normalIcon); p.drawImage(0, 0, m_multiIcon, 0, h4 * 0, w, h4);
} }

View File

@ -30,7 +30,7 @@ class QUPZILLA_EXPORT ToolButton : public QToolButton
Q_PROPERTY(QSize fixedsize READ size WRITE setFixedSize) Q_PROPERTY(QSize fixedsize READ size WRITE setFixedSize)
Q_PROPERTY(int fixedwidth READ width WRITE setFixedWidth) Q_PROPERTY(int fixedwidth READ width WRITE setFixedWidth)
Q_PROPERTY(int fixedheight READ height WRITE setFixedHeight) Q_PROPERTY(int fixedheight READ height WRITE setFixedHeight)
Q_PROPERTY(QPixmap multiIcon READ multiIcon WRITE setMultiIcon) Q_PROPERTY(QImage multiIcon READ multiIcon WRITE setMultiIcon)
Q_PROPERTY(QIcon icon READ icon WRITE setIcon) Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
Q_PROPERTY(QString themeIcon READ themeIcon WRITE setThemeIcon) Q_PROPERTY(QString themeIcon READ themeIcon WRITE setThemeIcon)
@ -38,8 +38,8 @@ public:
explicit ToolButton(QWidget* parent = 0); explicit ToolButton(QWidget* parent = 0);
// MultiIcon - Image containing pixmaps for all button states // MultiIcon - Image containing pixmaps for all button states
QPixmap multiIcon() const; QImage multiIcon() const;
void setMultiIcon(const QPixmap &icon); void setMultiIcon(const QImage &image);
// ThemeIcon - Standard QToolButton with theme icon // ThemeIcon - Standard QToolButton with theme icon
QString themeIcon() const; QString themeIcon() const;
@ -84,10 +84,7 @@ protected:
void paintEvent(QPaintEvent* e); void paintEvent(QPaintEvent* e);
private: private:
QPixmap m_normalIcon; QImage m_multiIcon;
QPixmap m_hoverIcon;
QPixmap m_activeIcon;
QPixmap m_disabledIcon;
QString m_themeIcon; QString m_themeIcon;
QTimer m_pressTimer; QTimer m_pressTimer;
QMenu* m_menu; QMenu* m_menu;