feat(dock icon):default icon zoom

This commit is contained in:
shaojun 2019-11-05 21:04:07 +08:00
parent fee1dc4919
commit f95fe5bb8b
18 changed files with 56 additions and 34 deletions

View File

@ -13,6 +13,7 @@ find_package(Qt5Widgets REQUIRED)
find_package(Qt5Concurrent REQUIRED)
find_package(Qt5X11Extras REQUIRED)
find_package(Qt5DBus REQUIRED)
find_package(Qt5Svg REQUIRED)
find_package(DtkWidget REQUIRED)
find_package(DtkCMake REQUIRED)
@ -30,6 +31,7 @@ target_include_directories(${BIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS}
${PROJECT_BINARY_DIR}
${QGSettings_INCLUDE_DIRS}
${DtkGUI_INCLUDE_DIRS}
${Qt5Svg_INCLUDE_DIRS}
../interfaces)
target_link_libraries(${BIN_NAME} PRIVATE
${XCB_EWMH_LIBRARIES}
@ -41,6 +43,7 @@ target_link_libraries(${BIN_NAME} PRIVATE
${Qt5DBus_LIBRARIES}
${QGSettings_LIBRARIES}
${DtkGUI_LIBRARIES}
${Qt5Svg_LIBRARIES}
)
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64")

View File

@ -21,18 +21,28 @@
#include "imageutil.h"
#include <QIcon>
#include <QPainter>
const QPixmap ImageUtil::loadSvg(const QString &path, const int size)
const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio)
{
QPixmap pixmap(size, size);
QSvgRenderer renderer(path);
QIcon icon = QIcon::fromTheme(iconName);
if (!icon.isNull()) {
QPixmap pixmap = icon.pixmap(int(size * ratio), int(size * ratio));
pixmap.setDevicePixelRatio(ratio);
return pixmap;
}
QPixmap pixmap(int(size * ratio), int(size * ratio));
QString localIcon = QString("%1%2%3").arg(localPath).arg(iconName).arg(iconName.contains(".svg") ? "" : ".svg");
QSvgRenderer renderer(localIcon);
pixmap.fill(Qt::transparent);
QPainter painter;
painter.begin(&pixmap);
renderer.render(&painter);
painter.end();
pixmap.setDevicePixelRatio(ratio);
return pixmap;
}

View File

@ -28,7 +28,7 @@
class ImageUtil
{
public:
static const QPixmap loadSvg(const QString &path, const int size);
static const QPixmap loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio);
};
#endif // IMAGEUTIL_H

View File

@ -4,7 +4,7 @@ set(PLUGIN_NAME "network")
project(${PLUGIN_NAME})
# Sources files
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/utils.h")
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/imageutil.h" "../../frame/util/imageutil.cpp")
find_package(PkgConfig REQUIRED)
find_package(Qt5Widgets REQUIRED)

View File

@ -22,7 +22,7 @@
#include "accesspointwidget.h"
#include "horizontalseperator.h"
#include "util/utils.h"
#include "../frame/util/imageutil.h"
#include <QHBoxLayout>
#include <QDebug>
#include <dimagebutton.h>
@ -156,7 +156,7 @@ void AccessPointWidget::setStrengthIcon(const int strength)
}
const auto ratio = devicePixelRatioF();
iconPix = QIcon::fromTheme(iconString, QIcon(QString(":/wireless/resources/wireless/%1").arg(iconString))).pixmap(s * ratio);
iconPix = ImageUtil::loadSvg(iconString, ":/wireless/resources/wireless/", s.width(), ratio);
m_strengthLabel->setPixmap(iconPix);

View File

@ -23,7 +23,7 @@
#include "constants.h"
#include "wireditem.h"
#include "networkplugin.h"
#include "../util/imageutil.h"
#include "../frame/util/imageutil.h"
#include "../widgets/tipswidget.h"
#include <DGuiApplicationHelper>
@ -149,9 +149,7 @@ void WiredItem::reloadIcon()
const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200;
const int num = (index % 5) + 1;
m_icon = QIcon::fromTheme(QString("network-wired-symbolic-connecting%1.svg").arg(num), QIcon::fromTheme(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num)))
.pixmap(iconSize * ratio, iconSize * ratio);
m_icon.setDevicePixelRatio(ratio);
m_icon = ImageUtil::loadSvg(QString("network-wired-symbolic-connecting%1.svg").arg(num), ":/wired/resources/wired/", iconSize, ratio);
update();
return;
}
@ -186,8 +184,8 @@ void WiredItem::reloadIcon()
// 最小尺寸时采用深色图标
if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType)
iconName.append(PLUGIN_MIN_ICON_NAME);
m_icon = QIcon::fromTheme(iconName, QIcon::fromTheme(QString(":/wired/resources/wired/%1").arg(iconName))).pixmap(iconSize * ratio, iconSize * ratio);
m_icon.setDevicePixelRatio(ratio);
m_icon = ImageUtil::loadSvg(iconName, ":/wired/resources/wired/", iconSize, ratio);
update();
}

View File

@ -21,7 +21,7 @@
#include "wirelessitem.h"
#include "networkplugin.h"
#include "../util/imageutil.h"
#include "../frame/util/imageutil.h"
#include "../widgets/tipswidget.h"
#include <DGuiApplicationHelper>
@ -225,7 +225,7 @@ const QPixmap WirelessItem::backgroundPix(const int size)
const QPixmap WirelessItem::cachedPix(const QString &key, const int size)
{
if (m_reloadIcon || !m_icons.contains(key)) {
m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/wireless/resources/wireless/" + key + ".svg")).pixmap(size));
m_icons.insert(key, ImageUtil::loadSvg(key, ":/wireless/resources/wireless/", size, 1));
}
return m_icons.value(key);

View File

@ -4,7 +4,7 @@ set(PLUGIN_NAME "sound")
project(${PLUGIN_NAME})
# Sources files
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/utils.h")
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/imageutil.h" "../../frame/util/imageutil.cpp")
find_package(PkgConfig REQUIRED)
find_package(Qt5Widgets REQUIRED)

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M17.5,0.455002377 C17.7761424,0.455002377 18,0.678860002 18,0.955002377 L18,15.0900024 C18,15.3661448 17.7761424,15.5900024 17.5,15.5900024 C17.2238576,15.5900024 17,15.3661448 17,15.0900024 L17,0.955002377 C17,0.678860002 17.2238576,0.455002377 17.5,0.455002377 Z M9,2.50100238 L9,13.5010024 C9,13.9464548 8.46142904,14.1695382 8.14644661,13.8545558 L6.17157288,11.879682 C5.60896374,11.3170729 4.845902,11.0010024 4.05025253,11.0010024 L2,11.0010024 C0.8954305,11.0010024 9.96112538e-14,10.1055719 0,9.00100238 L0,7.00100238 C-3.09994708e-14,5.89643288 0.8954305,5.00100238 2,5.00100238 L4.05025253,5.00100238 C4.845902,5.00100238 5.60896374,4.68493186 6.17157288,4.12232272 L8.14644661,2.14744899 C8.46142904,1.83246656 9,2.05554995 9,2.50100238 Z M14.5,2.29800238 C14.7761424,2.29800238 15,2.52186 15,2.79800238 L15,13.2470024 C15,13.5231448 14.7761424,13.7470024 14.5,13.7470024 C14.2238576,13.7470024 14,13.5231448 14,13.2470024 L14,2.79800238 C14,2.52186 14.2238576,2.29800238 14.5,2.29800238 Z M11.514,4.11900238 C11.7901424,4.11900238 12.014,4.34286 12.014,4.61900238 L12.014,11.3830024 C12.014,11.6591448 11.7901424,11.8830024 11.514,11.8830024 C11.2378576,11.8830024 11.014,11.6591448 11.014,11.3830024 L11.014,4.61900238 C11.014,4.34286 11.2378576,4.11900238 11.514,4.11900238 Z" transform="translate(1 2)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M10,4.50100238 L10,15.5010024 C10,15.9464548 9.46142904,16.1695382 9.14644661,15.8545558 L7.17157288,13.879682 C6.60896374,13.3170729 5.845902,13.0010024 5.05025253,13.0010024 L3,13.0010024 C1.8954305,13.0010024 1,12.1055719 1,11.0010024 L1,9.00100238 C1,7.89643288 1.8954305,7.00100238 3,7.00100238 L5.05025253,7.00100238 C5.845902,7.00100238 6.60896374,6.68493186 7.17157288,6.12232272 L9.14644661,4.14744899 C9.46142904,3.83246656 10,4.05554995 10,4.50100238 Z M12.514,6.11900238 C12.7901424,6.11900238 13.014,6.34286 13.014,6.61900238 L13.014,13.3830024 C13.014,13.6591448 12.7901424,13.8830024 12.514,13.8830024 C12.2378576,13.8830024 12.014,13.6591448 12.014,13.3830024 L12.014,6.61900238 C12.014,6.34286 12.2378576,6.11900238 12.514,6.11900238 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 878 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M9,0.501002377 L9,11.5010024 C9,11.9464548 8.46142904,12.1695382 8.14644661,11.8545558 L6.17157288,9.87968203 C5.60896374,9.3170729 4.845902,9.00100238 4.05025253,9.00100238 L2,9.00100238 C0.8954305,9.00100238 9.96112538e-14,8.10557188 0,7.00100238 L0,5.00100238 C-3.09994708e-14,3.89643288 0.8954305,3.00100238 2,3.00100238 L4.05025253,3.00100238 C4.845902,3.00100238 5.60896374,2.68493186 6.17157288,2.12232272 L8.14644661,0.147448987 C8.46142904,-0.167533444 9,0.055549952 9,0.501002377 Z M14.5,0.298002377 C14.7761424,0.298002377 15,0.521860002 15,0.798002377 L15,11.2470024 C15,11.5231448 14.7761424,11.7470024 14.5,11.7470024 C14.2238576,11.7470024 14,11.5231448 14,11.2470024 L14,0.798002377 C14,0.521860002 14.2238576,0.298002377 14.5,0.298002377 Z M11.514,2.11900238 C11.7901424,2.11900238 12.014,2.34286 12.014,2.61900238 L12.014,9.38300238 C12.014,9.65914475 11.7901424,9.88300238 11.514,9.88300238 C11.2378576,9.88300238 11.014,9.65914475 11.014,9.38300238 L11.014,2.61900238 C11.014,2.34286 11.2378576,2.11900238 11.514,2.11900238 Z" transform="translate(1 4)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M9,1.046 L9,12.046 C9,12.4914524 8.46142904,12.7145358 8.14644661,12.3995534 L6.17157288,10.4246797 C5.60896374,9.86207052 4.845902,9.546 4.05025253,9.546 L2,9.546 C0.8954305,9.546 9.96112538e-14,8.6505695 0,7.546 L0,5.546 C-3.09994708e-14,4.4414305 0.8954305,3.546 2,3.546 L4.05025253,3.546 C4.845902,3.546 5.60896374,3.22992948 6.17157288,2.66732034 L8.14644661,0.692446609 C8.46142904,0.377464179 9,0.600547575 9,1.046 Z M14.8412133,5.16189438 C15.0442449,5.36492592 15.060441,5.67790899 14.8773883,5.86096165 L13.738,6.99999762 L14.8773883,8.13903835 C15.060441,8.32209101 15.0442449,8.63507408 14.8412133,8.83810562 C14.6381818,9.04113717 14.3251987,9.05733326 14.1421461,8.8742806 L13.003,7.73499762 L11.8640694,8.8742806 C11.6810167,9.05733326 11.3680336,9.04113717 11.1650021,8.83810562 C10.9619706,8.63507408 10.9457745,8.32209101 11.1288271,8.13903835 L12.268,6.99999762 L11.1288271,5.86096165 C10.9457745,5.67790899 10.9619706,5.36492592 11.1650021,5.16189438 C11.3680336,4.95886283 11.6810167,4.94266674 11.8640694,5.1257194 L13.003,6.26399762 L14.1421461,5.1257194 C14.3251987,4.94266674 14.6381818,4.95886283 14.8412133,5.16189438 Z" transform="translate(1 3)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -30,5 +30,9 @@
<file>audio-volume-muted-symbolic.svg</file>
<file>slider_bg.png</file>
<file>slider_handle.svg</file>
<file>audio-volume-muted-symbolic-dark.svg</file>
<file>audio-volume-low-symbolic-dark.svg</file>
<file>audio-volume-medium-symbolic-dark.svg</file>
<file>audio-volume-high-symbolic-dark.svg</file>
</qresource>
</RCC>

View File

@ -21,6 +21,7 @@
#include "sinkinputwidget.h"
#include "../widgets/tipswidget.h"
#include "../frame/util/imageutil.h"
#include <QHBoxLayout>
#include <QIcon>
@ -197,12 +198,10 @@ void SinkInputWidget::refreshIcon()
}
const auto ratio = devicePixelRatioF();
QPixmap ret = QIcon::fromTheme(iconRight).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio);
ret.setDevicePixelRatio(ratio);
QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio);
m_volumeIconMax->setPixmap(ret);
ret = QIcon::fromTheme(iconLeft).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio);
ret.setDevicePixelRatio(ratio);
ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio);
m_volumeBtnMin->setPixmap(ret);
}

View File

@ -23,6 +23,7 @@
#include "sinkinputwidget.h"
#include "componments/horizontalseparator.h"
#include "../widgets/tipswidget.h"
#include "../frame/util/imageutil.h"
#include "util/utils.h"
#include <DGuiApplicationHelper>
@ -227,11 +228,9 @@ void SoundApplet::refreshIcon()
}
const auto ratio = devicePixelRatioF();
QPixmap ret = QIcon::fromTheme(iconRight).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio);
ret.setDevicePixelRatio(ratio);
QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio);
m_volumeIconMax->setPixmap(ret);
ret = QIcon::fromTheme(iconLeft).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio);
ret.setDevicePixelRatio(ratio);
ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio);
m_volumeBtn->setPixmap(ret);
}

View File

@ -29,6 +29,7 @@
#include <DApplication>
#include <DDBusSender>
#include "../widgets/tipswidget.h"
#include "../frame/util/imageutil.h"
#include <DGuiApplicationHelper>
// menu actions
@ -154,7 +155,6 @@ void SoundItem::refreshIcon()
const double volmue = m_applet->volumeValue();
const bool mute = m_sinkInter->mute();
// const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
const Dock::DisplayMode displayMode = Dock::DisplayMode::Efficient;
QString iconString;
@ -188,9 +188,7 @@ void SoundItem::refreshIcon()
if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType)
iconString.append(PLUGIN_MIN_ICON_NAME);
const QIcon icon = QIcon::fromTheme(iconString, QIcon::fromTheme(QString(":/%1").arg(iconString)));
m_iconPixmap = icon.pixmap(iconSize * ratio, iconSize * ratio);
m_iconPixmap.setDevicePixelRatio(ratio);
m_iconPixmap = ImageUtil::loadSvg(iconString, ":/", iconSize, ratio);
update();
}

View File

@ -12,7 +12,8 @@ file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp"
"../../frame/dbus/sni/*.h" "../../frame/dbus/sni/*.cpp"
"../../frame/dbus/dbusmenu.h" "../../frame/dbus/dbusmenu.cpp"
"../../frame/dbus/dbusmenumanager.h" "../../frame/dbus/dbusmenumanager.cpp"
"../../widgets/*.h" "../../widgets/*.cpp")
"../../widgets/*.h" "../../widgets/*.cpp"
"../../frame/util/imageutil.h" "../../frame/util/imageutil.cpp")
find_package(PkgConfig REQUIRED)
find_package(Qt5Widgets REQUIRED)

View File

@ -24,10 +24,11 @@
#include <QMouseEvent>
#include <QPainter>
#include <DHiDPIHelper>
#include <DStyle>
#include <DGuiApplicationHelper>
#include "../frame/util/imageutil.h"
DWIDGET_USE_NAMESPACE
#define ExpandedKey "fashion-tray-expanded"
@ -200,8 +201,6 @@ void FashionTrayControlWidget::refreshArrowPixmap()
case Dock::Right:
iconPath = m_expanded ? "arrow-down" : "arrow-up";
break;
default:
break;
}
if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) {
@ -209,6 +208,5 @@ void FashionTrayControlWidget::refreshArrowPixmap()
}
const auto ratio = devicePixelRatioF();
m_arrowPix = QIcon::fromTheme(iconPath, QIcon(QString(":/icons/resources/%1").arg(iconPath))).pixmap(QSize(PLUGIN_ICON_MAX_SIZE, PLUGIN_ICON_MAX_SIZE) * ratio);
m_arrowPix.setDevicePixelRatio(ratio);
m_arrowPix = ImageUtil::loadSvg(iconPath, ":/icons/resources/", PLUGIN_ICON_MAX_SIZE, ratio);
}