File indexing completed on 2024-05-19 09:27:58
0001 #ifndef oxygenshadowhelper_h 0002 #define oxygenshadowhelper_h 0003 0004 ////////////////////////////////////////////////////////////////////////////// 0005 // oxygenshadowhelper.h 0006 // handle shadow pixmaps passed to window manager via X property 0007 // ------------------- 0008 // 0009 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0010 // SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0011 // 0012 // SPDX-License-Identifier: MIT 0013 ////////////////////////////////////////////////////////////////////////////// 0014 0015 #include "oxygen.h" 0016 #include "oxygentileset.h" 0017 0018 #include <KWindowShadow> 0019 0020 #include <QMap> 0021 #include <QMargins> 0022 #include <QObject> 0023 #include <QSet> 0024 0025 namespace Oxygen 0026 { 0027 0028 //* forward declaration 0029 class ShadowCache; 0030 class StyleHelper; 0031 0032 //* handle shadow pixmaps passed to window manager via X property 0033 class ShadowHelper : public QObject 0034 { 0035 Q_OBJECT 0036 0037 public: 0038 //* constructor 0039 ShadowHelper(QObject *, StyleHelper &); 0040 0041 //* destructor 0042 ~ShadowHelper(void) override; 0043 0044 //* reset 0045 void reset(void); 0046 0047 //* register widget 0048 bool registerWidget(QWidget *, bool force = false); 0049 0050 //* unregister widget 0051 void unregisterWidget(QWidget *); 0052 0053 //* reparse cache config (must be followed by loadConfig) 0054 void reparseCacheConfig(void); 0055 0056 //* load config 0057 void loadConfig(void); 0058 0059 //* event filter 0060 bool eventFilter(QObject *, QEvent *) override; 0061 0062 private Q_SLOTS: 0063 0064 //* unregister widget 0065 void widgetDeleted(QObject *); 0066 0067 //* unregister window 0068 void windowDeleted(QObject *); 0069 0070 private: 0071 //* true if widget is a menu 0072 bool isMenu(QWidget *) const; 0073 0074 //* true if widget is a tooltip 0075 bool isToolTip(QWidget *) const; 0076 0077 //* dock widget 0078 bool isDockWidget(QWidget *) const; 0079 0080 //* toolbar 0081 bool isToolBar(QWidget *) const; 0082 0083 //* accept widget 0084 bool acceptWidget(QWidget *) const; 0085 0086 //* shadow cache 0087 const ShadowCache &shadowCache(void) const 0088 { 0089 return *_shadowCache; 0090 } 0091 0092 //* shadow cache 0093 ShadowCache &shadowCache(void) 0094 { 0095 return *_shadowCache; 0096 } 0097 0098 // create shadow tiles from tileset 0099 const QVector<KWindowShadowTile::Ptr> &createPlatformTiles(bool isDockWidget); 0100 0101 // create a shadow tile from pixmap 0102 KWindowShadowTile::Ptr createPlatformTile(const QPixmap &); 0103 0104 //* installs shadow on given widget in a platform independent way 0105 void installShadows(QWidget *); 0106 0107 //* uninstalls shadow on given widget in a platform independent way 0108 void uninstallShadows(QWidget *); 0109 0110 //* gets the shadow margins for the given widget 0111 QMargins shadowMargins(QWidget *) const; 0112 0113 //* helper 0114 StyleHelper &_helper; 0115 0116 //* cache 0117 ShadowCache *_shadowCache; 0118 0119 //* set of registered widgets 0120 QSet<QWidget *> _widgets; 0121 0122 //* map of managed shadows 0123 QMap<QWindow *, KWindowShadow *> _shadows; 0124 0125 //*@name shadow tilesets 0126 //@{ 0127 TileSet _tiles; 0128 TileSet _dockTiles; 0129 //@} 0130 0131 //* number of shadow tiles 0132 enum { numTiles = 8 }; 0133 0134 //*@name shared shadow tiles 0135 //@{ 0136 QVector<KWindowShadowTile::Ptr> _platformTiles; 0137 QVector<KWindowShadowTile::Ptr> _platformDockTiles; 0138 //@} 0139 0140 //* shadow size 0141 int _size; 0142 }; 0143 } 0144 0145 #endif