mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
draw sound icon
Change-Id: Iecc5f5f6b27c8b5f87e502d5cff91d7e3ca0d95d
This commit is contained in:
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
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user