File indexing completed on 2024-05-12 05:34:35
0001 #ifndef oxygenscrollbarstatedata_h 0002 #define oxygenscrollbarstatedata_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 "../oxygengtkutils.h" 0011 #include "oxygentimeline.h" 0012 0013 #include <gtk/gtk.h> 0014 0015 namespace Oxygen 0016 { 0017 //! track scrollbar arrow state changes events 0018 class ScrollBarStateData 0019 { 0020 0021 public: 0022 0023 //! constructor 0024 explicit ScrollBarStateData( void ): 0025 _target( 0L ) 0026 {} 0027 0028 //! destructor 0029 virtual ~ScrollBarStateData( void ) 0030 {} 0031 0032 //! setup connections 0033 void connect( GtkWidget* ); 0034 0035 //! disconnect 0036 void disconnect( GtkWidget* ); 0037 0038 //! update state 0039 bool updateState( GtkArrowType type, bool value ) 0040 { return data( type ).updateState( value ); } 0041 0042 //! enable state 0043 void setEnabled( bool value ) 0044 { 0045 data( GTK_ARROW_UP )._timeLine.setEnabled( value ); 0046 data( GTK_ARROW_DOWN )._timeLine.setEnabled( value ); 0047 } 0048 0049 //! duration 0050 void setDuration( int value ) 0051 { 0052 data( GTK_ARROW_UP )._timeLine.setDuration( value ); 0053 data( GTK_ARROW_DOWN )._timeLine.setDuration( value ); 0054 } 0055 0056 //! true if timeline for give arrow type is running 0057 bool isAnimated( GtkArrowType type ) const 0058 { return data( type )._timeLine.isRunning(); } 0059 0060 //! opacity 0061 double opacity( GtkArrowType type ) const 0062 { return data( type )._timeLine.value(); } 0063 0064 //! rect 0065 const GdkRectangle& rect( GtkArrowType type ) const 0066 { return data( type )._rect; } 0067 0068 //! rect 0069 void setRect( GtkArrowType type, const GdkRectangle& rect ) 0070 { data( type )._rect = rect; } 0071 0072 protected: 0073 0074 // arrow data 0075 class Data 0076 { 0077 0078 public: 0079 0080 //! constructor 0081 explicit Data( void ): 0082 _rect( Gtk::gdk_rectangle() ), 0083 _state( false ) 0084 {} 0085 0086 //! update state 0087 bool updateState( bool ); 0088 0089 //! timeline 0090 TimeLine _timeLine; 0091 0092 //! rectangle 0093 GdkRectangle _rect; 0094 0095 //! state 0096 bool _state; 0097 0098 }; 0099 0100 //! get data for given arrow type 0101 const Data& data( GtkArrowType type ) const 0102 { 0103 switch( type ) 0104 { 0105 0106 case GTK_ARROW_UP: 0107 case GTK_ARROW_LEFT: 0108 return _upArrowData; 0109 0110 default: 0111 case GTK_ARROW_DOWN: 0112 case GTK_ARROW_RIGHT: 0113 return _downArrowData; 0114 0115 } 0116 } 0117 0118 //! get data for given arrow type 0119 Data& data( GtkArrowType type ) 0120 { 0121 switch( type ) 0122 { 0123 0124 case GTK_ARROW_UP: 0125 case GTK_ARROW_LEFT: 0126 return _upArrowData; 0127 0128 default: 0129 case GTK_ARROW_DOWN: 0130 case GTK_ARROW_RIGHT: 0131 return _downArrowData; 0132 0133 } 0134 } 0135 0136 //! delayed update 0137 static gboolean delayedUpdate( gpointer ); 0138 0139 private: 0140 0141 //! target 0142 GtkWidget* _target; 0143 0144 // up/left arrow 0145 Data _upArrowData; 0146 0147 // down/right arrow 0148 Data _downArrowData; 0149 0150 }; 0151 0152 } 0153 0154 #endif