dde-dock/frame/util/imageutil.cpp
caixr23 3e26d6ca35
fix: 修复任务栏图标模糊问题 (#729)
高分屏支持设置错误

Log: 修复任务栏图标模糊问题
Bug: https://pms.uniontech.com/bug-view-174459.html
Influence: 缩放后任务栏-各插件图标,右键菜单图标
2022-11-30 08:46:54 +00:00

67 lines
2.2 KiB
C++

// SPDX-FileCopyrightText: 2011 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "imageutil.h"
#include <QIcon>
#include <QPainter>
#include <QCursor>
#include <QDebug>
#include <X11/Xcursor/Xcursor.h>
const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio)
{
QIcon icon = QIcon::fromTheme(iconName);
int pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : int(size * ratio);
if (!icon.isNull()) {
QPixmap pixmap = icon.pixmap(pixmapSize);
pixmap.setDevicePixelRatio(ratio);
return pixmap;
}
QPixmap pixmap(pixmapSize, pixmapSize);
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;
}
const QPixmap ImageUtil::loadSvg(const QString &iconName, const QSize size, const qreal ratio)
{
QIcon icon = QIcon::fromTheme(iconName);
if (!icon.isNull()) {
QPixmap pixmap = icon.pixmap(size*ratio);
pixmap.setDevicePixelRatio(ratio);
return pixmap;
}
return QPixmap();
}
QCursor* ImageUtil::loadQCursorFromX11Cursor(const char* theme, const char* cursorName, int cursorSize)
{
if (!theme || !cursorName || cursorSize <= 0)
return nullptr;
XcursorImages *images = XcursorLibraryLoadImages(cursorName, theme, cursorSize);
if (!images || !(images->images[0])) {
qWarning() << "loadCursorFalied, theme =" << theme << ", cursorName=" << cursorName;
return nullptr;
}
const int imgW = images->images[0]->width;
const int imgH = images->images[0]->height;
QImage img((const uchar*)images->images[0]->pixels, imgW, imgH, QImage::Format_ARGB32);
QPixmap pixmap = QPixmap::fromImage(img);
QCursor *cursor = new QCursor(pixmap, images->images[0]->xhot, images->images[0]->yhot);
XcursorImagesDestroy(images);
return cursor;
}