summaryrefslogtreecommitdiffstats
path: root/tdegtk/tdegtk-widgetlookup.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdegtk/tdegtk-widgetlookup.h')
-rw-r--r--tdegtk/tdegtk-widgetlookup.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/tdegtk/tdegtk-widgetlookup.h b/tdegtk/tdegtk-widgetlookup.h
new file mode 100644
index 0000000..98a7b96
--- /dev/null
+++ b/tdegtk/tdegtk-widgetlookup.h
@@ -0,0 +1,92 @@
+#ifndef tdegtk_widgetlookup_h
+#define tdegtk_widgetlookup_h
+/*
+* this file was largely taken from the oxygen gtk engine
+* Copyright (c) 2010 Hugo Pereira Da Costa <[email protected]>
+* Copyright (c) 2010 Ruslan Kabatsayev <[email protected]>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or( at your option ) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include "tdegtk-hooks.h"
+#include "tdegtk-signals.h"
+
+#include <cairo/cairo.h>
+#include <gtk/gtk.h>
+
+#include <list>
+#include <map>
+
+
+ //! uses the widget's "draw" signal to bind GtkWidget and cairo context
+ /*! this allows us to retrieve painted widgets from ThemingEngine rendering primitives */
+ class WidgetLookup
+ {
+
+ public:
+
+ //! constructor
+ explicit WidgetLookup( void );
+
+ //! destructor
+ virtual ~WidgetLookup( void );
+
+ //! initialize hooks
+ void initializeHooks( void );
+
+ //! find widget matching given context and type
+ GtkWidget* find( cairo_t*, const GtkWidgetPath* ) const;
+
+ //! find widget matching given context and type
+ GtkWidget* find( cairo_t*, GType ) const;
+
+ protected:
+
+ //! bind widget to context
+ void bind( GtkWidget*, cairo_t* );
+
+ //! unregister widget
+ void unregisterWidget( GtkWidget* );
+
+ //! hook connected to widget's "draw" signal
+ static gboolean drawHook( GSignalInvocationHint*, guint, const GValue*, gpointer );
+
+ //! destruction callback
+ static gboolean destroyNotifyEvent( GtkWidget*, gpointer );
+
+ private:
+
+ //! true if hooks are initialized
+ bool _hooksInitialized;
+
+ //! hook connected to widget's "draw" signal
+ Hook _drawHook;
+
+ //! store current context
+ cairo_t* _context;
+
+ //! store list of associated widgets, to keep track of destruction
+ typedef std::list<GtkWidget*> WidgetList;
+ WidgetList _widgets;
+
+ //! keep track of all registered widgets, and associated destroy callback
+ typedef std::map< GtkWidget*, Signal > WidgetMap;
+ WidgetMap _allWidgets;
+
+ };
+
+#endif
+