/* * 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 "imageutil.h" #include #include #include #include #include #include #include #include #include #include #include #include const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio) { 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; } 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; } QImage ImageUtil::loadWindowThumb(const WId &windowId, int width, int height) { QDBusInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Screenshot"), QStringLiteral("org.kde.kwin.Screenshot")); QList args; args << QVariant::fromValue(windowId); args << QVariant::fromValue(quint32(width)); args << QVariant::fromValue(quint32(height)); QDBusReply reply = interface.callWithArgumentList(QDBus::Block, QStringLiteral("screenshotForWindowExtend"), args); if(reply.isValid()){ const QString tmpFile = reply.value(); if (QFile::exists(tmpFile)) { QImage image(tmpFile); QFile::remove(tmpFile); return image; } qDebug() << "get current workspace background error, file does not exist : " << tmpFile; } else { qDebug() << "get current workspace background error: "<< reply.error().message(); } return QImage(); } QImage ImageUtil::loadWindowThumb(const QString &uuid, int width, int height) { QDBusInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Screenshot"), QStringLiteral("org.kde.kwin.Screenshot")); QList args; args << QVariant::fromValue(uuid); args << QVariant::fromValue(quint32(width)); args << QVariant::fromValue(quint32(height)); QDBusReply reply = interface.callWithArgumentList(QDBus::Block, QStringLiteral("screenshotForWindowExtendUuid"), args); if(reply.isValid()){ const QString tmpFile = reply.value(); if (QFile::exists(tmpFile)) { QImage image(tmpFile); QFile::remove(tmpFile); return image; } qDebug() << "get current workspace background error, file does not exist : " << tmpFile; } else { qDebug() << "get current workspace background error: "<< reply.error().message(); } return QImage(); }