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

0001 #ifndef oxygenwidgetstatedata_h
0002 #define oxygenwidgetstatedata_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 *
0007 * SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 #include "oxygentimeline.h"
0011 #include "../oxygengtkutils.h"
0012 
0013 #include <gtk/gtk.h>
0014 
0015 namespace Oxygen
0016 {
0017     //! track widget state changes events
0018     class WidgetStateData
0019     {
0020 
0021         public:
0022 
0023         //! constructor
0024         explicit WidgetStateData( void ):
0025             _target( 0L ),
0026             _dirtyRect( Gtk::gdk_rectangle() ),
0027             _state( false )
0028         {}
0029 
0030         //! destructor
0031         virtual ~WidgetStateData( void )
0032         {}
0033 
0034         //! setup connections
0035         void connect( GtkWidget* );
0036 
0037         //! disconnect
0038         void disconnect( GtkWidget* );
0039 
0040         //! update state
0041         bool updateState( bool value, const GdkRectangle& );
0042 
0043         //! update state
0044         bool updateState( bool value )
0045         { return updateState( value, Gtk::gdk_rectangle() ); }
0046 
0047         //! true if animated
0048         bool isAnimated( void ) const
0049         { return _timeLine.isRunning(); }
0050 
0051         //! opacity
0052         double opacity( void ) const
0053         { return _timeLine.value(); }
0054 
0055         //! enable state
0056         void setEnabled( bool value )
0057         { _timeLine.setEnabled( value ); }
0058 
0059         //! duration
0060         void setDuration( int value )
0061         { _timeLine.setDuration( value ); }
0062 
0063         protected:
0064 
0065         //! delayed update
0066         static gboolean delayedUpdate( gpointer );
0067 
0068         private:
0069 
0070         //! target
0071         GtkWidget* _target;
0072 
0073         //! timeline
0074         TimeLine _timeLine;
0075 
0076         //! dirty rect
0077         GdkRectangle _dirtyRect;
0078 
0079         //! state
0080         bool _state;
0081 
0082     };
0083 
0084 }
0085 
0086 #endif