File indexing completed on 2024-05-12 05:34:37

0001 #ifndef oxygenwidgetsizedata_h
0002 #define oxygenwidgetsizedata_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 "../oxygenflags.h"
0012 
0013 #include <gtk/gtk.h>
0014 
0015 namespace Oxygen
0016 {
0017     // track main window resize events
0018     class WidgetSizeData
0019     {
0020 
0021         public:
0022 
0023         //! constructor
0024         WidgetSizeData( void ):
0025             _target(NULL),
0026             _width(-1),
0027             _height(-1),
0028             _alpha(false)
0029         {}
0030 
0031         //! destructor
0032         virtual ~WidgetSizeData( void )
0033         {}
0034 
0035         //! setup connections
0036         void connect( GtkWidget* widget )
0037         { _target = widget; }
0038 
0039         //! disconnect
0040         void disconnect( GtkWidget* )
0041         { _target = 0L; }
0042 
0043         //! changed flags
0044         enum ChangedFlag
0045         {
0046             SizeChanged = 1<<0,
0047             AlphaChanged = 1<<1
0048         };
0049 
0050         OX_DECLARE_FLAGS( ChangedFlags, ChangedFlag )
0051 
0052         //! update widget size and alpha
0053         /*! return bitmask on what was changed */
0054         ChangedFlags update();
0055 
0056         //! width
0057         int width( void ) const
0058         { return _width; }
0059 
0060         //! height
0061         int height( void ) const
0062         { return _height; }
0063 
0064         //! alpha
0065         bool alpha( void ) const
0066         { return _alpha; }
0067 
0068         private:
0069 
0070         //! target widget
0071         GtkWidget* _target;
0072 
0073         //! old width
0074         int _width;
0075 
0076         //! old height
0077         int _height;
0078 
0079         //! whether the widget has alpha channel
0080         bool _alpha;
0081 
0082     };
0083 
0084     OX_DECLARE_OPERATORS_FOR_FLAGS( WidgetSizeData::ChangedFlags )
0085 
0086 }
0087 
0088 #endif