OTHER: fixes for displaying clutterbar

This commit is contained in:
Thomas Frauendorfer 2010-03-20 02:41:32 +01:00
parent ae6dd70b2a
commit 9b595af753
5 changed files with 157 additions and 59 deletions

View file

@ -20,7 +20,9 @@
#include <QMouseEvent>
#include <QPainter>
ClutterBar::ClutterBar (QWidget *parent) : QWidget (parent)
ClutterBar::ClutterBar (QWidget *parent) : QWidget (parent),
m_val (Skin::CLUTTER_ON), m_checked_a (false), m_checked_d (false),
m_show_always (true)
{
connect (SkinManager::instance (), SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
@ -34,18 +36,16 @@ ClutterBar::~ClutterBar ()
void
ClutterBar::setPixmaps(Skin *skin)
{
m_clutter_on = skin->getItem(Skin::CLUTTER_ON);
m_clutter_off = skin->getItem(Skin::CLUTTER_OFF);
setPixmaps (skin->getPixmapList (Skin::PIXMAPS_CLUTTERBAR));
}
m_clutter_o = skin->getItem(Skin::CLUTTER_O);
m_clutter_a = skin->getItem(Skin::CLUTTER_A);
m_clutter_i = skin->getItem(Skin::CLUTTER_I);
m_clutter_d = skin->getItem(Skin::CLUTTER_D);
m_clutter_v = skin->getItem(Skin::CLUTTER_V);
void
ClutterBar::setPixmaps (const QPixmapList &p)
{
m_pixmaps = p;
m_pixmap = m_clutter_on;
setFixedSize (m_clutter_on.size ());
QPixmap pixmap = m_pixmaps.value (Skin::CLUTTER_ON);
setFixedSize (pixmap.size ());
update();
}
@ -53,41 +53,118 @@ ClutterBar::setPixmaps(Skin *skin)
void
ClutterBar::mousePressEvent (QMouseEvent *event)
{
int y = event->pos().y();
if (y > 2 && y < 11) {
m_pixmap = m_clutter_o;
} else if (y > 10 && y < 19) {
m_pixmap = m_clutter_a;
} else if (y > 18 && y < 27) {
m_pixmap = m_clutter_i;
} else if (y > 26 && y < 35) {
m_pixmap = m_clutter_d;
} else if (y > 34 && y < 43) {
m_pixmap = m_clutter_v;
}
m_val = posToVal (event->x (), event->y ());
update();
}
void
ClutterBar::mouseMoveEvent (QMouseEvent *event)
{
const int val = posToVal (event->x(), event->y());
if (m_val != val) {
m_val = val;
update ();
}
}
void
ClutterBar::mouseReleaseEvent (QMouseEvent *event)
{
m_pixmap = m_clutter_on;
m_val = Skin::CLUTTER_ON;
const int val = posToVal (event->x (), event->y());
switch (val) {
case Skin::CLUTTER_O:
emit clicked_o ();
break;
case Skin::CLUTTER_A:
m_checked_a = !m_checked_a;
emit clicked_a (m_checked_a);
break;
case Skin::CLUTTER_I:
emit clicked_i ();
break;
case Skin::CLUTTER_D:
m_checked_d = !m_checked_d;
emit clicked_d (m_checked_d);
break;
case Skin::CLUTTER_V:
emit clicked_v ();
break;
default:
break;
}
update();
}
void
ClutterBar::enterEvent (QEvent * event)
{
update ();
}
void
ClutterBar::leaveEvent (QEvent * event)
{
update ();
}
bool
ClutterBar::posInWidget (const int x, const int y) const
{
return (x >= 0 && y >= 0 && x < width() && y < height());
}
int
ClutterBar::posToVal (const int x, const int y) const
{
if (!posInWidget (x, y))
return Skin::CLUTTER_ON;
if (y <= 2) {
return Skin::CLUTTER_ON;
} else if (y <= 10) {
return Skin::CLUTTER_O;
} else if (y <= 18) {
return Skin::CLUTTER_A;
} else if (y <= 26) {
return Skin::CLUTTER_I;
} else if (y <= 34) {
return Skin::CLUTTER_D;
} else if (y <= 42) {
return Skin::CLUTTER_V;
}
return Skin::CLUTTER_ON;
}
void
ClutterBar::paintEvent (QPaintEvent *event)
{
if (m_pixmap.isNull ()) {
return;
QPainter paint (this);
if (m_show_always || underMouse ()) {
const QPixmap pix = m_pixmaps.value (m_val);
if (pix.isNull ())
return;
paint.drawPixmap (rect (), pix, pix.rect ());
if (m_checked_a) {
const QPixmap pix_a = m_pixmaps.value (Skin::CLUTTER_A);
const QRect rect(0, 10, pix_a.width (), 8);
paint.drawPixmap (rect, pix_a, rect);
}
if (m_checked_d) {
const QPixmap pix_d = m_pixmaps.value (Skin::CLUTTER_D);
const QRect rect(0, 26, pix_d.width (), 8);
paint.drawPixmap (rect, pix_d, rect);
}
} else {
const QPixmap pix = m_pixmaps.value (Skin::CLUTTER_OFF);
if (pix.isNull ())
return;
paint.drawPixmap (rect (), pix, pix.rect ());
}
QPainter p (this);
p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ());
}
#include "clutterbar.moc"

View file

@ -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
@ -16,12 +16,17 @@
#ifndef __CLUTTERBAR_H__
#define __CLUTTERBAR_H__
#include "QWidget"
#include <QWidget>
#include <QMap>
#include <QPixmap>
class QMouseEvent;
class QPaintEvent;
class Skin;
typedef QList<QPixmap> QPixmapList;
class ClutterBar : public QWidget
{
Q_OBJECT
@ -30,26 +35,36 @@ class ClutterBar : public QWidget
~ClutterBar ();
public slots:
void setPixmaps (const QPixmapList &);
void setPixmaps(Skin *skin);
signals:
void clicked_o ();
void clicked_a (bool checked);
void clicked_i ();
void clicked_d (bool checked);
void clicked_v ();
protected:
void paintEvent (QPaintEvent *event);
void mousePressEvent (QMouseEvent *event);
void mouseMoveEvent (QMouseEvent *event);
void mouseReleaseEvent (QMouseEvent *event);
QPixmap m_clutter_off;
QPixmap m_clutter_on;
void enterEvent (QEvent *event);
void leaveEvent (QEvent *event);
QPixmap m_clutter_o;
QPixmap m_clutter_a;
QPixmap m_clutter_i;
QPixmap m_clutter_d;
QPixmap m_clutter_v;
bool posInWidget (const int x, const int y) const;
int posToVal (const int x, const int y) const;
bool enabled;
QPixmapList m_pixmaps;
QPixmap m_pixmap;
int m_val;
bool m_checked_a;
bool m_checked_d;
bool m_show_always;
};

View file

@ -16,7 +16,7 @@
#ifndef __PLAYLISTMENU_H__
#define __PLAYLISTMENU_H__
#include <skin.h>
#include "skin.h"
#include <QWidget>

View file

@ -125,14 +125,17 @@ Skin::handle_titlebar (const QPixmap &img)
m_items[STATUSBAR_0] = img.copy(27, 29, 275, 14);
m_items[STATUSBAR_1] = img.copy(27, 29+13, 275, 14);
m_items[CLUTTER_ON] = img.copy(304+8*0, 0, 8, 43);
m_items[CLUTTER_OFF] = img.copy(304+8*1, 0, 8, 43);
// Must be the same order as ClutterItems
QPixmapList clist;
clist << img.copy(304+8*0, 0, 8, 43); // CLUTTER_ON
clist << img.copy(304+8*1, 0, 8, 43); // CLUTTER_OFF
m_items[CLUTTER_O] = img.copy(304+8*0, 44, 8, 43);
m_items[CLUTTER_A] = img.copy(304+8*1, 44, 8, 43);
m_items[CLUTTER_I] = img.copy(304+8*2, 44, 8, 43);
m_items[CLUTTER_D] = img.copy(304+8*3, 44, 8, 43);
m_items[CLUTTER_V] = img.copy(304+8*4, 44, 8, 43);
clist << img.copy(304+8*0, 44, 8, 43); // CLUTTER_O
clist << img.copy(304+8*1, 44, 8, 43); // CLUTTER_A
clist << img.copy(304+8*2, 44, 8, 43); // CLUTTER_I
clist << img.copy(304+8*3, 44, 8, 43); // CLUTTER_D
clist << img.copy(304+8*4, 44, 8, 43); // CLUTTER_V
m_pixmaplists[PIXMAPS_CLUTTERBAR] = clist;
return true;
}

View file

@ -162,6 +162,8 @@ class Skin : public QObject
SLIDER_BALANCEBAR_BUTTON,
SLIDER_EQUALIZER,
SLIDER_EQUALIZER_BGS,
/* Various */
PIXMAPS_CLUTTERBAR,
// };
//
// enum Part { // Old and not yet sorted enum
@ -177,20 +179,10 @@ class Skin : public QObject
TITLEBAR_1,
STATUSBAR_0,
STATUSBAR_1,
SEEKBAR,
SEEKBAR_POS_0,
SEEKBAR_POS_1,
TEXTBG,
PIC_PLAY,
PIC_PAUSE,
PIC_STOP,
CLUTTER_ON,
CLUTTER_OFF,
CLUTTER_O,
CLUTTER_A,
CLUTTER_I,
CLUTTER_D,
CLUTTER_V,
EQ_WIN_BG,
EQ_WIN_TITLE_ACTIVE,
EQ_WIN_TITLE_INACTIVE,
@ -200,6 +192,17 @@ class Skin : public QObject
POSBAR,
};
// The order here must be the same as in handle_titlebar
enum ClutterItems {
CLUTTER_ON,
CLUTTER_OFF,
CLUTTER_O,
CLUTTER_A,
CLUTTER_I,
CLUTTER_D,
CLUTTER_V
};
enum PlaylistParts {
PLS_CORNER_UL_0,
PLS_CORNER_UL_1,