draw sound icon

Change-Id: Iecc5f5f6b27c8b5f87e502d5cff91d7e3ca0d95d
This commit is contained in:
石博文 2016-08-02 16:25:01 +08:00
parent 4dfbfaad7d
commit 4944079076
Notes: Deepin Code Review 2016-08-02 08:28:40 +00:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Tue, 02 Aug 2016 08:28:40 +0000
Reviewed-on: https://cr.deepin.io/14858
Project: dde/dde-dock
Branch: refs/heads/master
5 changed files with 71 additions and 9 deletions

View File

@ -1,7 +1,7 @@
include(../../interfaces/interfaces.pri)
QT += widgets svg
QT += widgets svg dbus
TEMPLATE = lib
CONFIG += plugin c++11 link_pkgconfig
PKGCONFIG += dtkbase dtkwidget

View File

@ -7,7 +7,8 @@ SoundApplet::SoundApplet(QWidget *parent)
m_centeralWidget(new QWidget(this)),
m_audioInter(new DBusAudio(this))
m_audioInter(new DBusAudio(this)),
m_defSinkInter(nullptr)
{
m_centeralLayout = new QVBoxLayout;
m_centeralWidget->setLayout(m_centeralLayout);
@ -20,9 +21,15 @@ SoundApplet::SoundApplet(QWidget *parent)
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setStyleSheet("background-color:transparent;");
for (auto sp : m_audioInter->sinks())
{
DBusSink *sink = new DBusSink(sp.path(), this);
qDebug() << sink->name();
}
QMetaObject::invokeMethod(this, "defaultSinkChanged", Qt::QueuedConnection);
}
void SoundApplet::defaultSinkChanged()
{
delete m_defSinkInter;
const QDBusObjectPath defSinkPath = m_audioInter->GetDefaultSink();
m_defSinkInter = new DBusSink(defSinkPath.path(), this);
emit defaultSinkChanged(m_defSinkInter);
}

View File

@ -14,11 +14,18 @@ class SoundApplet : public QScrollArea
public:
explicit SoundApplet(QWidget *parent = 0);
signals:
void defaultSinkChanged(DBusSink *sink) const;
private slots:
void defaultSinkChanged();
private:
QWidget *m_centeralWidget;
QVBoxLayout *m_centeralLayout;
DBusAudio *m_audioInter;
DBusSink *m_defSinkInter;
};
#endif // SOUNDAPPLET_H

View File

@ -1,4 +1,5 @@
#include "sounditem.h"
#include "constants.h"
#include <QPainter>
#include <QIcon>
@ -6,11 +7,14 @@
SoundItem::SoundItem(QWidget *parent)
: QWidget(parent),
m_applet(new SoundApplet(this))
m_applet(new SoundApplet(this)),
m_sinkInter(nullptr)
{
QIcon::setThemeName("deepin");
m_applet->setVisible(false);
connect(m_applet, static_cast<void (SoundApplet::*)(DBusSink*) const>(&SoundApplet::defaultSinkChanged), this, &SoundItem::sinkChanged);
}
QWidget *SoundItem::popupApplet()
@ -40,9 +44,50 @@ void SoundItem::paintEvent(QPaintEvent *e)
void SoundItem::refershIcon()
{
if (!m_sinkInter)
return;
const double volmue = m_sinkInter->volume();
const bool mute = m_sinkInter->mute();
const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
QString iconString;
if (displayMode == Dock::Fashion)
{
QString volumeString;
if (volmue >= 1.0)
volumeString = "010";
else
volumeString = QString("0") + ('0' + int(volmue * 10)) + "0";
iconString = "audio-volume-" + volumeString + (mute ? "-muted" : "");
} else {
QString volumeString;
if (mute)
volumeString = "muted";
else if (volmue >= double(2)/3)
volumeString = "high";
else if (volmue >= double(1)/3)
volumeString = "medium";
else
volumeString = "low";
iconString = QString("audio-volume-%1-symbolic").arg(volumeString);
}
const int iconSize = std::min(width(), height()) * 0.8;
const QIcon icon = QIcon::fromTheme("audio-volume-080");
const QIcon icon = QIcon::fromTheme(iconString);
m_iconPixmap = icon.pixmap(iconSize, iconSize);
update();
}
void SoundItem::sinkChanged(DBusSink *sink)
{
m_sinkInter = sink;
connect(m_sinkInter, &DBusSink::MuteChanged, this, &SoundItem::refershIcon);
connect(m_sinkInter, &DBusSink::VolumeChanged, this, &SoundItem::refershIcon);
refershIcon();
}

View File

@ -2,6 +2,7 @@
#define SOUNDITEM_H
#include "soundapplet.h"
#include "dbus/dbussink.h"
#include <QWidget>
@ -21,9 +22,11 @@ protected:
private slots:
void refershIcon();
void sinkChanged(DBusSink *sink);
private:
SoundApplet *m_applet;
DBusSink *m_sinkInter;
QPixmap m_iconPixmap;
};