diff options
author | 2017-07-26 10:45:51 +0200 | |
---|---|---|
committer | 2017-07-26 10:45:51 +0200 | |
commit | 42ff0b116ebe137c566f06389477cb2ca7bcb2df (patch) | |
tree | 6799db1963d8dded5897f5d7301b1cf9df990594 | |
parent | 6b9e7a984825b05049713ba0aa62dcb6560277f0 (diff) |
Revert "Add master volume control slider"
This reverts commit 79e0139fb399b5af1342783ed6abb61aff6e28dd.
-rw-r--r-- | homescreen/homescreen.pro | 11 | ||||
-rw-r--r-- | homescreen/qml/MediaAreaBlank.qml | 106 | ||||
-rw-r--r-- | homescreen/src/main.cpp | 19 | ||||
-rw-r--r-- | homescreen/src/mastervolume.cpp | 33 | ||||
-rw-r--r-- | homescreen/src/mastervolume.h | 49 | ||||
-rw-r--r-- | homescreen/src/paclient.cpp | 240 | ||||
-rw-r--r-- | homescreen/src/paclient.h | 64 |
7 files changed, 3 insertions, 519 deletions
diff --git a/homescreen/homescreen.pro b/homescreen/homescreen.pro index 061d2fb..1ca59b6 100644 --- a/homescreen/homescreen.pro +++ b/homescreen/homescreen.pro @@ -15,8 +15,7 @@ TEMPLATE = app TARGET = HomeScreen QT = qml quick dbus -CONFIG += c++11 link_pkgconfig -PKGCONFIG += libpulse +CONFIG += c++11 include(../interfaces/interfaces.pri) @@ -28,9 +27,7 @@ SOURCES += \ src/appinfo.cpp \ src/statusbarmodel.cpp \ src/statusbarserver.cpp \ - src/applicationlauncher.cpp \ - src/mastervolume.cpp \ - src/paclient.cpp + src/applicationlauncher.cpp HEADERS += \ src/homescreencontrolinterface.h \ @@ -39,9 +36,7 @@ HEADERS += \ src/statusbarserver.h \ src/applicationlauncher.h \ src/applicationmodel.h \ - src/appinfo.h \ - src/mastervolume.h \ - src/paclient.h + src/appinfo.h OTHER_FILES += \ README.md diff --git a/homescreen/qml/MediaAreaBlank.qml b/homescreen/qml/MediaAreaBlank.qml index 51fa657..0dde451 100644 --- a/homescreen/qml/MediaAreaBlank.qml +++ b/homescreen/qml/MediaAreaBlank.qml @@ -16,120 +16,14 @@ */ import QtQuick 2.2 -import QtQuick.Layouts 1.1 -import QtQuick.Controls 2.0 -import AGL.Demo.Controls 1.0 -import MasterVolume 1.0 Image { width: 1080 height: 215 source: './images/Utility_Logo_Background-01.png' - property bool displayVolume: false; - - MouseArea { - anchors.fill: parent - function enableVolumeDisplay() { - if (!displayVolume) { - displayVolume = true - master_volume.visible = true - volume_timer.restart() - } - } - onClicked: enableVolumeDisplay() - } Image { - id: logo_image anchors.centerIn: parent source: './images/Utility_Logo_Colour-01.png' } - - Timer { - id: volume_timer - interval: 5000; running: false; repeat: false - onTriggered: displayVolume = false - } - - states: [ - State { when: displayVolume; - PropertyChanges { target: master_volume; opacity: 1.0 } - PropertyChanges { target: slider; enabled: true } - PropertyChanges { target: logo_image; opacity: 0.0 } - }, - State { when: !displayVolume; - PropertyChanges { target: master_volume; opacity: 0.0 } - PropertyChanges { target: slider; enabled: false } - PropertyChanges { target: logo_image; opacity: 1.0 } - } - ] - - transitions: Transition { - NumberAnimation { property: "opacity"; duration: 500} - } - - MasterVolume { - id: mv - objectName: "mv" - onVolumeChanged: slider.value = volume - } - - Item { - id: master_volume - anchors.fill: parent - anchors.centerIn: parent - visible: false - - Label { - font.pixelSize: 36 - anchors.horizontalCenter: parent.horizontalCenter - color: "white" - text: "Master Volume" - } - - RowLayout { - anchors.fill: parent - anchors.centerIn: parent - anchors.margins: 20 - spacing: 20 - Label { - font.pixelSize: 36 - color: "white" - text: "0 %" - } - Slider { - id: slider - Layout.fillWidth: true - from: 0 - to: 65536 - stepSize: 256 - snapMode: Slider.SnapOnRelease - onValueChanged: mv.volume = value - Component.onCompleted: value = mv.volume - onPressedChanged: { - if (pressed) {volume_timer.stop()} - else {volume_timer.restart()} - } - background: Rectangle { - id: slider_bg - height: 16 - color: "#59FF7F" - } - handle: Rectangle { - anchors.verticalCenter: slider_bg.verticalCenter - width: 48 - height: 48 - radius: 24 - x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width) - y: slider.topPadding + slider.availableHeight / 2 - height / 2 - color: "white" - } - } - Label { - font.pixelSize: 36 - color: "white" - text: "100 %" - } - } - } } diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp index 215e7c6..28a8d38 100644 --- a/homescreen/src/main.cpp +++ b/homescreen/src/main.cpp @@ -28,8 +28,6 @@ #include "applicationmodel.h" #include "appinfo.h" #include "afm_user_daemon_proxy.h" -#include "mastervolume.h" -#include "paclient.h" // XXX: We want this DBus connection to be shared across the different // QML objects, is there another way to do this, a nice way, perhaps? @@ -79,26 +77,18 @@ int main(int argc, char *argv[]) qInstallMessageHandler(noOutput); } - // Fire up PA client QThread - QThread* pat = new QThread; - PaClient* client = new PaClient(); - client->moveToThread(pat); - pat->start(); - qDBusRegisterMetaType<AppInfo>(); qDBusRegisterMetaType<QList<AppInfo> >(); qmlRegisterType<ApplicationLauncher>("HomeScreen", 1, 0, "ApplicationLauncher"); qmlRegisterType<ApplicationModel>("Home", 1, 0, "ApplicationModel"); qmlRegisterType<StatusBarModel>("HomeScreen", 1, 0, "StatusBarModel"); - qmlRegisterType<MasterVolume>("MasterVolume", 1, 0, "MasterVolume"); QQmlApplicationEngine engine; LayoutHandler* layoutHandler = new LayoutHandler(); HomeScreenControlInterface* hsci = new HomeScreenControlInterface(); - QObject::connect(hsci, SIGNAL(newRequestGetSurfaceStatus(int)), layoutHandler, SLOT(requestGetSurfaceStatus(int))); QObject::connect(hsci, SIGNAL(newRequestsToBeVisibleApp(int)), layoutHandler, SLOT(makeMeVisible(int))); QObject::connect(hsci, SIGNAL(newRequestRenderSurfaceToArea(int, int)), layoutHandler, SLOT(requestRenderSurfaceToArea(int,int))); @@ -109,14 +99,5 @@ int main(int argc, char *argv[]) engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); - QList<QObject *> mobjs = engine.rootObjects(); - MasterVolume *mv = mobjs.first()->findChild<MasterVolume *>("mv"); - engine.rootContext()->setContextProperty("MasterVolume", mv); - QObject::connect(mv, SIGNAL(sliderVolumeChanged(int)), client, SLOT(incDecVolume(int))); - QObject::connect(client, SIGNAL(volumeExternallyChanged(int)), mv, SLOT(changeExternalVolume(int))); - - // Initalize PA client - client->init(); - return a.exec(); } diff --git a/homescreen/src/mastervolume.cpp b/homescreen/src/mastervolume.cpp deleted file mode 100644 index 46985ee..0000000 --- a/homescreen/src/mastervolume.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2017 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "mastervolume.h" - -#include <QtCore/QDebug> - -void MasterVolume::setVolume(pa_volume_t volume) -{ - int volume_delta = volume - m_volume; - m_volume = volume; - emit sliderVolumeChanged(volume_delta); - -} - -void MasterVolume::changeExternalVolume(int volume) -{ - m_volume = volume; - emit volumeChanged(); -} diff --git a/homescreen/src/mastervolume.h b/homescreen/src/mastervolume.h deleted file mode 100644 index edcdd8c..0000000 --- a/homescreen/src/mastervolume.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2017 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <QtCore/QObject> -#include <QQmlEngine> -#include <QDebug> - -#include <pulse/pulseaudio.h> - -class MasterVolume : public QObject -{ - Q_OBJECT - Q_PROPERTY (uint32_t volume READ getVolume WRITE setVolume NOTIFY volumeChanged) - - public: - MasterVolume(QObject *parent = 0) - : QObject(parent), m_volume(32768) - { - } - - ~MasterVolume() {} - - uint32_t getVolume() const { return m_volume; } - void setVolume(pa_volume_t volume); - - public slots: - void changeExternalVolume(int volume); - - signals: - void volumeChanged(void); - void sliderVolumeChanged(int volume_delta); - void externalVolumeChanged(uint32_t volume); - - private: - uint32_t m_volume; -}; diff --git a/homescreen/src/paclient.cpp b/homescreen/src/paclient.cpp deleted file mode 100644 index 59a3742..0000000 --- a/homescreen/src/paclient.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2016,2017 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "paclient.h" - -#include <QtCore/QDebug> - -PaClient::PaClient() - : m_init(false), m_ml(nullptr), m_mlapi(nullptr), m_ctx(nullptr) -{ -} - -PaClient::~PaClient() -{ - if (m_init) - close(); -} - -void PaClient::close() -{ - if (!m_init) return; - pa_threaded_mainloop_stop(m_ml); - pa_threaded_mainloop_free(m_ml); - m_init = false; -} - -static void set_sink_volume_cb(pa_context *c, int success, void *data) -{ - Q_UNUSED(data); - - if (!success) - qWarning() << "PaClient: set sink volume: " << - pa_strerror(pa_context_errno(c)); -} - -void PaClient::incDecVolume(const int volume_delta) -{ - pa_operation *o; - pa_context *c = context(); - pa_sink_info *i = getDefaultSinkInfo(); - - if (volume_delta > 0) - pa_cvolume_inc_clamp(&i->volume, volume_delta, 65536); - else - pa_cvolume_dec(&i->volume, abs(volume_delta)); - - o = pa_context_set_sink_volume_by_index(c, i->index, &i->volume, set_sink_volume_cb, NULL); - if (!o) { - qWarning() << "PaClient: set sink #" << i->index << - " volume: " << pa_strerror(pa_context_errno(c)); - return; - } - pa_operation_unref(o); -} - -void get_sink_info_change_cb(pa_context *c, - const pa_sink_info *i, - int eol, - void *data) -{ - Q_UNUSED(c); - Q_ASSERT(i); - Q_ASSERT(data); - - if (eol) return; - - PaClient *self = reinterpret_cast<PaClient*>(data); - pa_sink_info *si = self->getDefaultSinkInfo(); - if (i->index == si->index) { - self->setDefaultSinkInfo(i); - pa_cvolume *cvolume = &self->getDefaultSinkInfo()->volume; - emit self->volumeExternallyChanged(pa_cvolume_avg(cvolume)); - } -} - -void get_default_sink_info_cb(pa_context *c, - const pa_sink_info *i, - int eol, - void *data) -{ - Q_UNUSED(c); - Q_ASSERT(i); - Q_ASSERT(data); - - if (eol) return; - - PaClient *self = reinterpret_cast<PaClient*>(data); - self->setDefaultSinkInfo(i); -} - -pa_sink_info *PaClient::getDefaultSinkInfo(void) -{ - return &m_default_sink_info; -} - -void PaClient::setDefaultSinkInfo(const pa_sink_info *i) -{ - m_default_sink_info.index = i->index; - m_default_sink_info.channel_map.channels = i->channel_map.channels; - pa_cvolume *cvolume = &m_default_sink_info.volume; - cvolume->channels = i->volume.channels; - for (int chan = 0; chan < i->channel_map.channels; chan++) { - cvolume->values[chan] = i->volume.values[chan]; - } -} - -void get_server_info_cb(pa_context *c, - const pa_server_info *i, - void *data) -{ - pa_operation *o; - o = pa_context_get_sink_info_by_name(c, i->default_sink_name, get_default_sink_info_cb, data); - if (!o) { - qWarning() << "PaClient: get sink info by name: " << - pa_strerror(pa_context_errno(c)); - return; - } -} - -void subscribe_cb(pa_context *c, - pa_subscription_event_type_t type, - uint32_t index, - void *data) -{ - pa_operation *o; - - if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE) { - qWarning("PaClient: unhandled subscribe event operation"); - return; - } - - switch (type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { - case PA_SUBSCRIPTION_EVENT_SINK: - o = pa_context_get_sink_info_by_index(c, index, get_sink_info_change_cb, data); - if (!o) { - qWarning() << "PaClient: get sink info by index: " << - pa_strerror(pa_context_errno(c)); - return; - } - break; - default: - qWarning("PaClient: unhandled subscribe event facility"); - } -} - -void context_state_cb(pa_context *c, void *data) -{ - pa_operation *o; - PaClient *self = reinterpret_cast<PaClient*>(data); - - switch (pa_context_get_state(c)) { - case PA_CONTEXT_CONNECTING: - case PA_CONTEXT_AUTHORIZING: - case PA_CONTEXT_SETTING_NAME: - break; - case PA_CONTEXT_READY: - o = pa_context_get_server_info(c, get_server_info_cb, data); - if (!o) { - qWarning() << "PaClient: get server info: " << - pa_strerror(pa_context_errno(c)); - return; - } - pa_operation_unref(o); - pa_context_set_subscribe_callback(c, subscribe_cb, data); - o = pa_context_subscribe(c, (pa_subscription_mask_t)(PA_SUBSCRIPTION_MASK_SINK), NULL, NULL); - if (!o) { - qWarning() << "PaClient: subscribe: " << - pa_strerror(pa_context_errno(c)); - return; - } - break; - case PA_CONTEXT_TERMINATED: - self->close(); - break; - - case PA_CONTEXT_FAILED: - default: - qCritical() << "PaClient: connection failed: " << - pa_strerror(pa_context_errno(c)); - self->close(); - break; - } -} - -void PaClient::init() -{ - m_ml = pa_threaded_mainloop_new(); - if (!m_ml) { - qCritical("PaClient: failed to create mainloop"); - return; - } - - pa_threaded_mainloop_set_name(m_ml, "PaClient mainloop"); - - m_mlapi = pa_threaded_mainloop_get_api(m_ml); - - lock(); - - m_ctx = pa_context_new(m_mlapi, "HomeScreen"); - if (!m_ctx) { - qCritical("PaClient: failed to create context"); - unlock(); - pa_threaded_mainloop_free(m_ml); - return; - } - pa_context_set_state_callback(m_ctx, context_state_cb, this); - - if (pa_context_connect(m_ctx, 0, (pa_context_flags_t)0, 0) < 0) { - qCritical("PaClient: failed to connect"); - pa_context_unref(m_ctx); - unlock(); - pa_threaded_mainloop_free(m_ml); - return; - } - - if (pa_threaded_mainloop_start(m_ml) != 0) { - qCritical("PaClient: failed to start mainloop"); - pa_context_unref(m_ctx); - unlock(); - pa_threaded_mainloop_free(m_ml); - return; - } - - unlock(); - - m_init = true; -} diff --git a/homescreen/src/paclient.h b/homescreen/src/paclient.h deleted file mode 100644 index abf178b..0000000 --- a/homescreen/src/paclient.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2016,2017 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <pulse/pulseaudio.h> - -#include <QtCore/QHash> -#include <QtCore/QObject> - -class PaClient : public QObject -{ - Q_OBJECT - public: - PaClient(); - ~PaClient(); - - void init(); - void close(); - - inline pa_context *context() const - { - return m_ctx; - } - - inline void lock() - { - pa_threaded_mainloop_lock(m_ml); - } - - inline void unlock() - { - pa_threaded_mainloop_unlock(m_ml); - } - - pa_sink_info * getDefaultSinkInfo(void); - void setDefaultSinkInfo(const pa_sink_info *i); - void setMasterVolume(const pa_cvolume *); - - public slots: - void incDecVolume(const int volume_delta); - - signals: - void volumeExternallyChanged(int volume); - - private: - bool m_init; - pa_threaded_mainloop *m_ml; - pa_mainloop_api *m_mlapi; - pa_context *m_ctx; - pa_cvolume m_master_cvolume; - pa_sink_info m_default_sink_info; -}; |