]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kpixmapmodifier.cpp
Output of licensedigger + manual cleanup afterwards.
[dolphin.git] / src / kitemviews / private / kpixmapmodifier.cpp
index c564ecc30cf6a370ebc2dff97b68e6bb504fd56a..5bcb3b8f5dc4ebe5e4cf33c4077fc82e3163b490 100644 (file)
@@ -2,50 +2,22 @@
 /*
     This file is a part of the KDE project
 
-    Copyright © 2006 Zack Rusin <zack@kde.org>
-    Copyright © 2006-2007, 2008 Fredrik Höglund <fredrik@kde.org>
+    SPDX-FileCopyrightText: 2006 Zack Rusin <zack@kde.org>
+    SPDX-FileCopyrightText: 2006-2007, 2008 Fredrik Höglund <fredrik@kde.org>
 
     The stack blur algorithm was invented by Mario Klingemann <mario@quasimondo.com>
 
     This implementation is based on the version in Anti-Grain Geometry Version 2.4,
-    Copyright © 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+    SPDX-FileCopyrightText: 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+
+    SPDX-License-Identifier: BSD-2-Clause
 */
 
 #include "kpixmapmodifier.h"
 
+#include <QGuiApplication>
 #include <QImage>
 #include <QPainter>
-#include <QPixmap>
-#include <QSize>
-
-
-#include <config-X11.h> // for HAVE_XRENDER
-#if defined(Q_WS_X11) && defined(HAVE_XRENDER)
-#  include <QX11Info>
-#  include <X11/Xlib.h>
-#  include <X11/extensions/Xrender.h>
-#endif
 
 static const quint32 stackBlur8Mul[255] =
 {
@@ -330,61 +302,31 @@ void KPixmapModifier::scale(QPixmap& pixmap, const QSize& scaledSize)
         pixmap = QPixmap();
         return;
     }
-
-#if defined(Q_WS_X11) && defined(HAVE_XRENDER)
-    // Assume that the texture size limit is 2048x2048
-    if ((pixmap.width() <= 2048) && (pixmap.height() <= 2048) && pixmap.x11PictureHandle()) {
-        const QPixmap unscaledPixmap = pixmap.copy(); // Make a deep copy for XRender
-        QSize scaledPixmapSize = pixmap.size();
-        scaledPixmapSize.scale(scaledSize, Qt::KeepAspectRatio);
-
-        const qreal factor = scaledPixmapSize.width() / qreal(unscaledPixmap.width());
-
-        XTransform xform = {{
-            { XDoubleToFixed(1 / factor), 0, 0 },
-            { 0, XDoubleToFixed(1 / factor), 0 },
-            { 0, 0, XDoubleToFixed(1) }
-        }};
-
-        QPixmap scaledPixmap(scaledPixmapSize);
-        scaledPixmap.fill(Qt::transparent);
-
-        Display* dpy = QX11Info::display();
-
-        XRenderPictureAttributes attr;
-        attr.repeat = RepeatPad;
-        XRenderChangePicture(dpy, unscaledPixmap.x11PictureHandle(), CPRepeat, &attr);
-
-        XRenderSetPictureFilter(dpy, unscaledPixmap.x11PictureHandle(), FilterBilinear, 0, 0);
-        XRenderSetPictureTransform(dpy, unscaledPixmap.x11PictureHandle(), &xform);
-        XRenderComposite(dpy, PictOpOver, unscaledPixmap.x11PictureHandle(), None, scaledPixmap.x11PictureHandle(),
-                         0, 0, 0, 0, 0, 0, scaledPixmap.width(), scaledPixmap.height());
-        pixmap = scaledPixmap;
-    } else {
-        pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
-    }
-#else
+    qreal dpr = pixmap.devicePixelRatio();
     pixmap = pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
-#endif
+    pixmap.setDevicePixelRatio(dpr);
 }
 
 void KPixmapModifier::applyFrame(QPixmap& icon, const QSize& scaledSize)
 {
     static TileSet tileSet;
+    qreal dpr = qApp->devicePixelRatio();
 
     // Resize the icon to the maximum size minus the space required for the frame
     const QSize size(scaledSize.width() - TileSet::LeftMargin - TileSet::RightMargin,
                      scaledSize.height() - TileSet::TopMargin - TileSet::BottomMargin);
-    scale(icon, size);
+    scale(icon, size * dpr);
+    icon.setDevicePixelRatio(dpr);
 
-    QPixmap framedIcon(icon.size().width() + TileSet::LeftMargin + TileSet::RightMargin,
-                       icon.size().height() + TileSet::TopMargin + TileSet::BottomMargin);
+    QPixmap framedIcon(icon.size().width() + (TileSet::LeftMargin + TileSet::RightMargin) * dpr,
+                       icon.size().height() + (TileSet::TopMargin + TileSet::BottomMargin) * dpr);
+    framedIcon.setDevicePixelRatio(dpr);
     framedIcon.fill(Qt::transparent);
 
     QPainter painter;
     painter.begin(&framedIcon);
     painter.setCompositionMode(QPainter::CompositionMode_Source);
-    tileSet.paint(&painter, framedIcon.rect());
+    tileSet.paint(&painter, QRect(QPoint(0,0), framedIcon.size() / dpr));
     painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
     painter.drawPixmap(TileSet::LeftMargin, TileSet::TopMargin, icon);