From e99f0e4325ca52be671ef36186c0fcb0af5fc341 Mon Sep 17 00:00:00 2001 From: Thomas Frauendorfer Date: Fri, 19 Mar 2010 21:50:20 +0100 Subject: [PATCH] OTHER: skin handling cleanups --- src/mainwindow/maindisplay.cpp | 11 ++--- src/mainwindow/posbar.cpp | 17 ++----- src/mainwindow/posbar.h | 11 ++--- src/skin/skin.cpp | 25 ++++++---- src/skin/skin.h | 26 +++++----- src/widgets/buttonpixmaps.h | 89 ++++++++++++++++++++++++++++++++++ src/widgets/pixmapbutton.h | 68 ++------------------------ src/widgets/pixmapslider.cpp | 32 +++++++----- src/widgets/pixmapslider.h | 15 ++++-- 9 files changed, 161 insertions(+), 133 deletions(-) create mode 100644 src/widgets/buttonpixmaps.h diff --git a/src/mainwindow/maindisplay.cpp b/src/mainwindow/maindisplay.cpp index b546927..746310f 100644 --- a/src/mainwindow/maindisplay.cpp +++ b/src/mainwindow/maindisplay.cpp @@ -88,9 +88,7 @@ MainDisplay::MainDisplay (MainWindow *parent) : SkinDisplay(parent) m_clutterbar = new ClutterBar (this); m_clutterbar->move (10, 22); - m_posbar = new PosBar (this, Skin::POSBAR, - Skin::POSBAR_BTN_0, - Skin::POSBAR_BTN_1); + m_posbar = new PosBar (this); m_posbar->move (skin->getPos (Skin::SLIDER_POSBAR_BGS)); connect (m_posbar, SIGNAL (sliderMoved (int)), client->xplayback (), SLOT (seekMs (int))); @@ -164,11 +162,10 @@ MainDisplay::setPixmaps (Skin *skin) /* update Sliders */ m_vslider->setBackground (skin->getBackgrounds (Skin::SLIDER_VOLUMEBAR_BGS)); - m_vslider->setSliders (skin->getItem (Skin::VOLBAR_BTN_0), - skin->getItem (Skin::VOLBAR_BTN_1)); + m_vslider->setButton (skin->getButton (Skin::SLIDER_VOLUMEBAR_BUTTON)); + m_bslider->setBackground (skin->getBackgrounds (Skin::SLIDER_BALANCEBAR_BGS)); - m_bslider->setSliders (skin->getItem (Skin::BALANCE_BTN_0), - skin->getItem (Skin::BALANCE_BTN_1)); + m_bslider->setButton (skin->getButton (Skin::SLIDER_BALANCEBAR_BUTTON)); /* update some other widgets */ m_time->setPixmaps (skin->getNumbers ()); diff --git a/src/mainwindow/posbar.cpp b/src/mainwindow/posbar.cpp index 51eca99..e9cadf6 100644 --- a/src/mainwindow/posbar.cpp +++ b/src/mainwindow/posbar.cpp @@ -20,13 +20,8 @@ #include -PosBar::PosBar (QWidget *parent, uint bg, uint bnormal, uint bpressed) - : PixmapSlider (parent) +PosBar::PosBar (QWidget *parent) : PixmapSlider (parent) { - m_slider_normal = bnormal; - m_slider_pressed = bpressed; - m_bg = bg; - connect (SkinManager::instance (), SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *))); @@ -41,17 +36,11 @@ PosBar::PosBar (QWidget *parent, uint bg, uint bnormal, uint bpressed) void PosBar::setPixmaps (Skin *skin) { - QPixmap pixmap = skin->getItem (m_bg); + QPixmap pixmap = skin->getItem (Skin::POSBAR); setBackground (pixmap); setFixedSize (248, pixmap.height ()); - if ( !skin->getItem(m_slider_normal).isNull() && - !skin->getItem(m_slider_pressed).isNull()) { - setSliders (skin->getItem(m_slider_normal), - skin->getItem(m_slider_pressed)); - } else { - setSliders (QPixmap (), QPixmap ()); - } + setButton (skin->getButton (Skin::SLIDER_POSBAR_BUTTON)); update (); } diff --git a/src/mainwindow/posbar.h b/src/mainwindow/posbar.h index fa4d07a..c39a40d 100644 --- a/src/mainwindow/posbar.h +++ b/src/mainwindow/posbar.h @@ -1,7 +1,7 @@ /** * This file is a part of Promoe, an XMMS2 Client. * - * Copyright (C) 2005-2008 XMMS2 Team + * Copyright (C) 2005-2010 XMMS2 Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,16 +25,11 @@ class PosBar : public PixmapSlider Q_OBJECT public: - PosBar (QWidget *parent, uint bg, uint bnormal, uint bpressed); + PosBar (QWidget *parent); ~PosBar () { } - + public slots: void setPixmaps (Skin *skin); - - private: - uint m_slider_normal; - uint m_slider_pressed; - uint m_bg; }; #endif diff --git a/src/skin/skin.cpp b/src/skin/skin.cpp index efe843d..a1b9d62 100644 --- a/src/skin/skin.cpp +++ b/src/skin/skin.cpp @@ -146,8 +146,11 @@ Skin::handle_posbar (const QPixmap &img) const int h = qMin (10, img.height ()); m_sizes[SLIDER_POSBAR_BGS] = QSize (248, h); m_items[POSBAR] = img.copy (0, 0, 248, h); - m_items[POSBAR_BTN_0] = img.copy (248, 0, 29, h); - m_items[POSBAR_BTN_1] = img.copy (278, 0, 29, h); + + ButtonPixmaps button; + button.addPixmap (img.copy (248, 0, 29, h), ButtonPixmaps::Normal); + button.addPixmap (img.copy (278, 0, 29, h), ButtonPixmaps::Pressed); + m_buttons[SLIDER_POSBAR_BUTTON] = button; return true; } @@ -165,10 +168,11 @@ Skin::handle_volume (const QPixmap &img) m_backgrounds[SLIDER_VOLUMEBAR_BGS] = list; if (img.height() > 421) { - m_items[VOLBAR_BTN_1] = img.copy (0, 422, 14, - qMin (11, img.height () - 422)); - m_items[VOLBAR_BTN_0] = img.copy (15, 422, 14, - qMin (11, img.height () - 422)); + const int h = qMin (11, img.height () - 422); + ButtonPixmaps button; + button.addPixmap (img.copy (0, 422, 14, h), ButtonPixmaps::Normal); + button.addPixmap (img.copy (15, 422, 14, h), ButtonPixmaps::Pressed); + m_buttons[SLIDER_VOLUMEBAR_BUTTON] = button; } return true; @@ -194,10 +198,11 @@ Skin::handle_balance (const QPixmap &img) m_backgrounds[SLIDER_BALANCEBAR_BGS] = list; if (img.height() > 421) { - m_items[BALANCE_BTN_1] = img.copy(0, 422, 14, - qMin (11, img.height () - 422)); - m_items[BALANCE_BTN_0] = img.copy(15, 422, 14, - qMin (11, img.height () - 422)); + const int h = qMin (11, img.height () - 422); + ButtonPixmaps button; + button.addPixmap (img.copy (0, 422, 14, h), ButtonPixmaps::Normal); + button.addPixmap (img.copy (15, 422, 14, h), ButtonPixmaps::Pressed); + m_buttons[SLIDER_BALANCEBAR_BUTTON] = button; } return true; diff --git a/src/skin/skin.h b/src/skin/skin.h index e3d6765..ff0c7c8 100644 --- a/src/skin/skin.h +++ b/src/skin/skin.h @@ -25,7 +25,7 @@ #include #include -#include "pixmapbutton.h" +#include "buttonpixmaps.h" class QIODevice; @@ -39,13 +39,14 @@ class Skin : public QObject Skin (const QString &url); Skin (Skin *other, const QString &url = ""); - const bool isValid () const {return m_valid;} + const bool isValid () const + { return m_valid; } static const QPixmap getPixmap (const QString&, const QString&); static const QPixmap getMainPixmap (const QString& path); const QSize getSize (uint item) const - { return m_sizes.value (item); } + { return m_sizes.value (item); } const QPoint getPos (uint item) const { return m_positions.value (item); } @@ -54,17 +55,19 @@ class Skin : public QObject const PixmapMap getSmallNumbers () const { return m_smallNumbers; } - const PBPixmaps getButton (int button) const + const ButtonPixmaps getButton (int button) const { return m_buttons.value (button); } const QPixmapList getBackgrounds (uint item) const { return m_backgrounds.value(item); }; const PixmapMap getPixmapFont () const { return m_letterMap; } - const QPixmap getItem (uint part) const { return m_items.value (part); } + const QPixmap getItem (uint part) const + { return m_items.value (part); } const QPixmap getPls (uint part) const { return m_playlist.value (part); } - const QPixmap getLetter (uint c) const { return m_letterMap.value (c); } + const QPixmap getLetter (uint c) const + { return m_letterMap.value (c); } const QByteArray getPLeditValue (QByteArray c) const { return m_pledit_txt.value(c); } @@ -95,7 +98,7 @@ class Skin : public QObject QString m_skinname; QString m_path; - QMap m_buttons; + QMap m_buttons; QMap m_backgrounds; QMap m_numbers; @@ -150,10 +153,13 @@ class Skin : public QObject /* Sliders */ SLIDER_POSBAR, SLIDER_POSBAR_BGS, + SLIDER_POSBAR_BUTTON, SLIDER_VOLUMEBAR, SLIDER_VOLUMEBAR_BGS, + SLIDER_VOLUMEBAR_BUTTON, SLIDER_BALANCEBAR, SLIDER_BALANCEBAR_BGS, + SLIDER_BALANCEBAR_BUTTON, SLIDER_EQUALIZER, SLIDER_EQUALIZER_BGS, // }; @@ -192,12 +198,6 @@ class Skin : public QObject EQ_WIN_BAR_BTN_0, EQ_WIN_BAR_BTN_1, POSBAR, - POSBAR_BTN_0, - POSBAR_BTN_1, - VOLBAR_BTN_0, - VOLBAR_BTN_1, - BALANCE_BTN_0, - BALANCE_BTN_1, }; enum PlaylistParts { diff --git a/src/widgets/buttonpixmaps.h b/src/widgets/buttonpixmaps.h new file mode 100644 index 0000000..ef898d1 --- /dev/null +++ b/src/widgets/buttonpixmaps.h @@ -0,0 +1,89 @@ +/** + * This file is a part of Promoe, an XMMS2 CLient + * + * Copyright (C) 2008-2010 XMMS2 Team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __BUTTONPIXMAPS_H__ +#define __BUTTONPIXMAPS_H__ + +#include +#include + +typedef QMap PixmapMap; + +/* + * QIcon::Normal for normal apperance + * QIcon::Active for pressed state + * + * QIcon::Off for uncecked state + * QIcon::On for checked state + * + * only QIcon::Normal QIcon::Off combination is necessary + */ +class ButtonPixmaps +{ + public: + ButtonPixmaps () : + m_pixmaps() {} + ButtonPixmaps (const ButtonPixmaps &p) : + m_pixmaps(p.m_pixmaps) {} + + + enum Mode { + Normal = 0, // Used when button is in active Window + Inactive = 1, // Used when button is in inactive Window + Pressed = 2 // used when button is pressed + }; + + enum State { + Unchecked = 0, // used when button is unchecked + Checked = 1 // used when button is checked + }; + + void addPixmap (const QPixmap & pixmap, Mode m = Normal, + State s = Unchecked) { + m_pixmaps[getKey(m, s)] = pixmap; + if (!m_pixmaps.contains (getKey (Normal, Unchecked))) { + m_pixmaps[getKey (Normal, Unchecked)] = pixmap; + } + } + + QPixmap pixmap (Mode m = Normal, State s = Unchecked) const { + if (m_pixmaps.contains (getKey (m, s))) { + return m_pixmaps.value (getKey (m, s)); + + } else if (s == Checked && m != Normal && + m_pixmaps.contains (getKey (Normal, s))) { + return m_pixmaps.value (getKey (Normal, s)); + } else { + return m_pixmaps.value (getKey (Normal, Unchecked)); + } + } + + + ButtonPixmaps & operator= (const ButtonPixmaps & p) { + m_pixmaps = p.m_pixmaps; + } + + protected: + PixmapMap m_pixmaps; + + // get the key to be used in the PixmapMap + inline int getKey (Mode m, State s) const { return (m + s*3); } +}; + +typedef ButtonPixmaps PBPixmaps; +typedef ButtonPixmaps PixmapButtonPixmaps; + +#endif diff --git a/src/widgets/pixmapbutton.h b/src/widgets/pixmapbutton.h index 8884592..66b8d0c 100644 --- a/src/widgets/pixmapbutton.h +++ b/src/widgets/pixmapbutton.h @@ -21,75 +21,13 @@ #include #include +#include "buttonpixmaps.h" + typedef QMap PixmapMap; class QPaintEvent; class QWidget; -/* - * QIcon::Normal for normal apperance - * QIcon::Active for pressed state - * - * QIcon::Off for uncecked state - * QIcon::On for checked state - * - * only QIcon::Normal QIcon::Off combination is necessary - */ -class PixmapButtonPixmaps -{ - public: - PixmapButtonPixmaps () : - m_pixmaps() {} - PixmapButtonPixmaps (const PixmapButtonPixmaps &p) : - m_pixmaps(p.m_pixmaps) {} - - - enum Mode { - Normal = 0, // Used when button is in active Window - Inactive = 1, // Used when button is in inactive Window - Pressed = 2 // used when button is pressed - }; - - enum State { - Unchecked = 0, // used when button is unchecked - Checked = 1 // used when button is checked - }; - - void addPixmap (const QPixmap & pixmap, Mode m = Normal, - State s = Unchecked) { - m_pixmaps[getKey(m, s)] = pixmap; - if (!m_pixmaps.contains (getKey (Normal, Unchecked))) { - m_pixmaps[getKey (Normal, Unchecked)] = pixmap; - } - } - - QPixmap pixmap (Mode m = Normal, State s = Unchecked) const { - if (m_pixmaps.contains (getKey (m, s))) { - return m_pixmaps.value (getKey (m, s)); - - } else if (s == Checked && m != Normal && - m_pixmaps.contains (getKey (Normal, s))) { - return m_pixmaps.value (getKey (Normal, s)); - } else { - return m_pixmaps.value (getKey (Normal, Unchecked)); - } - } - - - PixmapButtonPixmaps & operator= (const PixmapButtonPixmaps & p) { - m_pixmaps = p.m_pixmaps; - } - - protected: - PixmapMap m_pixmaps; - - // get the key to be used in the PixmapMap - inline int getKey (Mode m, State s) const { return (m + s*3); } -}; - -typedef PixmapButtonPixmaps PBPixmaps; - - class PixmapButton : public QAbstractButton { Q_OBJECT @@ -98,7 +36,7 @@ class PixmapButton : public QAbstractButton PixmapButton (QWidget *parent) : QAbstractButton (parent) {} ~PixmapButton () {}; - void setPixmaps (const PixmapButtonPixmaps & p); + void setPixmaps (const ButtonPixmaps & p); protected: void paintEvent ( QPaintEvent * event ); diff --git a/src/widgets/pixmapslider.cpp b/src/widgets/pixmapslider.cpp index 89db48e..ec29ded 100644 --- a/src/widgets/pixmapslider.cpp +++ b/src/widgets/pixmapslider.cpp @@ -43,11 +43,17 @@ PixmapSlider::setBackground (const QPixmapList &list) m_background_index = -1; } +void +PixmapSlider::setButton (const ButtonPixmaps &p) +{ + m_button = p; +} + void PixmapSlider::setSliders (QPixmap normal, QPixmap pressed) { - m_normal = normal; - m_pressed = pressed; + m_button.addPixmap (normal, ButtonPixmaps::Normal); + m_button.addPixmap (pressed, ButtonPixmaps::Pressed); } void @@ -107,10 +113,11 @@ int PixmapSlider::sliderMovePosition (QMouseEvent *event) { int ret; + QPixmap p = m_button.pixmap (ButtonPixmaps::Pressed); if (orientation () == Qt::Vertical) { - ret = sliderValueFromPosition (event->y() - m_pressed.height () /2); + ret = sliderValueFromPosition (event->y() - p.height () /2); } else { - ret = sliderValueFromPosition (event->x() - m_pressed.width () /2); + ret = sliderValueFromPosition (event->x() - p.width () /2); } // Make sliders snap to center. Usefull for equalizer sliders and balance @@ -149,8 +156,9 @@ PixmapSlider::paintEvent (QPaintEvent *event) p.drawPixmap (0, 0, bg.width(), bg.height(), bg); } // draw slider - QPixmap *slider = isSliderDown () ? &m_pressed : &m_normal; - QRect rect (slider->rect ()); + QPixmap slider = m_button.pixmap (isSliderDown () ? ButtonPixmaps::Pressed + : ButtonPixmaps::Normal); + QRect rect (slider.rect ()); if (orientation () == Qt::Vertical) { rect.moveTop (sliderPositionFromValue () + m_slider_offset.y ()); rect.moveLeft (m_slider_offset.x ()); @@ -158,7 +166,7 @@ PixmapSlider::paintEvent (QPaintEvent *event) rect.moveLeft (sliderPositionFromValue () + m_slider_offset.x ()); rect.moveTop (m_slider_offset.y ()); } - p.drawPixmap (rect , *slider, slider->rect ()); + p.drawPixmap (rect , slider, slider.rect ()); p.end (); } @@ -166,10 +174,11 @@ int PixmapSlider::sliderPositionFromValue () { int span; + QPixmap p = m_button.pixmap (ButtonPixmaps::Normal); if (orientation () == Qt::Vertical) { - span = height () - m_normal.height (); + span = height () - p.height (); } else { - span = width () - m_normal.width (); + span = width () - p.width (); } return QStyle::sliderPositionFromValue (minimum (), maximum (), @@ -181,10 +190,11 @@ int PixmapSlider::sliderValueFromPosition (int pos) { int span; + QPixmap p = m_button.pixmap (ButtonPixmaps::Normal); if (orientation () == Qt::Vertical) { - span = height () - m_normal.height (); + span = height () - p.height (); } else { - span = width () - m_normal.width (); + span = width () - p.width (); } return QStyle::sliderValueFromPosition (minimum (), maximum (), pos, diff --git a/src/widgets/pixmapslider.h b/src/widgets/pixmapslider.h index 22c0db4..06d8976 100644 --- a/src/widgets/pixmapslider.h +++ b/src/widgets/pixmapslider.h @@ -1,7 +1,7 @@ /** * This file is a part of Promoe, an XMMS2 CLient * - * Copyright (C) 2008 XMMS2 Team + * Copyright (C) 2008-2010 XMMS2 Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,6 +21,8 @@ #include #include +#include "buttonpixmaps.h" + class QWidget; class QPixmap; class QPaintEvent; @@ -41,9 +43,13 @@ class PixmapSlider : public QAbstractSlider void setBackground (const QPixmapList &); QPixmapList backgrounds () const { return m_backgrounds; } + void setButton (const ButtonPixmaps &); + void setSliders (QPixmap normal, QPixmap pressed = QPixmap ()); - QPixmap normalSlider () const { return m_normal; } - QPixmap pressedSlider () const { return m_pressed; } + QPixmap normalSlider () const + { return m_button.pixmap (ButtonPixmaps::Normal); } + QPixmap pressedSlider () const + { return m_button.pixmap (ButtonPixmaps::Pressed); } void setSliderOffset (QPoint offset) { m_slider_offset = offset; } @@ -63,8 +69,7 @@ class PixmapSlider : public QAbstractSlider private: QPixmapList m_backgrounds; - QPixmap m_normal; - QPixmap m_pressed; + ButtonPixmaps m_button; QPoint m_slider_offset; int m_background_index;