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 &region) 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