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/itemrenderer.h" 0008 0009 #include <QRegion> 0010 0011 namespace KWin 0012 { 0013 0014 ItemRenderer::ItemRenderer() 0015 { 0016 } 0017 0018 ItemRenderer::~ItemRenderer() 0019 { 0020 } 0021 0022 QPainter *ItemRenderer::painter() const 0023 { 0024 return nullptr; 0025 } 0026 0027 void ItemRenderer::beginFrame(RenderTarget *renderTarget) 0028 { 0029 } 0030 0031 void ItemRenderer::endFrame() 0032 { 0033 } 0034 0035 QMatrix4x4 ItemRenderer::renderTargetProjectionMatrix() const 0036 { 0037 return m_renderTargetProjectionMatrix; 0038 } 0039 0040 QRect ItemRenderer::renderTargetRect() const 0041 { 0042 return m_renderTargetRect.toRect(); 0043 } 0044 0045 static QMatrix4x4 createProjectionMatrix(const QRectF &rect, qreal scale) 0046 { 0047 QMatrix4x4 ret; 0048 ret.ortho(QRectF(rect.left() * scale, rect.top() * scale, rect.width() * scale, rect.height() * scale)); 0049 return ret; 0050 } 0051 0052 void ItemRenderer::setRenderTargetRect(const QRectF &rect) 0053 { 0054 if (rect == m_renderTargetRect) { 0055 return; 0056 } 0057 0058 m_renderTargetRect = rect; 0059 m_renderTargetProjectionMatrix = createProjectionMatrix(rect, m_renderTargetScale); 0060 } 0061 0062 qreal ItemRenderer::renderTargetScale() const 0063 { 0064 return m_renderTargetScale; 0065 } 0066 0067 void ItemRenderer::setRenderTargetScale(qreal scale) 0068 { 0069 if (qFuzzyCompare(scale, m_renderTargetScale)) { 0070 return; 0071 } 0072 0073 m_renderTargetScale = scale; 0074 m_renderTargetProjectionMatrix = createProjectionMatrix(m_renderTargetRect, scale); 0075 } 0076 0077 QRegion ItemRenderer::mapToRenderTarget(const QRegion ®ion) const 0078 { 0079 QRegion result; 0080 for (const QRect &rect : region) { 0081 result += QRect((rect.x() - m_renderTargetRect.x()) * m_renderTargetScale, 0082 (rect.y() - m_renderTargetRect.y()) * m_renderTargetScale, 0083 rect.width() * m_renderTargetScale, 0084 rect.height() * m_renderTargetScale); 0085 } 0086 return result; 0087 } 0088 0089 } // namespace KWin