File indexing completed on 2024-05-12 05:31:23

0001 /*
0002     SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "core/output.h"
0010 
0011 #include <QMatrix4x4>
0012 #include <QRectF>
0013 #include <QRegion>
0014 
0015 namespace KWin
0016 {
0017 
0018 class RenderTarget;
0019 
0020 class KWIN_EXPORT RenderViewport
0021 {
0022 public:
0023     explicit RenderViewport(const QRectF &renderRect, double scale, const RenderTarget &renderTarget);
0024 
0025     QMatrix4x4 projectionMatrix() const;
0026     QRectF renderRect() const;
0027     double scale() const;
0028 
0029     QRectF mapToRenderTarget(const QRectF &logicalGeometry) const;
0030     QRect mapToRenderTarget(const QRect &logicalGeometry) const;
0031     QPoint mapToRenderTarget(const QPoint &logicalGeometry) const;
0032     QPointF mapToRenderTarget(const QPointF &logicalGeometry) const;
0033     QRegion mapToRenderTarget(const QRegion &logicalGeometry) const;
0034 
0035     QRectF mapToRenderTargetTexture(const QRectF &logicalGeometry) const;
0036     QRect mapToRenderTargetTexture(const QRect &logicalGeometry) const;
0037     QPoint mapToRenderTargetTexture(const QPoint &logicalGeometry) const;
0038     QPointF mapToRenderTargetTexture(const QPointF &logicalGeometry) const;
0039     QRegion mapToRenderTargetTexture(const QRegion &logicalGeometry) const;
0040 
0041 private:
0042     const OutputTransform m_transform;
0043     const QSize m_transformBounds;
0044     const QRectF m_renderRect;
0045     const QRect m_deviceRenderRect;
0046     const QMatrix4x4 m_projectionMatrix;
0047     const double m_scale;
0048 };
0049 
0050 } // namespace KWin