From eccb402486361155cde18f0c4a3cdfe6edb1f76c Mon Sep 17 00:00:00 2001 From: FanPengCheng Date: Fri, 28 May 2021 11:12:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A3=B0=E9=9F=B3?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 界面元素边距调整 Log: 修复声音列表显示问题 Bug: https://pms.uniontech.com/zentao/bug-view-81680.html Change-Id: Ie530864da00a221f52329581ee0b5ea1f66f2f7f --- frame/util/dockpopupwindow.cpp | 5 - frame/util/dockpopupwindow.h | 2 - frame/util/horizontalseperator.cpp | 12 +- plugins/sound/sinkinputwidget.cpp | 215 ---------------------------- plugins/sound/sinkinputwidget.h | 69 --------- plugins/sound/soundaccessible.h | 3 - plugins/sound/soundapplet.cpp | 219 +++++++++++++---------------- plugins/sound/soundapplet.h | 13 +- 8 files changed, 102 insertions(+), 436 deletions(-) delete mode 100644 plugins/sound/sinkinputwidget.cpp delete mode 100644 plugins/sound/sinkinputwidget.h diff --git a/frame/util/dockpopupwindow.cpp b/frame/util/dockpopupwindow.cpp index 772e71e9d..81451a637 100644 --- a/frame/util/dockpopupwindow.cpp +++ b/frame/util/dockpopupwindow.cpp @@ -32,13 +32,9 @@ DWIDGET_USE_NAMESPACE DockPopupWindow::DockPopupWindow(QWidget *parent) : DArrowRectangle(ArrowBottom, parent), m_model(false), - m_acceptDelayTimer(new QTimer(this)), m_regionInter(new DRegionMonitor(this)) { setMargin(0); - m_acceptDelayTimer->setSingleShot(true); - m_acceptDelayTimer->setInterval(100); - m_wmHelper = DWindowManagerHelper::instance(); compositeChanged(); @@ -46,7 +42,6 @@ DockPopupWindow::DockPopupWindow(QWidget *parent) setWindowFlags(Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus); setAttribute(Qt::WA_InputMethodEnabled, false); - connect(m_acceptDelayTimer, &QTimer::timeout, this, &DockPopupWindow::accept); connect(m_wmHelper, &DWindowManagerHelper::hasCompositeChanged, this, &DockPopupWindow::compositeChanged); connect(m_regionInter, &DRegionMonitor::buttonPress, this, &DockPopupWindow::onGlobMouseRelease); } diff --git a/frame/util/dockpopupwindow.h b/frame/util/dockpopupwindow.h index 0ad857658..81465abea 100644 --- a/frame/util/dockpopupwindow.h +++ b/frame/util/dockpopupwindow.h @@ -68,8 +68,6 @@ private: bool m_model; QPoint m_lastPoint; - QTimer *m_acceptDelayTimer; - DRegionMonitor *m_regionInter; DWindowManagerHelper *m_wmHelper; }; diff --git a/frame/util/horizontalseperator.cpp b/frame/util/horizontalseperator.cpp index c910662f4..8f24e81c2 100644 --- a/frame/util/horizontalseperator.cpp +++ b/frame/util/horizontalseperator.cpp @@ -34,11 +34,6 @@ HorizontalSeperator::HorizontalSeperator(QWidget *parent) { setFixedHeight(2); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - QPalette palette = this->palette(); - palette.setColor(QPalette::Light, QColor(0, 0, 0, 0.1 * 255)); - palette.setColor(QPalette::Dark, QColor(255, 255, 255, 0.1 * 255)); - this->setPalette(palette); } void HorizontalSeperator::paintEvent(QPaintEvent *e) @@ -46,8 +41,7 @@ void HorizontalSeperator::paintEvent(QPaintEvent *e) Q_UNUSED(e) QPainter painter(this); - if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) - painter.fillRect(rect(), palette().color(QPalette::Light)); - else - painter.fillRect(rect(), palette().color(QPalette::Dark)); + QColor c = palette().color(QPalette::BrightText); + c.setAlpha(int(0.1 * 255)); + painter.fillRect(rect(), c); } diff --git a/plugins/sound/sinkinputwidget.cpp b/plugins/sound/sinkinputwidget.cpp deleted file mode 100644 index b00748d82..000000000 --- a/plugins/sound/sinkinputwidget.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2011 ~ 2018 Deepin Technology Co., Ltd. - * - * Author: sbw - * - * Maintainer: sbw - * - * 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 3 of the License, or - * 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. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "sinkinputwidget.h" -#include "../frame/util/imageutil.h" -#include "../widgets/tipswidget.h" - -#include -#include -#include - -#include -#include -#include -#include - -#define ICON_SIZE 24 -#define APP_TITLE_SIZE 110 - -DGUI_USE_NAMESPACE -using namespace Dock; - -const QPixmap getIconFromTheme(const QString &name, const QSize &size, const qreal ratio) -{ - QPixmap ret = QIcon::fromTheme(name, QIcon::fromTheme("application-x-desktop")).pixmap(size * ratio); - ret.setDevicePixelRatio(ratio); - - return ret; -} - -SinkInputWidget::SinkInputWidget(const QString &inputPath, QWidget *parent) - : QWidget(parent) - , m_inputInter(new DBusSinkInput("com.deepin.daemon.Audio",inputPath, QDBusConnection::sessionBus(), this)) - , m_appBtn(new DIconButton(this)) - , m_volumeIconMin(new QLabel(this)) - , m_volumeIconMax(new QLabel(this)) - , m_volumeSlider(new VolumeSlider(this)) - , m_volumeLabel(new TipsWidget(this)) -{ - const QString iconName = m_inputInter->icon(); - m_appBtn->setAccessibleName("app-" + iconName + "-icon"); - m_appBtn->setIcon(getIconFromTheme(iconName, QSize(ICON_SIZE, ICON_SIZE), devicePixelRatioF())); - m_appBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); - m_appBtn->setFlat(true); - - DLabel *titleLabel = new DLabel; - titleLabel->setForegroundRole(DPalette::TextTitle); - titleLabel->setText(titleLabel->fontMetrics().elidedText(m_inputInter->name(), Qt::TextElideMode::ElideRight, APP_TITLE_SIZE)); - - m_volumeIconMin->setAccessibleName("volume-button"); - m_volumeIconMin->setFixedSize(ICON_SIZE, ICON_SIZE); - m_volumeIconMax->setFixedSize(ICON_SIZE, ICON_SIZE); - - m_volumeSlider->setAccessibleName("app-" + iconName + "-slider"); - m_volumeSlider->setMinimum(0); - m_volumeSlider->setMaximum(1000); - - // 应用图标+名称 - QHBoxLayout *appLayout = new QHBoxLayout(); - appLayout->setAlignment(Qt::AlignLeft); - appLayout->addWidget(m_appBtn); - appLayout->addSpacing(10); - appLayout->addWidget(titleLabel); - appLayout->addStretch(); - appLayout->addWidget(m_volumeLabel, 0, Qt::AlignRight); - appLayout->setSpacing(0); - appLayout->setMargin(0); - - // 音量图标+slider - QHBoxLayout *volumeCtrlLayout = new QHBoxLayout; - volumeCtrlLayout->addSpacing(2); - volumeCtrlLayout->addWidget(m_volumeIconMin); - volumeCtrlLayout->addSpacing(10); - volumeCtrlLayout->addWidget(m_volumeSlider); - volumeCtrlLayout->addSpacing(10); - volumeCtrlLayout->addWidget(m_volumeIconMax); - volumeCtrlLayout->setSpacing(0); - volumeCtrlLayout->setMargin(0); - - QVBoxLayout *centralLayout = new QVBoxLayout; - centralLayout->addLayout(appLayout); - centralLayout->addSpacing(6); - centralLayout->addLayout(volumeCtrlLayout); - centralLayout->setSpacing(2); - centralLayout->setMargin(0); - - connect(m_volumeSlider, &VolumeSlider::valueChanged, this, &SinkInputWidget::setVolume); - connect(m_volumeSlider, &VolumeSlider::valueChanged, this, &SinkInputWidget::onVolumeChanged); - connect(m_inputInter, &DBusSinkInput::MuteChanged, this, &SinkInputWidget::setMuteIcon); - connect(m_inputInter, &DBusSinkInput::VolumeChanged, this, [ = ] { - m_volumeSlider->setValue(m_inputInter->volume() * 1000); - QString str = QString::number(int(m_inputInter->volume() * 100)) + '%'; - m_volumeLabel->setText(str); - refreshIcon(); - }); - connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &SinkInputWidget::refreshIcon); - connect(qApp, &DApplication::iconThemeChanged, this, &SinkInputWidget::refreshIcon); - - setLayout(centralLayout); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setFixedHeight(60); - m_volumeIconMin->installEventFilter(this); - - setMuteIcon(); - refreshIcon(); - onVolumeChanged(); - - emit m_inputInter->VolumeChanged(m_inputInter->volume()); -} - -void SinkInputWidget::setVolume(const int value) -{ - m_inputInter->SetVolumeQueued(double(value) / 1000.0, false); - refreshIcon(); -} - -void SinkInputWidget::setMute() -{ - m_inputInter->SetMuteQueued(!m_inputInter->mute()); -} - -void SinkInputWidget::setMuteIcon() -{ - if (m_inputInter->mute()) { - const auto ratio = devicePixelRatioF(); - QString iconString = "audio-volume-muted-symbolic"; - if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { - iconString.append("-dark"); - } - QPixmap muteIcon = QIcon::fromTheme(iconString).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio); - muteIcon.setDevicePixelRatio(ratio); - QPixmap appIconSource(getIconFromTheme(m_inputInter->icon(), QSize(ICON_SIZE, ICON_SIZE), devicePixelRatioF())); - - QPixmap temp(appIconSource.size()); - temp.fill(Qt::transparent); - temp.setDevicePixelRatio(ratio); - QPainter p1(&temp); - p1.drawPixmap(0, 0, appIconSource); - p1.setCompositionMode(QPainter::CompositionMode_DestinationIn); - p1.fillRect(temp.rect(), QColor(0, 0, 0, 40)); - p1.end(); - appIconSource = temp; - - QPainter p(&appIconSource); - p.drawPixmap(0, 0, muteIcon); - - appIconSource.setDevicePixelRatio(ratio); - m_volumeIconMin->setPixmap(appIconSource); - } else { - m_volumeIconMin->setPixmap(getIconFromTheme(m_inputInter->icon(), QSize(ICON_SIZE, ICON_SIZE), devicePixelRatioF())); - } - - refreshIcon(); -} - -void SinkInputWidget::onPlaySoundEffect() -{ - // set the mute property to false to play sound effects. - m_inputInter->SetMuteQueued(false); -} - -void SinkInputWidget::refreshIcon() -{ - if (!m_inputInter) - return; - - QString iconLeft = QString(m_inputInter->mute() ? "audio-volume-muted-symbolic" : "audio-volume-low-symbolic"); - QString iconRight = QString("audio-volume-high-symbolic"); - - if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { - iconLeft.append("-dark"); - iconRight.append("-dark"); - } - - const auto ratio = devicePixelRatioF(); - QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio); - m_volumeIconMax->setPixmap(ret); - - ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio); - m_volumeIconMin->setPixmap(ret); -} - -bool SinkInputWidget::eventFilter(QObject *watcher, QEvent *event) -{ - if (watcher == m_volumeIconMin) { - if (event->type() == QEvent::MouseButtonPress) { - setMute(); - } - } - return false; -} - -void SinkInputWidget:: onVolumeChanged() -{ - QString str = QString::number(int(m_inputInter->volume() * 100)) + '%'; - m_volumeLabel->setText(str); -} diff --git a/plugins/sound/sinkinputwidget.h b/plugins/sound/sinkinputwidget.h deleted file mode 100644 index 39855f9ee..000000000 --- a/plugins/sound/sinkinputwidget.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2011 ~ 2018 Deepin Technology Co., Ltd. - * - * Author: sbw - * - * Maintainer: sbw - * - * 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 3 of the License, or - * 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. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef SINKINPUTWIDGET_H -#define SINKINPUTWIDGET_H - -#include "componments/volumeslider.h" -#include - -#include -#include - -#include - -DWIDGET_USE_NAMESPACE -using DBusSinkInput = com::deepin::daemon::audio::SinkInput; -namespace Dock { - class TipsWidget; -} -class QLabel; -class SinkInputWidget : public QWidget -{ - Q_OBJECT - -public: - explicit SinkInputWidget(const QString &inputPath, QWidget *parent = nullptr); - -private slots: - void setVolume(const int value); - void setMute(); - void setMuteIcon(); - void onPlaySoundEffect(); - void onVolumeChanged(); - -private: - void refreshIcon(); - -protected: - bool eventFilter(QObject* watcher, QEvent *event) override; - -private: - DBusSinkInput *m_inputInter; - - DIconButton *m_appBtn; - QLabel *m_volumeIconMin; - QLabel *m_volumeIconMax; - VolumeSlider *m_volumeSlider; - Dock::TipsWidget *m_volumeLabel; -}; - -#endif // SINKINPUTWIDGET_H diff --git a/plugins/sound/soundaccessible.h b/plugins/sound/soundaccessible.h index 133ef367b..699ece981 100644 --- a/plugins/sound/soundaccessible.h +++ b/plugins/sound/soundaccessible.h @@ -4,12 +4,10 @@ #include "sounditem.h" #include "soundapplet.h" -#include "sinkinputwidget.h" #include "./componments/volumeslider.h" SET_BUTTON_ACCESSIBLE(SoundItem, "plugin-sounditem") SET_FORM_ACCESSIBLE(SoundApplet, "soundapplet") -SET_FORM_ACCESSIBLE(SinkInputWidget, "sinkinputwidget") SET_SLIDER_ACCESSIBLE(VolumeSlider, "volumeslider") QAccessibleInterface *soundAccessibleFactory(const QString &classname, QObject *object) @@ -18,7 +16,6 @@ QAccessibleInterface *soundAccessibleFactory(const QString &classname, QObject * USE_ACCESSIBLE(classname, SoundItem); USE_ACCESSIBLE(classname, SoundApplet); - USE_ACCESSIBLE(classname, SinkInputWidget); USE_ACCESSIBLE(classname, VolumeSlider); return interface; diff --git a/plugins/sound/soundapplet.cpp b/plugins/sound/soundapplet.cpp index edccf139d..9d3505714 100644 --- a/plugins/sound/soundapplet.cpp +++ b/plugins/sound/soundapplet.cpp @@ -20,7 +20,6 @@ */ #include "soundapplet.h" -#include "sinkinputwidget.h" #include "util/horizontalseperator.h" #include "../widgets/tipswidget.h" #include "../frame/util/imageutil.h" @@ -43,7 +42,8 @@ #define ITEM_HEIGHT 24 #define ITEM_SPACING 5 #define DEVICE_SPACING 10 -#define SLIDER_HIGHT 32 +#define SLIDER_HIGHT 70 +#define TITLE_HEIGHT 46 #define GSETTING_SOUND_OUTPUT_SLIDER "soundOutputSlider" DWIDGET_USE_NAMESPACE @@ -111,13 +111,13 @@ void Port::setCardId(const uint &cardId) SoundApplet::SoundApplet(QWidget *parent) : QScrollArea(parent) , m_centralWidget(new QWidget(this)) - , m_volumeBtn(new DIconButton(this)) + , m_volumeIconMin(new DIconButton(this)) , m_volumeIconMax(new QLabel(this)) , m_volumeSlider(new VolumeSlider(this)) - , m_soundShow(new TipsWidget(this)) + , m_soundShow(new QLabel(this)) + , m_deviceLabel(new QLabel(this)) , m_seperator(new HorizontalSeperator(this)) , m_secondSeperator(new HorizontalSeperator(this)) - , m_deviceLabel(nullptr) , m_audioInter(new DBusAudio("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", QDBusConnection::sessionBus(), this)) , m_defSinkInter(nullptr) , m_listView(new DListView(this)) @@ -130,45 +130,45 @@ SoundApplet::SoundApplet(QWidget *parent) initUi(); } -/** - * @brief SoundApplet::setControlBackground 设置音频界面控件背景颜色 - */ -void SoundApplet::setControlBackground() -{ - QPalette soundAppletBackgroud; - QPalette listViewBackgroud = m_listView->palette(); - if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) - soundAppletBackgroud.setColor(QPalette::Background, QColor(255, 255, 255, 0.03 * 255)); - else - soundAppletBackgroud.setColor(QPalette::Background, QColor(0, 0, 0, 0.03 * 255)); +///** +// * @brief SoundApplet::setControlBackground 设置音频界面控件背景颜色 +// */ +//void SoundApplet::setControlBackground() +//{ +// QPalette soundAppletBackgroud; +// QPalette listViewBackgroud = m_listView->palette(); +// if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) +// soundAppletBackgroud.setColor(QPalette::Background, QColor(255, 255, 255, 0.03 * 255)); +// else +// soundAppletBackgroud.setColor(QPalette::Background, QColor(0, 0, 0, 0.03 * 255)); - this->setAutoFillBackground(true); - this->setPalette(soundAppletBackgroud); - listViewBackgroud.setColor(QPalette::Base, Qt::transparent); - m_listView->setAutoFillBackground(true); - m_listView->setPalette(listViewBackgroud); -} +// this->setAutoFillBackground(true); +// this->setPalette(soundAppletBackgroud); +// listViewBackgroud.setColor(QPalette::Base, Qt::transparent); +// m_listView->setAutoFillBackground(true); +// m_listView->setPalette(listViewBackgroud); +//} -/** - * @brief SoundApplet::setItemHoverColor 通过代理方式根据当前主题设置音频列表文字颜色和item选中颜色 - */ -void SoundApplet::setItemHoverColor() -{ - QPalette hoverBackgroud = m_listView->palette(); - if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { - hoverBackgroud.setColor(QPalette::Normal, QPalette::Highlight, QColor(0, 0, 0, 30)); - hoverBackgroud.setColor(QPalette::Normal, QPalette::HighlightedText, QColor(0, 0, 0, 255)); - } else { - hoverBackgroud.setColor(QPalette::Normal, QPalette::Highlight, QColor(255, 255, 255, 30)); - hoverBackgroud.setColor(QPalette::Normal, QPalette::HighlightedText, QColor(255, 255, 255, 255)); - } - m_listView->setPalette(hoverBackgroud); - m_listView->setItemDelegate(m_itemDelegate); -} +///** +// * @brief SoundApplet::setItemHoverColor 通过代理方式根据当前主题设置音频列表文字颜色和item选中颜色 +// */ +//void SoundApplet::setItemHoverColor() +//{ +// QPalette hoverBackgroud = m_listView->palette(); +// if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { +// hoverBackgroud.setColor(QPalette::Normal, QPalette::Highlight, QColor(0, 0, 0, 30)); +// hoverBackgroud.setColor(QPalette::Normal, QPalette::HighlightedText, QColor(0, 0, 0, 255)); +// } else { +// hoverBackgroud.setColor(QPalette::Normal, QPalette::Highlight, QColor(255, 255, 255, 30)); +// hoverBackgroud.setColor(QPalette::Normal, QPalette::HighlightedText, QColor(255, 255, 255, 255)); +// } +// m_listView->setPalette(hoverBackgroud); +// m_listView->setItemDelegate(m_itemDelegate); +//} void SoundApplet::initUi() { - setControlBackground(); + // setControlBackground(); m_listView->setEditTriggers(DListView::NoEditTriggers); m_listView->setSelectionMode(QAbstractItemView::NoSelection); m_listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -176,77 +176,62 @@ void SoundApplet::initUi() m_listView->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); m_listView->setFixedHeight(0); m_listView->setItemSpacing(1); + m_listView->setModel(m_model); m_centralWidget->setAccessibleName("volumn-centralwidget"); - m_volumeBtn->setAccessibleName("volume-button"); + m_volumeIconMin->setAccessibleName("volume-button"); m_volumeIconMax->setAccessibleName("volume-iconmax"); m_volumeSlider->setAccessibleName("volume-slider"); m_soundShow->setAccessibleName("volume-soundtips"); - this->horizontalScrollBar()->setAccessibleName("volume-horizontalscrollbar"); - this->verticalScrollBar()->setAccessibleName("volume-verticalscrollbar"); + horizontalScrollBar()->setAccessibleName("volume-horizontalscrollbar"); + verticalScrollBar()->setAccessibleName("volume-verticalscrollbar"); + m_volumeIconMin->setFixedSize(ICON_SIZE, ICON_SIZE); + m_volumeIconMin->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); + m_volumeIconMin->setFlat(true); m_volumeIconMax->setFixedSize(ICON_SIZE, ICON_SIZE); m_soundShow->setText(QString("%1%").arg(0)); + m_soundShow->setFixedHeight(TITLE_HEIGHT); + m_soundShow->setForegroundRole(QPalette::BrightText); + DFontSizeManager::instance()->bind(m_soundShow, DFontSizeManager::T4, QFont::Medium); - m_deviceLabel = new TipsWidget(this); m_deviceLabel->setText(tr("Device")); + m_deviceLabel->setFixedHeight(TITLE_HEIGHT); + m_deviceLabel->setForegroundRole(QPalette::BrightText); DFontSizeManager::instance()->bind(m_deviceLabel, DFontSizeManager::T4, QFont::Medium); - QHBoxLayout *deviceLayout = new QHBoxLayout; - deviceLayout->addSpacing(2); - deviceLayout->addWidget(m_deviceLabel, 0, Qt::AlignLeft); - deviceLayout->addWidget(m_soundShow, 0, Qt::AlignRight); - deviceLayout->setSpacing(0); - deviceLayout->setMargin(0); - - QVBoxLayout *deviceLineLayout = new QVBoxLayout; - deviceLineLayout->addLayout(deviceLayout); - deviceLineLayout->addWidget(m_seperator); - deviceLineLayout->setMargin(0); - deviceLineLayout->setSpacing(DEVICE_SPACING); - - QHBoxLayout *volumeCtrlLayout = new QHBoxLayout; - volumeCtrlLayout->addSpacing(8); - volumeCtrlLayout->addWidget(m_volumeBtn); - volumeCtrlLayout->addSpacing(10); - volumeCtrlLayout->addWidget(m_volumeSlider); - volumeCtrlLayout->addSpacing(10); - volumeCtrlLayout->addWidget(m_volumeIconMax); - volumeCtrlLayout->addSpacing(8); - volumeCtrlLayout->setSpacing(0); - volumeCtrlLayout->setMargin(0); - - //音频界面添加第二个分割线 - QVBoxLayout *volumeLineLayout = new QVBoxLayout; - volumeLineLayout->addLayout(volumeCtrlLayout); - volumeLineLayout->addWidget(m_secondSeperator); - volumeLineLayout->setMargin(0); - - m_volumeBtn->setFixedSize(ICON_SIZE, ICON_SIZE); - m_volumeBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE)); - m_volumeBtn->setFlat(true); - m_volumeSlider->setFixedHeight(SLIDER_HIGHT); m_volumeSlider->setMinimum(0); m_volumeSlider->setMaximum(m_audioInter->maxUIVolume() * 100.0f); - updateVolumeSliderStatus(Utils::SettingValue("com.deepin.dde.dock.module.sound", QByteArray(), "Enabled").toString()); - connect(m_gsettings, &QGSettings::changed, [ = ] (const QString &key) { - if (key == GSETTING_SOUND_OUTPUT_SLIDER) { - updateVolumeSliderStatus(m_gsettings->get(GSETTING_SOUND_OUTPUT_SLIDER).toString()); - } - }); + + // 标题部分 + QHBoxLayout *deviceLayout = new QHBoxLayout; + deviceLayout->setSpacing(0); + deviceLayout->setContentsMargins(20, 0, 10, 0); + deviceLayout->addWidget(m_deviceLabel, 0, Qt::AlignLeft); + deviceLayout->addWidget(m_soundShow, 0, Qt::AlignRight); + + // 音量滑动条 + QHBoxLayout *volumeCtrlLayout = new QHBoxLayout; + volumeCtrlLayout->setSpacing(0); + volumeCtrlLayout->setContentsMargins(12, 0, 12, 0); + volumeCtrlLayout->addWidget(m_volumeIconMin); + volumeCtrlLayout->addWidget(m_volumeSlider); + volumeCtrlLayout->addWidget(m_volumeIconMax); m_centralLayout = new QVBoxLayout(this); m_centralLayout->setMargin(0); m_centralLayout->setSpacing(0); - m_centralLayout->addLayout(deviceLineLayout); - m_centralLayout->addLayout(volumeLineLayout); - m_centralLayout->setContentsMargins(8, 8, 8, 0); + m_centralLayout->addLayout(deviceLayout); + m_centralLayout->addWidget(m_seperator); + m_centralLayout->addLayout(volumeCtrlLayout); + // 需要判断是否有声音端口 + m_centralLayout->addWidget(m_secondSeperator); + m_secondSeperator->setVisible(m_model->rowCount() > 0); - m_listView->setModel(m_model); - setItemHoverColor(); - m_centralLayout->setMargin(0); + // setItemHoverColor(); + m_centralLayout->setContentsMargins(0, 0, 0, 10); m_centralLayout->setSpacing(0); m_centralLayout->addWidget(m_listView); m_centralWidget->setLayout(m_centralLayout); @@ -261,10 +246,17 @@ void SoundApplet::initUi() m_centralWidget->setAutoFillBackground(false); viewport()->setAutoFillBackground(false); + updateVolumeSliderStatus(Utils::SettingValue("com.deepin.dde.dock.module.sound", QByteArray(), "Enabled").toString()); + connect(m_gsettings, &QGSettings::changed, [ = ] (const QString &key) { + if (key == GSETTING_SOUND_OUTPUT_SLIDER) { + updateVolumeSliderStatus(m_gsettings->get(GSETTING_SOUND_OUTPUT_SLIDER).toString()); + } + }); + connect(m_volumeIconMin, &DIconButton::clicked, this, [ = ] { + m_defSinkInter->SetMuteQueued(!m_defSinkInter->mute()); + }); connect(qApp, &QGuiApplication::fontChanged, this, &SoundApplet::updateListHeight); - connect(m_volumeBtn, &DIconButton::clicked, this, &SoundApplet::toggleMute); connect(m_volumeSlider, &VolumeSlider::valueChanged, this, &SoundApplet::volumeSliderValueChanged); - connect(m_volumeSlider, &VolumeSlider::requestPlaySoundEffect, this, &SoundApplet::onPlaySoundEffect); connect(m_audioInter, &DBusAudio::DefaultSinkChanged, this, static_cast(&SoundApplet::defaultSinkChanged)); connect(m_audioInter, &DBusAudio::IncreaseVolumeChanged, this, &SoundApplet::increaseVolumeChanged); connect(m_audioInter, &DBusAudio::PortEnabledChanged, [this](uint cardId, QString portId) { @@ -352,25 +344,6 @@ void SoundApplet::volumeSliderValueChanged() m_defSinkInter->SetMuteQueued(false); } -void SoundApplet::sinkInputsChanged() -{ - m_centralWidget->setVisible(false); - QVBoxLayout *appLayout = m_centralLayout; - while (QLayoutItem *item = appLayout->takeAt(4)) { - delete item->widget(); - delete item; - } - - for (auto input : m_audioInter->sinkInputs()) { - appLayout->addWidget(new HorizontalSeperator(this)); - - SinkInputWidget *si = new SinkInputWidget(input.path()); - appLayout->addWidget(si); - } - - m_centralWidget->setVisible(true); -} - void SoundApplet::cardsChanged(const QString &cards) { QMap tmpCardIds; @@ -434,15 +407,6 @@ void SoundApplet::cardsChanged(const QString &cards) removeLastDevice(); updateListHeight(); } -void SoundApplet::toggleMute() -{ - m_defSinkInter->SetMuteQueued(!m_defSinkInter->mute()); -} - -void SoundApplet::onPlaySoundEffect() -{ - -} void SoundApplet::increaseVolumeChanged() { @@ -478,20 +442,20 @@ void SoundApplet::refreshIcon() color = Qt::white; break; } - setControlBackground(); + // setControlBackground(); //主题改变时,同步修改item颜色 for (int i = 0; i < m_model->rowCount(); i++) { auto item = m_model->item(i); item->setForeground(color); item->setBackground(Qt::transparent); } - setItemHoverColor(); + // setItemHoverColor(); const auto ratio = devicePixelRatioF(); QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio); m_volumeIconMax->setPixmap(ret); ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio); - m_volumeBtn->setIcon(ret); + m_volumeIconMin->setIcon(ret); } /** @@ -563,6 +527,8 @@ void SoundApplet::addPort(const Port *port) } m_model->appendRow(pi); m_model->sort(0); + m_secondSeperator->setVisible(m_model->rowCount() > 0); + updateListHeight(); } void SoundApplet::removePort(const QString &portId, const uint &cardId) @@ -581,6 +547,8 @@ void SoundApplet::removePort(const QString &portId, const uint &cardId) }; rmFunc(m_model); + m_secondSeperator->setVisible(m_model->rowCount() > 0); + updateListHeight(); } /** @@ -619,7 +587,7 @@ void SoundApplet::enableDevice(bool flag) } else if ("Enabled" == status) { m_volumeSlider->setEnabled(flag); } - m_volumeBtn->setEnabled(flag); + m_volumeIconMin->setEnabled(flag); m_soundShow->setEnabled(flag); m_volumeIconMax->setEnabled(flag); m_deviceLabel->setEnabled(flag); @@ -674,12 +642,12 @@ void SoundApplet::updateVolumeSliderStatus(const QString &status) flag = false; } m_volumeSlider->setEnabled(flag); - m_volumeBtn->setEnabled(flag); + m_volumeIconMin->setEnabled(flag); m_volumeIconMax->setEnabled(flag); flag = "Hiden" != status; m_volumeSlider->setVisible(flag); - m_volumeBtn->setVisible(flag); + m_volumeIconMin->setVisible(flag); m_volumeIconMax->setVisible(flag); } @@ -694,6 +662,7 @@ void SoundApplet::updateListHeight() { //设备数多于10个时显示滚动条,固定高度 int count = m_model->rowCount(); + if (m_model->rowCount() > 10) { count = 10; m_listView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); diff --git a/plugins/sound/soundapplet.h b/plugins/sound/soundapplet.h index e9c57210e..64b7518b7 100644 --- a/plugins/sound/soundapplet.h +++ b/plugins/sound/soundapplet.h @@ -110,8 +110,8 @@ public: Port *findPort(const QString &portId, const uint &cardId) const; void setUnchecked(DStandardItem *pi); void initUi(); - void setItemHoverColor(); - void setControlBackground(); +// void setItemHoverColor(); +// void setControlBackground(); signals: void volumeChanged(const int value) const; @@ -121,9 +121,6 @@ private slots: void defaultSinkChanged(); void onVolumeChanged(double volume); void volumeSliderValueChanged(); - void sinkInputsChanged(); - void toggleMute(); - void onPlaySoundEffect(); void increaseVolumeChanged(); void cardsChanged(const QString &cards); void removePort(const QString &portId, const uint &cardId); @@ -144,14 +141,14 @@ private: private: QWidget *m_centralWidget; - DIconButton *m_volumeBtn; + DIconButton *m_volumeIconMin; QLabel *m_volumeIconMax; VolumeSlider *m_volumeSlider; - Dock::TipsWidget *m_soundShow; + QLabel *m_soundShow; + QLabel *m_deviceLabel; QVBoxLayout *m_centralLayout; HorizontalSeperator *m_seperator; HorizontalSeperator *m_secondSeperator; - Dock::TipsWidget *m_deviceLabel; DBusAudio *m_audioInter; DBusSink *m_defSinkInter;