File indexing completed on 2024-05-12 17:05:48
0001 #ifndef oxygeninnershadowdata_h 0002 #define oxygeninnershadowdata_h 0003 /* 0004 * this file is part of the oxygen gtk engine 0005 * SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0006 * SPDX-FileCopyrightText: 2010 Ruslan Kabatsayev <b7.10110111@gmail.com> 0007 * 0008 * SPDX-License-Identifier: LGPL-2.0-or-later 0009 */ 0010 0011 #include "oxygensignal.h" 0012 0013 #include <gtk/gtk.h> 0014 #include <algorithm> 0015 #include <map> 0016 0017 namespace Oxygen 0018 { 0019 //! handle inner shadow drawing using composited GdkWindow API 0020 class InnerShadowData 0021 { 0022 0023 public: 0024 0025 //! constructor 0026 InnerShadowData( void ): 0027 _target(0) 0028 {} 0029 0030 //! destructor 0031 virtual ~InnerShadowData( void ) 0032 { disconnect( _target ); } 0033 0034 //! setup connections 0035 void connect( GtkWidget* ); 0036 0037 //! disconnect 0038 void disconnect( GtkWidget* ); 0039 0040 //! register child 0041 /*! needed to restore composited state on disconnect */ 0042 void registerChild( GtkWidget* ); 0043 0044 protected: 0045 0046 //! unregister child 0047 void unregisterChild( GtkWidget* ); 0048 0049 //!@ callbacks 0050 //@{ 0051 static gboolean childUnrealizeNotifyEvent( GtkWidget*, gpointer ); 0052 static gboolean targetExposeEvent( GtkWidget*, GdkEventExpose*, gpointer ); 0053 //@} 0054 0055 private: 0056 0057 //! target widget 0058 GtkWidget* _target; 0059 0060 //! expose 0061 Signal _exposeId; 0062 0063 //! child data 0064 class ChildData 0065 { 0066 public: 0067 0068 //! constructor 0069 ChildData( void ): 0070 _initiallyComposited( false ) 0071 {} 0072 0073 //! destructor 0074 virtual ~ChildData( void ) 0075 {} 0076 0077 //! disconnect all signals 0078 void disconnect( GtkWidget* ); 0079 0080 //! signal 0081 Signal _unrealizeId; 0082 0083 //! keep track of composited state 0084 bool _initiallyComposited; 0085 }; 0086 0087 //! map registered children and corresponding data 0088 typedef std::map<GtkWidget*, ChildData> ChildDataMap; 0089 ChildDataMap _childrenData; 0090 0091 }; 0092 0093 } 0094 0095 #endif