14static QMatrix4x4 createProjectionMatrix(
const RenderTarget &renderTarget,
const QRect &rect)
19 ret *= renderTarget.transform().toMatrix();
27 : m_transform(renderTarget.transform())
28 , m_transformBounds(m_transform.map(renderTarget.size()))
29 , m_renderRect(renderRect)
31 , m_projectionMatrix(createProjectionMatrix(renderTarget, m_deviceRenderRect))
38 return m_projectionMatrix;
53 const QRectF deviceGeometry =
scaledRect(logicalGeometry, m_scale)
54 .translated(-m_deviceRenderRect.topLeft());
55 return m_transform.
map(deviceGeometry, m_transformBounds);
61 .translated(-m_deviceRenderRect.topLeft());
62 return m_transform.
map(deviceGeometry, m_transformBounds);
67 const QPoint devicePoint =
snapToPixelGrid(QPointF(logicalGeometry) * m_scale) - m_deviceRenderRect.topLeft();
68 return m_transform.
map(devicePoint, m_transformBounds);
73 const QPointF devicePoint = logicalGeometry * m_scale - m_deviceRenderRect.topLeft();
74 return m_transform.
map(devicePoint, m_transformBounds);
80 for (
const auto &rect : logicalGeometry) {
89 .translated(-m_deviceRenderRect.topLeft());
95 .translated(-m_deviceRenderRect.topLeft());
100 return snapToPixelGrid(QPointF(logicalGeometry) * m_scale) - m_deviceRenderRect.topLeft();
105 return logicalGeometry * m_scale - m_deviceRenderRect.topLeft();
111 for (
const auto &rect : logicalGeometry) {
QRectF mapToRenderTargetTexture(const QRectF &logicalGeometry) const
QMatrix4x4 projectionMatrix() const
RenderViewport(const QRectF &renderRect, double scale, const RenderTarget &renderTarget)
QRectF renderRect() const
QRectF mapToRenderTarget(const QRectF &logicalGeometry) const
KWIN_EXPORT QPoint snapToPixelGrid(const QPointF &point)
KWIN_EXPORT QRectF scaledRect(const QRectF &rect, qreal scale)