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

0001 #ifndef oxygenhoverdata_h
0002 #define oxygenhoverdata_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 
0015 namespace Oxygen
0016 {
0017     class HoverData
0018     {
0019 
0020         public:
0021 
0022         //! constructor
0023         HoverData( void ):
0024             _hovered( false ),
0025             _updateOnHover( false )
0026         {}
0027 
0028         //! destructor
0029         virtual ~HoverData( void )
0030         { disconnect( 0L ); }
0031 
0032         //! setup connections
0033         virtual void connect( GtkWidget* );
0034 
0035         //! disconnect
0036         virtual void disconnect( GtkWidget* );
0037 
0038         //! true if hovered
0039         virtual bool hovered( void ) const
0040         { return _hovered; }
0041 
0042         //! true if hover state change should trigger widget repaint
0043         void setUpdateOnHover( bool value )
0044         { _updateOnHover = value; }
0045 
0046         //! set mouse over state
0047         virtual bool setHovered( GtkWidget* widget, bool value )
0048         {
0049             if( _hovered == value ) return false;
0050             _hovered = value;
0051 
0052             // schedule repaint
0053             if( _updateOnHover )
0054             { gtk_widget_queue_draw( widget ); }
0055 
0056             return true;
0057         }
0058 
0059         protected:
0060 
0061         //!@name static callbacks
0062         //@{
0063         static gboolean enterNotifyEvent( GtkWidget*, GdkEventCrossing*, gpointer );
0064         static gboolean leaveNotifyEvent( GtkWidget*, GdkEventCrossing*, gpointer );
0065         //@}
0066 
0067         private:
0068 
0069         //! enter signal id
0070         Signal _enterId;
0071 
0072         //! leave signal id
0073         Signal _leaveId;
0074 
0075         //! true if hovered
0076         bool _hovered;
0077 
0078         //! also update
0079         bool _updateOnHover;
0080 
0081     };
0082 
0083 }
0084 
0085 #endif