File indexing completed on 2024-05-19 16:34:45

0001 /*
0002     SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "scene/imageitem.h"
0008 
0009 #include <kwingltexture.h>
0010 
0011 namespace KWin
0012 {
0013 
0014 ImageItem::ImageItem(Scene *scene, Item *parent)
0015     : Item(scene, parent)
0016 {
0017 }
0018 
0019 QImage ImageItem::image() const
0020 {
0021     return m_image;
0022 }
0023 
0024 void ImageItem::setImage(const QImage &image)
0025 {
0026     m_image = image;
0027 }
0028 
0029 ImageItemOpenGL::ImageItemOpenGL(Scene *scene, Item *parent)
0030     : ImageItem(scene, parent)
0031 {
0032 }
0033 
0034 ImageItemOpenGL::~ImageItemOpenGL()
0035 {
0036 }
0037 
0038 GLTexture *ImageItemOpenGL::texture() const
0039 {
0040     return m_texture.get();
0041 }
0042 
0043 void ImageItemOpenGL::preprocess()
0044 {
0045     if (m_image.isNull()) {
0046         m_texture.reset();
0047         m_textureKey = 0;
0048     } else if (m_textureKey != m_image.cacheKey()) {
0049         m_textureKey = m_image.cacheKey();
0050 
0051         if (!m_texture || m_texture->size() != m_image.size()) {
0052             m_texture = std::make_unique<GLTexture>(m_image);
0053         } else {
0054             m_texture->update(m_image);
0055         }
0056     }
0057 }
0058 
0059 WindowQuadList ImageItemOpenGL::buildQuads() const
0060 {
0061     const QRectF geometry = boundingRect();
0062     if (geometry.isEmpty()) {
0063         return WindowQuadList{};
0064     }
0065 
0066     WindowQuad quad;
0067     quad[0] = WindowVertex(geometry.topLeft(), QPointF(0, 0));
0068     quad[1] = WindowVertex(geometry.topRight(), QPointF(1, 0));
0069     quad[2] = WindowVertex(geometry.bottomRight(), QPointF(1, 1));
0070     quad[3] = WindowVertex(geometry.bottomLeft(), QPointF(0, 1));
0071 
0072     WindowQuadList ret;
0073     ret.append(quad);
0074     return ret;
0075 }
0076 
0077 } // namespace KWin