aboutsummaryrefslogblamecommitdiffstats
path: root/e-util/gtk-compat.h
blob: f67a9e2c8b635d33fa6e3ebbd34b29bfeb82a42c (plain) (tree)
1
2
3
4
5
6
7




                        

                                         




                                                                           





                                                                             
                                                                
                                                           




















                                                                                 


















                                                                       

      

                                                             












































                                                                                                                                                      




                                             


                                                          



                                                            





















                                                                           
                                     
                 

                                                                  
                 
                                                      

                                                                                    
                                             










                                                                          
                             
#ifndef __GTK_COMPAT_H__
#define __GTK_COMPAT_H__

#include <gtk/gtk.h>

/* Provide a GTK+ compatibility layer. */

#if !GTK_CHECK_VERSION (2,91,0)  /* approximately  */
#define gtk_widget_get_preferred_size(widget, minimum_size, natural_size) \
    (gtk_widget_size_request ((widget), ((minimum_size))))
#endif

#if !GTK_CHECK_VERSION (2,23,0)
#define gtk_combo_box_text_new          gtk_combo_box_new_text
#define gtk_combo_box_text_append_text      gtk_combo_box_append_text
#define gtk_combo_box_text_prepend_text     gtk_combo_box_prepend_text
#define gtk_combo_box_text_get_active_text  gtk_combo_box_get_active_text
#define GTK_COMBO_BOX_TEXT          GTK_COMBO_BOX
#define GTK_IS_COMBO_BOX_TEXT           GTK_IS_COMBO_BOX
#define GtkComboBoxText             GtkComboBox

/* The below can be used only once in sources */
#define ENSURE_GTK_COMBO_BOX_TEXT_TYPE                      \
    GType gtk_combo_box_text_get_type (void);               \
    typedef struct _GtkComboBoxText GtkComboBoxText;            \
    typedef struct _GtkComboBoxTextClass GtkComboBoxTextClass;      \
                                        \
    struct _GtkComboBoxText {                       \
        GtkComboBox parent;                     \
    };                                  \
                                        \
    struct _GtkComboBoxTextClass {                      \
        GtkComboBoxClass parent_class;                  \
    };                                  \
                                        \
                                        \
    G_DEFINE_TYPE (GtkComboBoxText, gtk_combo_box_text, GTK_TYPE_COMBO_BOX) \
                                        \
    static void gtk_combo_box_text_init (GtkComboBoxText *cbt) {}       \
    static void gtk_combo_box_text_class_init (GtkComboBoxTextClass *kl) {}

static inline gint
gdk_window_get_width (GdkWindow *window)
{
    gint width, height;

    gdk_drawable_get_size (GDK_DRAWABLE (window), &width, &height);

    return width;
}

static inline gint
gdk_window_get_height (GdkWindow *window)
{
    gint width, height;

    gdk_drawable_get_size (GDK_DRAWABLE (window), &width, &height);

    return height;
}
#endif

#if GTK_CHECK_VERSION (2,23,0)
#define GTK_COMBO_BOX_ENTRY         GTK_COMBO_BOX

#define ENSURE_GTK_COMBO_BOX_ENTRY_TYPE                     \
    GType gtk_combo_box_entry_get_type (void);              \
    typedef struct _GtkComboBoxEntry GtkComboBoxEntry;          \
    typedef struct _GtkComboBoxEntryClass GtkComboBoxEntryClass;        \
                                        \
    struct _GtkComboBoxEntry {                      \
        GtkComboBoxText parent;                     \
    };                                  \
                                        \
    struct _GtkComboBoxEntryClass {                     \
        GtkComboBoxTextClass parent_class;              \
    };                                  \
                                        \
    G_DEFINE_TYPE (GtkComboBoxEntry, gtk_combo_box_entry, GTK_TYPE_COMBO_BOX_TEXT)\
                                        \
    static GObject *                            \
    gtk_combo_box_entry_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) \
    {                                   \
        GObjectConstructParam *params = g_new0 (GObjectConstructParam, n_construct_properties + 1);\
        GValue val = {0};                       \
        GObject *res;                           \
        gint ii;                            \
                                        \
        for (ii = 0; ii < n_construct_properties; ii++) {       \
            params[ii] = construct_properties[ii];          \
        }                               \
                                        \
        g_value_init (&val, G_TYPE_BOOLEAN);                \
        g_value_set_boolean (&val, TRUE);               \
                                        \
        params[n_construct_properties].pspec = g_object_class_find_property (G_OBJECT_CLASS (gtk_combo_box_entry_parent_class), "has-entry");\
        params[n_construct_properties].value = &val;            \
                                        \
        res = G_OBJECT_CLASS (gtk_combo_box_entry_parent_class)->constructor (type, n_construct_properties + 1, params);\
                                        \
        g_free (params);                        \
        return res;                         \
    }                                   \
    static void gtk_combo_box_entry_init (GtkComboBoxEntry *cbt) {}     \
    static void gtk_combo_box_entry_class_init (GtkComboBoxEntryClass *kl)  \
    {                                   \
        GObjectClass *object_class = G_OBJECT_CLASS (kl);       \
        object_class->constructor = gtk_combo_box_entry_constructor;    \
    }
#else
#define gtk_combo_box_set_entry_text_column \
    gtk_combo_box_entry_set_text_column
#endif

#if GTK_CHECK_VERSION (2,90,5)

/* Recreate GdkRegion until we drop GTK2 compatibility. */
#define GdkOverlapType cairo_region_overlap_t
#define GDK_OVERLAP_RECTANGLE_IN   CAIRO_REGION_OVERLAP_IN
#define GDK_OVERLAP_RECTANGLE_OUT  CAIRO_REGION_OVERLAP_OUT
#define GDK_OVERLAP_RECTANGLE_PART CAIRO_REGION_OVERLAP_PART

#define GdkRegion cairo_region_t

#define gdk_region_new() \
    (cairo_region_create ())

#define gdk_region_destroy(region) \
    (cairo_region_destroy (region))

#define gdk_region_intersect(source1, source2) \
    (cairo_region_intersect ((source1), (source2)))

#define gdk_region_rect_in(region, rectangle) \
    (cairo_region_contains_rectangle ((region), (rectangle)))

#define gdk_region_rectangle(rectangle) \
    (((rectangle)->width <= 0 || (rectangle)->height <= 0) ? \
    cairo_region_create () : cairo_region_create_rectangle (rectangle))

#define gdk_region_get_rectangles(region, rectangles, n_rectangles) \
    G_STMT_START { \
        GdkRectangle *__rects; \
        gint __i, __nrects; \
        \
        __nrects = cairo_region_num_rectangles (region); \
        __rects = g_new (GdkRectangle, __nrects); \
        \
        for (__i = 0; __i < __nrects; __i++) \
            cairo_region_get_rectangle ((region), __i, &__rects[__i]); \
        \
        *(n_rectangles) = __nrects; \
        *(rectangles) = __rects; \
    } G_STMT_END

#define gdk_region_union_with_rect(region, rect) \
    G_STMT_START { \
        if ((rect)->width > 0 && (rect)->height > 0) \
            cairo_region_union_rectangle ((region), (rect)); \
    } G_STMT_END

#endif

#endif /* __GTK_COMPAT_H__ */