diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index 0016b5df7..0d201dbee 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -136,6 +136,20 @@ void QuickPluginWindow::setPositon(Position position) } else { m_mainLayout->setDirection(QBoxLayout::BottomToTop); } + switch(m_position) { + case Dock::Position::Top: + getPopWindow()->setArrowDirection(DArrowRectangle::ArrowDirection::ArrowTop); + break; + case Dock::Position::Right: + getPopWindow()->setArrowDirection(DArrowRectangle::ArrowDirection::ArrowRight); + break; + case Dock::Position::Bottom: + getPopWindow()->setArrowDirection(DArrowRectangle::ArrowDirection::ArrowBottom); + break; + case Dock::Position::Left: + getPopWindow()->setArrowDirection(DArrowRectangle::ArrowDirection::ArrowLeft); + break; + } } void QuickPluginWindow::dragPlugin(PluginsItemInterface *item) diff --git a/plugins/display/brightnesswidget.cpp b/plugins/display/brightnesswidget.cpp index a25d66558..7dfc9f056 100644 --- a/plugins/display/brightnesswidget.cpp +++ b/plugins/display/brightnesswidget.cpp @@ -23,12 +23,16 @@ #include "imageutil.h" #include "slidercontainer.h" +#include + #include #include #define BACKSIZE 36 #define IMAGESIZE 18 +DGUI_USE_NAMESPACE + BrightnessWidget::BrightnessWidget(BrightnessModel *model, QWidget *parent) : QWidget(parent) , m_sliderContainer(new SliderContainer(this)) @@ -55,11 +59,7 @@ void BrightnessWidget::initUi() QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->setContentsMargins(15, 0, 12, 0); - QPixmap leftPixmap = ImageUtil::loadSvg(":/brightness.svg", QSize(IMAGESIZE, IMAGESIZE)); - QPixmap rightPixmap = ImageUtil::loadSvg(":/ICON_Device_Laptop.svg", QSize(IMAGESIZE, IMAGESIZE)); - m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); - m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); - + onThemeTypeChanged(); // 需求要求调节范围是10%-100%,且调节幅度为1% m_sliderContainer->setRange(10, 100); m_sliderContainer->setPageStep(1); @@ -83,6 +83,7 @@ void BrightnessWidget::initConnection() Q_EMIT brightClicked(); }); + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &BrightnessWidget::onThemeTypeChanged); updateSliderValue(); } @@ -93,3 +94,26 @@ void BrightnessWidget::updateSliderValue() m_sliderContainer->updateSliderValue(monitor->brightness()); } } + +void BrightnessWidget::convertThemePixmap(QPixmap &pixmap) +{ + // 图片是黑色的,如果当前主题为白色主题,则无需转换 + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType) + return; + + // 如果是黑色主题,则转换成白色图像 + QPainter painter(&pixmap); + painter.setCompositionMode(QPainter::CompositionMode_SourceIn); + painter.fillRect(pixmap.rect(), Qt::white); + painter.end(); +} + +void BrightnessWidget::onThemeTypeChanged() +{ + QPixmap leftPixmap = ImageUtil::loadSvg(":/brightness.svg", QSize(IMAGESIZE, IMAGESIZE)); + QPixmap rightPixmap = ImageUtil::loadSvg(":/ICON_Device_Laptop.svg", QSize(IMAGESIZE, IMAGESIZE)); + convertThemePixmap(leftPixmap); + convertThemePixmap(rightPixmap); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); + m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); +} diff --git a/plugins/display/brightnesswidget.h b/plugins/display/brightnesswidget.h index 881d0b892..26011fde4 100644 --- a/plugins/display/brightnesswidget.h +++ b/plugins/display/brightnesswidget.h @@ -47,6 +47,10 @@ private: void initUi(); void initConnection(); void updateSliderValue(); + void convertThemePixmap(QPixmap &pixmap); + +private Q_SLOTS: + void onThemeTypeChanged(); private: SliderContainer *m_sliderContainer; diff --git a/plugins/media/mediawidget.cpp b/plugins/media/mediawidget.cpp index b392f3a2a..ba6169ed1 100644 --- a/plugins/media/mediawidget.cpp +++ b/plugins/media/mediawidget.cpp @@ -21,6 +21,7 @@ #include "mediawidget.h" #include +#include #include #include @@ -31,6 +32,7 @@ #include DWIDGET_USE_NAMESPACE +DGUI_USE_NAMESPACE #define PAUSEHEIGHT 21 #define PLAYHEIGHT 18 @@ -175,11 +177,12 @@ void MusicButton::paintEvent(QPaintEvent *event) int height = this->height(); int startX = 2; int startY = (height - ctrlHeight) / 2; + QColor color = DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType ? Qt::black : Qt::white; QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); - painter.setPen(Qt::black); - painter.setBrush(Qt::black); + painter.setPen(color); + painter.setBrush(color); if (m_buttonType == ButtonType::Pause) { painter.drawRect(QRect(startX, startY, ICOMMARGIN, ctrlHeight)); painter.drawRect(QRect(width - ICOMMARGIN - ICONSPACE, startY, ICOMMARGIN, ctrlHeight)); diff --git a/plugins/pluginmanager/linequickitem.cpp b/plugins/pluginmanager/linequickitem.cpp index 1966c6e84..c24377d36 100644 --- a/plugins/pluginmanager/linequickitem.cpp +++ b/plugins/pluginmanager/linequickitem.cpp @@ -34,6 +34,7 @@ LineQuickItem::LineQuickItem(PluginsItemInterface *const pluginInter, const QStr , m_effectWidget(new DBlurEffectWidget(this)) { initUi(); + initConnection(); QMetaObject::invokeMethod(this, &LineQuickItem::resizeSelf, Qt::QueuedConnection); } @@ -70,11 +71,9 @@ bool LineQuickItem::eventFilter(QObject *obj, QEvent *event) void LineQuickItem::initUi() { - QColor maskColor(Qt::white); - maskColor.setAlphaF(0.8); - m_effectWidget->setMaskColor(maskColor); m_effectWidget->setBlurRectXRadius(8); m_effectWidget->setBlurRectYRadius(8); + onThemeTypeChanged(DGuiApplicationHelper::instance()->themeType()); // 如果图标不为空 if (!m_centerWidget) @@ -95,6 +94,11 @@ void LineQuickItem::initUi() m_centerWidget->installEventFilter(this); } +void LineQuickItem::initConnection() +{ + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &LineQuickItem::onThemeTypeChanged); +} + void LineQuickItem::resizeSelf() { if (!m_centerWidget) @@ -103,3 +107,10 @@ void LineQuickItem::resizeSelf() m_effectWidget->setFixedHeight(m_centerWidget->height()); setFixedHeight(m_centerWidget->height()); } + +void LineQuickItem::onThemeTypeChanged(DGuiApplicationHelper::ColorType themeType) +{ + QColor maskColor = themeType == DGuiApplicationHelper::ColorType::LightType ? Qt::white : Qt::black; + maskColor.setAlphaF(themeType == DGuiApplicationHelper::ColorType::LightType ? 0.8 : 0.5); + m_effectWidget->setMaskColor(maskColor); +} diff --git a/plugins/pluginmanager/linequickitem.h b/plugins/pluginmanager/linequickitem.h index e284f37cd..10907a3c6 100644 --- a/plugins/pluginmanager/linequickitem.h +++ b/plugins/pluginmanager/linequickitem.h @@ -23,12 +23,16 @@ #include "quicksettingitem.h" +#include + namespace Dtk { namespace Widget { class DBlurEffectWidget; } } +DGUI_USE_NAMESPACE + // 插件在快捷面板中的展示的样式,这个为整行显示的插件,例如声音,亮度调整和音乐播放等 class LineQuickItem : public QuickSettingItem { @@ -47,8 +51,12 @@ protected: private: void initUi(); + void initConnection(); void resizeSelf(); +private Q_SLOTS: + void onThemeTypeChanged(DGuiApplicationHelper::ColorType themeType); + private: QWidget *m_centerWidget; QWidget *m_centerParentWidget; diff --git a/plugins/sound/resources/broadcast.svg b/plugins/sound/resources/broadcast.svg new file mode 100644 index 000000000..f45b1ae57 --- /dev/null +++ b/plugins/sound/resources/broadcast.svg @@ -0,0 +1,15 @@ + + + ICON / MenuItem / Broadcast + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/sound/soundwidget.cpp b/plugins/sound/soundwidget.cpp index 7918fae9b..58359d8ea 100644 --- a/plugins/sound/soundwidget.cpp +++ b/plugins/sound/soundwidget.cpp @@ -37,6 +37,7 @@ #include #include #include +#include DGUI_USE_NAMESPACE @@ -66,10 +67,7 @@ void SoundWidget::initUi() mainLayout->setContentsMargins(17, 0, 12, 0); mainLayout->addWidget(m_sliderContainer); - QPixmap leftPixmap = ImageUtil::loadSvg(leftIcon(), QSize(ICON_SIZE, ICON_SIZE)); - QPixmap rightPixmap = ImageUtil::loadSvg(rightIcon(), QSize(ICON_SIZE, ICON_SIZE)); - m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); - m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); + onThemeTypeChanged(); m_sliderContainer->setRange(0, std::round(m_dbusAudio->maxUIVolume() * 100.00)); m_sliderContainer->setPageStep(2); @@ -107,6 +105,8 @@ void SoundWidget::initConnection() m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, QIcon(leftIcon())); }); + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &SoundWidget::onThemeTypeChanged); + connect(m_sliderContainer, &SliderContainer::iconClicked, this, [ this ](const SliderContainer::IconPosition icon) { switch (icon) { case SliderContainer::IconPosition::LeftIcon: { @@ -126,10 +126,17 @@ void SoundWidget::initConnection() const QString SoundWidget::leftIcon() { const bool mute = existActiveOutputDevice() ? m_defaultSink->mute() : true; - if (mute) - return QString(":/icons/resources/audio-volume-muted-dark.svg"); + if (mute) { + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType) + return QString(":/audio-volume-muted-symbolic-dark.svg"); - return QString(":/icons/resources/volume.svg"); + return QString(":/audio-volume-muted-symbolic.svg"); + } + + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType) + return QString(":/audio-volume-medium-symbolic-dark.svg"); + + return QString(":/audio-volume-medium-symbolic.svg"); } const QString SoundWidget::rightIcon() @@ -137,6 +144,19 @@ const QString SoundWidget::rightIcon() return QString(":/icons/resources/broadcast.svg"); } +void SoundWidget::convertThemePixmap(QPixmap &pixmap) +{ + // 图片是黑色的,如果当前主题为白色主题,则无需转换 + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType) + return; + + // 如果是黑色主题,则转换成白色图像 + QPainter painter(&pixmap); + painter.setCompositionMode(QPainter::CompositionMode_SourceIn); + painter.fillRect(pixmap.rect(), Qt::white); + painter.end(); +} + /** 判断是否存在未禁用的声音输出设备 * @brief SoundApplet::existActiveOutputDevice * @return 存在返回true,否则返回false @@ -160,3 +180,12 @@ bool SoundWidget::existActiveOutputDevice() const return false; } + +void SoundWidget::onThemeTypeChanged() +{ + QPixmap leftPixmap = ImageUtil::loadSvg(leftIcon(), QSize(ICON_SIZE, ICON_SIZE)); + QPixmap rightPixmap = ImageUtil::loadSvg(rightIcon(), QSize(ICON_SIZE, ICON_SIZE)); + convertThemePixmap(rightPixmap); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); + m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); +} diff --git a/plugins/sound/soundwidget.h b/plugins/sound/soundwidget.h index d7c91eb10..e2da5693b 100644 --- a/plugins/sound/soundwidget.h +++ b/plugins/sound/soundwidget.h @@ -55,8 +55,12 @@ protected: private: const QString leftIcon(); const QString rightIcon(); + void convertThemePixmap(QPixmap &pixmap); bool existActiveOutputDevice() const; +private Q_SLOTS: + void onThemeTypeChanged(); + private: DBusAudio *m_dbusAudio; SliderContainer *m_sliderContainer;