#ifndef GTK_IMPORTS_H #define GTK_IMPORTS_H /************************************************************************************* * boiler plate code to initialize Gtk functions etc. *************************************************************************************/ void loadGtkFunctions(void (*loader)(const char *, void **, void *), void *user_data); /************************************************************************************* * Gtk Functions to load from shared library *************************************************************************************/ #ifdef GTK_DECLARE_FUNCS #define EXTERN #ifndef NULL #define NULL 0 #endif #define DECL(ret, f, arg1) EXTERN ret (*f) arg1 = NULL; #else #ifdef GTK_LOAD_FUNCS #define DECL(ret, f, arg1) loader(#f, (void **) &f, user_data); #else #define EXTERN extern #define DECL(ret, f, arg1) EXTERN ret (*f) arg1; #endif #endif #ifndef GTK_IMPORTS_TYPES #define GTK_IMPORTS_TYPES typedef void GtkWidget; typedef void GtkWindow; typedef void GtkApplication; typedef void GApplication; typedef void GObject; typedef void *GCallback; typedef void *gpointer; typedef void GClosure; typedef void (*GClosureNotify) (gpointer data, GClosure *closure); typedef void GtkStatusIcon; typedef void GtkMenuShell; typedef GtkMenuShell GtkMenu; typedef void GtkMenuItem; typedef void GdkEvent; typedef void GtkTextBuffer; typedef void GtkTextTagTable; typedef void GtkContainer; typedef void GtkLabel; typedef void GtkHeaderBar; typedef void GdkWindow; typedef void GdkDevice; typedef int gboolean; typedef int gint; typedef char gchar; typedef long glong; typedef unsigned long gulong; typedef unsigned long guint32; typedef unsigned int guint; typedef long long gint64; typedef unsigned long long guint64; typedef float gfloat; typedef double gdouble; typedef char gint8; typedef short gint16; typedef enum { GTK_WINDOW_TOPLEVEL = 0 } GtkWindowType; typedef enum { G_APPLICATION_FLAGS_NONE = 0, G_APPLICATION_DEFAULT_FLAGS = 0, G_APPLICATION_IS_SERVICE = 1, G_APPLICATION_IS_LAUNCHER = 2, G_APPLICATION_HANDLES_OPEN = 4, G_APPLICATION_HANDLES_COMMAND_LINE = 8, G_APPLICATION_SEND_ENVIRONMENT = 16, G_APPLICATION_NON_UNIQUE = 32, G_APPLICATION_CAN_OVERRIDE_APP_ID = 64, G_APPLICATION_ALLOW_REPLACEMENT = 128, G_APPLICATION_REPLACE = 256 } GApplicationFlags; typedef enum { G_CONNECT_DEFAULT = 0, G_CONNECT_AFTER = 1, G_CONNECT_SWAPPED = 2 } GConnectFlags; typedef enum { GDK_GRAVITY_NORTH_WEST = 1, GDK_GRAVITY_NORTH, GDK_GRAVITY_NORTH_EAST, GDK_GRAVITY_WEST, GDK_GRAVITY_CENTER, GDK_GRAVITY_EAST, GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_SOUTH, GDK_GRAVITY_SOUTH_EAST, GDK_GRAVITY_STATIC } GdkGravity; typedef enum { GTK_ORIENTATION_HORIZONTAL = 0, GTK_ORIENTATION_VERTICAL = 1 } GtkOrientation; typedef enum { PANGO_ELLIPSIZE_NONE = 0, PANGO_ELLIPSIZE_START = 1, PANGO_ELLIPSIZE_MIDDLE = 2, PANGO_ELLIPSIZE_END = 3 } PangoEllipsizeMode; struct GdkRectangle { int x; int y; int width; int height; }; typedef struct GdkRectangle GtkAllocation; #define G_VALUE_INIT { 0, { { 0 } } } typedef void *GType; typedef struct _GValue { /*< private >*/ GType g_type; /* public for GTypeValueTable methods */ union { gint v_int; guint v_uint; glong v_long; gulong v_ulong; gint64 v_int64; guint64 v_uint64; gfloat v_float; gdouble v_double; gpointer v_pointer; } data[2]; } GValue; typedef struct _GtkTextIter { /* GtkTextIter is an opaque datatype; ignore all these fields. * Initialize the iter with gtk_text_buffer_get_iter_* * functions */ /*< private >*/ gpointer dummy1; gpointer dummy2; gint dummy3; gint dummy4; gint dummy5; gint dummy6; gint dummy7; gint dummy8; gpointer dummy9; gpointer dummy10; gint dummy11; gint dummy12; /* padding */ gint dummy13; gpointer dummy14; } GtkTextIter; typedef enum { GDK_DELETE, GDK_MOTION_NOTIFY, GDK_BUTTON_PRESS, GDK_BUTTON_RELEASE, GDK_KEY_PRESS, GDK_KEY_RELEASE, GDK_ENTER_NOTIFY, GDK_LEAVE_NOTIFY, GDK_FOCUS_CHANGE, GDK_PROXIMITY_IN, GDK_PROXIMITY_OUT, GDK_DRAG_ENTER, GDK_DRAG_LEAVE, GDK_DRAG_MOTION, GDK_DROP_START, GDK_SCROLL, GDK_GRAB_BROKEN, GDK_TOUCH_BEGIN, GDK_TOUCH_UPDATE, GDK_TOUCH_END, GDK_TOUCH_CANCEL, GDK_TOUCHPAD_SWIPE, GDK_TOUCHPAD_PINCH, GDK_PAD_BUTTON_PRESS, GDK_PAD_BUTTON_RELEASE, GDK_PAD_RING, GDK_PAD_STRIP, GDK_PAD_GROUP_MODE, GDK_TOUCHPAD_HOLD, GDK_PAD_DIAL, GDK_EVENT_LAST /* helper variable for decls */ } GdkEventType; typedef struct _GdkEventButton { GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; gdouble x; gdouble y; gdouble *axes; guint state; guint button; GdkDevice *device; gdouble x_root, y_root; } GdkEventButton; typedef struct _GdkEventMotion { GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; gdouble x; gdouble y; gdouble *axes; guint state; gint16 is_hint; GdkDevice *device; gdouble x_root, y_root; } GdkEventMotion; typedef enum { GDK_EXPOSURE_MASK = 1 << 1, GDK_POINTER_MOTION_MASK = 1 << 2, GDK_POINTER_MOTION_HINT_MASK = 1 << 3, GDK_BUTTON_MOTION_MASK = 1 << 4, GDK_BUTTON1_MOTION_MASK = 1 << 5, GDK_BUTTON2_MOTION_MASK = 1 << 6, GDK_BUTTON3_MOTION_MASK = 1 << 7, GDK_BUTTON_PRESS_MASK = 1 << 8, GDK_BUTTON_RELEASE_MASK = 1 << 9, GDK_KEY_PRESS_MASK = 1 << 10, GDK_KEY_RELEASE_MASK = 1 << 11, GDK_ENTER_NOTIFY_MASK = 1 << 12, GDK_LEAVE_NOTIFY_MASK = 1 << 13, GDK_FOCUS_CHANGE_MASK = 1 << 14, GDK_STRUCTURE_MASK = 1 << 15, GDK_PROPERTY_CHANGE_MASK = 1 << 16, GDK_VISIBILITY_NOTIFY_MASK = 1 << 17, GDK_PROXIMITY_IN_MASK = 1 << 18, GDK_PROXIMITY_OUT_MASK = 1 << 19, GDK_SUBSTRUCTURE_MASK = 1 << 20, GDK_SCROLL_MASK = 1 << 21, GDK_TOUCH_MASK = 1 << 22, GDK_SMOOTH_SCROLL_MASK = 1 << 23, GDK_TOUCHPAD_GESTURE_MASK = 1 << 24, GDK_TABLET_PAD_MASK = 1 << 25, GDK_ALL_EVENTS_MASK = 0x3FFFFFE } GdkEventMask; #define G_TYPE_FUNDAMENTAL_SHIFT (2) #define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT)) #define G_TYPE_INT G_TYPE_MAKE_FUNDAMENTAL (6) #endif DECL(GtkApplication *, gtk_application_new, (const char *name, GApplicationFlags flags)) DECL(int, g_application_run, (GApplication* application, int argc, char** argv)) DECL(GtkWidget*, gtk_application_window_new, ( GtkApplication* application )) DECL(GtkWidget *, gtk_window_new, (GtkWindowType)) DECL(void, gtk_window_close, (GtkWindow *)) DECL(void, gtk_window_set_decorated, (GtkWindow* window, gboolean setting )) DECL(void, gtk_widget_show_all, (GtkWindow *window)) DECL(void, gtk_widget_hide, (GtkWidget* widget )) DECL(GtkWidget*, gtk_event_box_new, (void)) DECL(void, gtk_window_get_size, (GtkWindow *win, int *width, int *height)) DECL(void, gtk_window_resize, (GtkWindow* window, gint width, gint height)) DECL(void, gtk_window_set_default_size, (GtkWindow *window, gint width, gint height)) DECL(void, gtk_window_get_position, (GtkWindow* window, gint* root_x, gint* root_y)) DECL(void, gtk_window_move, (GtkWindow* window, gint x, gint y)) DECL(void, gtk_window_set_resizable, (GtkWindow* window, gboolean resizable)) DECL(GdkWindow *, gtk_widget_get_window, (GtkWidget *w)); DECL(gboolean, gtk_window_get_decorated, (GtkWindow* window)) DECL(void, gdk_window_set_events, (GdkWindow* window, GdkEventMask event_mask )) DECL(void, gtk_window_set_title, (GtkWindow* window, const gchar* title)) DECL(const gchar*, gtk_window_get_title, (GtkWindow* window)) DECL(void, gtk_widget_destroy, (GtkWidget* widget)) DECL(void, gtk_container_add, (GtkContainer* container, GtkWidget* widget)) DECL(gboolean, gtk_widget_is_visible, (GtkWidget* widget)) DECL(GtkWidget*, gtk_label_new, (const char* str)) DECL(void, gtk_label_set_ellipsize, (GtkLabel* label, PangoEllipsizeMode mode)) DECL(void, gtk_label_set_label, (GtkLabel* label, const gchar* str)) DECL(const gchar*, gtk_label_get_text, (GtkLabel* label)) DECL(GtkWidget*, gtk_box_new, (GtkOrientation orientation, gint spacing )) DECL(void, gtk_main, (void)) DECL(void, gtk_main_quit, (void)) DECL(unsigned long, g_signal_connect_data, (GObject *obj, const char *signal, GCallback c_handler, gpointer data, GClosureNotify destroy_data, GConnectFlags connect_flags)) // GObject / GValue DECL(void, g_object_unref, (GObject* object)) DECL(void, g_object_set_property, (GObject* object, const gchar* property_name, const GValue* value)) DECL(GValue*, g_value_init, (GValue* value, GType g_type)) DECL(void, g_value_unset, (GValue* value)) DECL(void, g_value_set_int, (GValue* value, gint v_int)) // Menus DECL(void, gtk_menu_popup_at_pointer, (GtkMenu* menu, const GdkEvent* trigger_event)) DECL(void, gtk_menu_popup_at_widget, (GtkMenu *menu, GtkWidget *widget, GdkGravity widget_anchor, GdkGravity menu_anchor, const GdkEvent *trigger_event)) DECL(GtkMenu *, gtk_menu_new, (void)) DECL(GtkMenuItem *, gtk_menu_item_new, (void)); DECL(GtkMenuItem *, gtk_menu_item_new_with_label, (const gchar *label)); DECL(void, gtk_menu_shell_append, (GtkMenuShell* menu_shell, GtkWidget* child)) DECL(GtkWidget *, gtk_separator_menu_item_new, (void)) // Text Buffer / Widget DECL(GtkTextBuffer*, gtk_text_buffer_new, (GtkTextTagTable* table)) DECL(gchar*, gtk_text_buffer_get_text, (GtkTextBuffer* buffer, const GtkTextIter* start, const GtkTextIter* end, gboolean include_hidden_chars)) DECL(void,gtk_text_buffer_get_start_iter, (GtkTextBuffer* buffer, GtkTextIter* iter)) DECL(void, gtk_text_buffer_get_end_iter, (GtkTextBuffer* buffer, GtkTextIter* iter)) DECL(GtkWidget*, gtk_text_view_new, (void)) DECL(GtkWidget*, gtk_text_view_new_with_buffer, ( GtkTextBuffer* buffer )) DECL(void, gtk_text_buffer_set_text, (GtkTextBuffer* buffer, const gchar* text, gint len )) // Titlebar DECL(GtkWidget*, gtk_header_bar_new, (void)) DECL(void, gtk_header_bar_set_custom_title, (GtkHeaderBar* bar, GtkWidget* title_widget)) // Deprecated in Gtk3 DECL(GtkStatusIcon*, gtk_status_icon_new, (void )) DECL(GtkStatusIcon*, gtk_status_icon_new_from_file, (const gchar* filename)) #define g_signal_connect(instance, signal, c_handler, data) \ g_signal_connect_data(instance, signal, reinterpret_cast(c_handler), data, NULL, G_CONNECT_DEFAULT) #endif // GTK_IMPORTS_H