File indexing completed on 2024-05-19 05:32:22

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #pragma once
0010 
0011 #include "platformsupport/scenes/qpainter/qpainterbackend.h"
0012 
0013 #include "scene/decorationitem.h"
0014 #include "scene/shadowitem.h"
0015 #include "scene/workspacescene.h"
0016 
0017 namespace KWin
0018 {
0019 
0020 class KWIN_EXPORT WorkspaceSceneQPainter : public WorkspaceScene
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     explicit WorkspaceSceneQPainter(QPainterBackend *backend);
0026     ~WorkspaceSceneQPainter() override;
0027 
0028     std::unique_ptr<DecorationRenderer> createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override;
0029     std::unique_ptr<ShadowTextureProvider> createShadowTextureProvider(Shadow *shadow) override;
0030 
0031     bool animationsSupported() const override
0032     {
0033         return false;
0034     }
0035 
0036     QPainterBackend *backend() const
0037     {
0038         return m_backend;
0039     }
0040 
0041 private:
0042     QPainterBackend *m_backend;
0043 };
0044 
0045 class QPainterShadowTextureProvider : public ShadowTextureProvider
0046 {
0047 public:
0048     explicit QPainterShadowTextureProvider(Shadow *shadow);
0049 
0050     void update() override;
0051 };
0052 
0053 class SceneQPainterDecorationRenderer : public DecorationRenderer
0054 {
0055     Q_OBJECT
0056 public:
0057     enum class DecorationPart : int {
0058         Left,
0059         Top,
0060         Right,
0061         Bottom,
0062         Count
0063     };
0064     explicit SceneQPainterDecorationRenderer(Decoration::DecoratedClientImpl *client);
0065 
0066     void render(const QRegion &region) override;
0067 
0068     QImage image(DecorationPart part) const;
0069 
0070 private:
0071     void resizeImages();
0072     QImage m_images[int(DecorationPart::Count)];
0073 };
0074 
0075 } // KWin