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