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