1 /* 2 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 #ifndef _GTK2_INTERFACE_H 26 #define _GTK2_INTERFACE_H 27 28 #include <stdlib.h> 29 #include <jni.h> 30 #include <X11/X.h> 31 #include "gtk_interface.h" 32 33 #define GTK_HAS_FOCUS (1 << 12) 34 #define GTK_HAS_DEFAULT (1 << 14) 35 36 typedef enum 37 { 38 GTK_WINDOW_TOPLEVEL, 39 GTK_WINDOW_POPUP 40 } GtkWindowType; 41 42 typedef enum 43 { 44 G_PARAM_READABLE = 1 << 0, 45 G_PARAM_WRITABLE = 1 << 1, 46 G_PARAM_CONSTRUCT = 1 << 2, 47 G_PARAM_CONSTRUCT_ONLY = 1 << 3, 48 G_PARAM_LAX_VALIDATION = 1 << 4, 49 G_PARAM_PRIVATE = 1 << 5 50 } GParamFlags; 51 52 /* We define all structure pointers to be void* */ 53 typedef void GMainContext; 54 typedef void GVfs; 55 56 typedef void GdkColormap; 57 typedef void GdkDrawable; 58 typedef void GdkGC; 59 typedef void GdkPixbuf; 60 typedef void GdkPixmap; 61 62 typedef void GtkFixed; 63 typedef void GtkMenuItem; 64 typedef void GtkMenuShell; 65 typedef void GtkWidgetClass; 66 typedef void PangoFontDescription; 67 typedef void GtkSettings; 68 69 /* Some real structures */ 70 typedef struct 71 { 72 guint32 pixel; 73 guint16 red; 74 guint16 green; 75 guint16 blue; 76 } GdkColor; 77 78 typedef struct { 79 gint fd; 80 gushort events; 81 gushort revents; 82 } GPollFD; 83 84 typedef struct { 85 gint x; 86 gint y; 87 gint width; 88 gint height; 89 } GdkRectangle; 90 91 typedef struct { 92 gint x; 93 gint y; 94 gint width; 95 gint height; 96 } GtkAllocation; 97 98 typedef struct { 99 gint width; 100 gint height; 101 } GtkRequisition; 102 103 typedef struct { 104 GtkWidgetClass *g_class; 105 } GTypeInstance; 106 107 typedef struct { 108 gint left; 109 gint right; 110 gint top; 111 gint bottom; 112 } GtkBorder; 113 114 /****************************************************** 115 * FIXME: it is more safe to include gtk headers for 116 * the precise type definition of GType and other 117 * structures. This is a place where getting rid of gtk 118 * headers may be dangerous. 119 ******************************************************/ 120 121 typedef struct 122 { 123 GType g_type; 124 125 union { 126 gint v_int; 127 guint v_uint; 128 glong v_long; 129 gulong v_ulong; 130 gint64 v_int64; 131 guint64 v_uint64; 132 gfloat v_float; 133 gdouble v_double; 134 gpointer v_pointer; 135 } data[2]; 136 } GValue; 137 138 typedef struct 139 { 140 GTypeInstance g_type_instance; 141 142 gchar *name; 143 GParamFlags flags; 144 GType value_type; 145 GType owner_type; 146 } GParamSpec; 147 148 typedef struct { 149 GTypeInstance g_type_instance; 150 guint ref_count; 151 void *qdata; 152 } GObject; 153 154 typedef struct { 155 GObject parent_instance; 156 guint32 flags; 157 } GtkObject; 158 159 typedef struct 160 { 161 GObject parent_instance; 162 163 GdkColor fg[5]; 164 GdkColor bg[5]; 165 GdkColor light[5]; 166 GdkColor dark[5]; 167 GdkColor mid[5]; 168 GdkColor text[5]; 169 GdkColor base[5]; 170 GdkColor text_aa[5]; /* Halfway between text/base */ 171 172 GdkColor black; 173 GdkColor white; 174 PangoFontDescription *font_desc; 175 176 gint xthickness; 177 gint ythickness; 178 179 GdkGC *fg_gc[5]; 180 GdkGC *bg_gc[5]; 181 GdkGC *light_gc[5]; 182 GdkGC *dark_gc[5]; 183 GdkGC *mid_gc[5]; 184 GdkGC *text_gc[5]; 185 GdkGC *base_gc[5]; 186 GdkGC *text_aa_gc[5]; 187 GdkGC *black_gc; 188 GdkGC *white_gc; 189 190 GdkPixmap *bg_pixmap[5]; 191 } GtkStyle; 192 193 typedef struct _GtkWidget GtkWidget; 194 struct _GtkWidget 195 { 196 GtkObject object; 197 guint16 private_flags; 198 guint8 state; 199 guint8 saved_state; 200 gchar *name; 201 GtkStyle *style; 202 GtkRequisition requisition; 203 GtkAllocation allocation; 204 GdkWindow *window; 205 GtkWidget *parent; 206 }; 207 208 typedef struct 209 { 210 GtkWidget widget; 211 212 gfloat xalign; 213 gfloat yalign; 214 215 guint16 xpad; 216 guint16 ypad; 217 } GtkMisc; 218 219 typedef struct { 220 GtkWidget widget; 221 GtkWidget *focus_child; 222 guint border_width : 16; 223 guint need_resize : 1; 224 guint resize_mode : 2; 225 guint reallocate_redraws : 1; 226 guint has_focus_chain : 1; 227 } GtkContainer; 228 229 typedef struct { 230 GtkContainer container; 231 GtkWidget *child; 232 } GtkBin; 233 234 typedef struct { 235 GtkBin bin; 236 GdkWindow *event_window; 237 gchar *label_text; 238 guint activate_timeout; 239 guint constructed : 1; 240 guint in_button : 1; 241 guint button_down : 1; 242 guint relief : 2; 243 guint use_underline : 1; 244 guint use_stock : 1; 245 guint depressed : 1; 246 guint depress_on_activate : 1; 247 guint focus_on_click : 1; 248 } GtkButton; 249 250 typedef struct { 251 GtkButton button; 252 guint active : 1; 253 guint draw_indicator : 1; 254 guint inconsistent : 1; 255 } GtkToggleButton; 256 257 typedef struct _GtkAdjustment GtkAdjustment; 258 struct _GtkAdjustment 259 { 260 GtkObject parent_instance; 261 262 gdouble lower; 263 gdouble upper; 264 gdouble value; 265 gdouble step_increment; 266 gdouble page_increment; 267 gdouble page_size; 268 }; 269 270 typedef enum 271 { 272 GTK_UPDATE_CONTINUOUS, 273 GTK_UPDATE_DISCONTINUOUS, 274 GTK_UPDATE_DELAYED 275 } GtkUpdateType; 276 277 typedef struct _GtkRange GtkRange; 278 struct _GtkRange 279 { 280 GtkWidget widget; 281 GtkAdjustment *adjustment; 282 GtkUpdateType update_policy; 283 guint inverted : 1; 284 /*< protected >*/ 285 guint flippable : 1; 286 guint has_stepper_a : 1; 287 guint has_stepper_b : 1; 288 guint has_stepper_c : 1; 289 guint has_stepper_d : 1; 290 guint need_recalc : 1; 291 guint slider_size_fixed : 1; 292 gint min_slider_size; 293 GtkOrientation orientation; 294 GdkRectangle range_rect; 295 gint slider_start, slider_end; 296 gint round_digits; 297 /*< private >*/ 298 guint trough_click_forward : 1; 299 guint update_pending : 1; 300 /*GtkRangeLayout * */ void *layout; 301 /*GtkRangeStepTimer * */ void* timer; 302 gint slide_initial_slider_position; 303 gint slide_initial_coordinate; 304 guint update_timeout_id; 305 GdkWindow *event_window; 306 }; 307 308 typedef struct _GtkProgressBar GtkProgressBar; 309 310 typedef enum 311 { 312 GTK_PROGRESS_CONTINUOUS, 313 GTK_PROGRESS_DISCRETE 314 } GtkProgressBarStyle; 315 316 typedef enum 317 { 318 GTK_PROGRESS_LEFT_TO_RIGHT, 319 GTK_PROGRESS_RIGHT_TO_LEFT, 320 GTK_PROGRESS_BOTTOM_TO_TOP, 321 GTK_PROGRESS_TOP_TO_BOTTOM 322 } GtkProgressBarOrientation; 323 324 typedef struct _GtkProgress GtkProgress; 325 326 struct _GtkProgress 327 { 328 GtkWidget widget; 329 GtkAdjustment *adjustment; 330 GdkPixmap *offscreen_pixmap; 331 gchar *format; 332 gfloat x_align; 333 gfloat y_align; 334 guint show_text : 1; 335 guint activity_mode : 1; 336 guint use_text_format : 1; 337 }; 338 339 struct _GtkProgressBar 340 { 341 GtkProgress progress; 342 GtkProgressBarStyle bar_style; 343 GtkProgressBarOrientation orientation; 344 guint blocks; 345 gint in_block; 346 gint activity_pos; 347 guint activity_step; 348 guint activity_blocks; 349 gdouble pulse_fraction; 350 guint activity_dir : 1; 351 guint ellipsize : 3; 352 }; 353 354 /** 355 * Returns : 356 * NULL if the GLib library is compatible with the given version, or a string 357 * describing the version mismatch. 358 * Please note that the glib_check_version() is available since 2.6, 359 * so you should use GLIB_CHECK_VERSION macro instead. 360 */ 361 static gchar* (*fp_glib_check_version)(guint required_major, guint required_minor, 362 guint required_micro); 363 364 /** 365 * Returns : 366 * TRUE if the GLib library is compatible with the given version 367 */ 368 #define GLIB_CHECK_VERSION(major, minor, micro) \ 369 (fp_glib_check_version && fp_glib_check_version(major, minor, micro) == NULL) 370 371 /** 372 * Returns : 373 * NULL if the GTK+ library is compatible with the given version, or a string 374 * describing the version mismatch. 375 */ 376 static gchar* (*fp_gtk_check_version)(guint required_major, guint required_minor, 377 guint required_micro); 378 379 static void gtk2_init(GtkApi* gtk); 380 381 static void (*fp_g_free)(gpointer mem); 382 static void (*fp_g_object_unref)(gpointer object); 383 static GdkWindow *(*fp_gdk_get_default_root_window) (void); 384 385 static int (*fp_gdk_pixbuf_get_bits_per_sample)(const GdkPixbuf *pixbuf); 386 static guchar *(*fp_gdk_pixbuf_get_pixels)(const GdkPixbuf *pixbuf); 387 static gboolean (*fp_gdk_pixbuf_get_has_alpha)(const GdkPixbuf *pixbuf); 388 static int (*fp_gdk_pixbuf_get_height)(const GdkPixbuf *pixbuf); 389 static int (*fp_gdk_pixbuf_get_n_channels)(const GdkPixbuf *pixbuf); 390 static int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf); 391 static int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf); 392 static GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error); 393 static GdkColorspace (*fp_gdk_pixbuf_get_colorspace)(const GdkPixbuf *pixbuf); 394 395 static GdkPixbuf *(*fp_gdk_pixbuf_get_from_drawable)(GdkPixbuf *dest, 396 GdkDrawable *src, GdkColormap *cmap, int src_x, int src_y, 397 int dest_x, int dest_y, int width, int height); 398 static GdkPixbuf *(*fp_gdk_pixbuf_scale_simple)(GdkPixbuf *src, 399 int dest_width, int dest_heigh, GdkInterpType interp_type); 400 401 402 static void (*fp_gtk_widget_destroy)(void *widget); 403 static void (*fp_gtk_window_present)(GtkWindow *window); 404 static void (*fp_gtk_window_move)(GtkWindow *window, gint x, gint y); 405 static void (*fp_gtk_window_resize)(GtkWindow *window, gint width, gint height); 406 407 /** 408 * Function Pointers for GtkFileChooser 409 */ 410 static gchar* (*fp_gtk_file_chooser_get_filename)(GtkFileChooser *chooser); 411 static void (*fp_gtk_widget_hide)(void *widget); 412 static void (*fp_gtk_main_quit)(void); 413 static void* (*fp_gtk_file_chooser_dialog_new)(const gchar *title, 414 GtkWindow *parent, GtkFileChooserAction action, 415 const gchar *first_button_text, ...); 416 static gboolean (*fp_gtk_file_chooser_set_current_folder)(GtkFileChooser *chooser, 417 const gchar *filename); 418 static gboolean (*fp_gtk_file_chooser_set_filename)(GtkFileChooser *chooser, 419 const char *filename); 420 static void (*fp_gtk_file_chooser_set_current_name)(GtkFileChooser *chooser, 421 const gchar *name); 422 static void (*fp_gtk_file_filter_add_custom)(GtkFileFilter *filter, 423 GtkFileFilterFlags needed, GtkFileFilterFunc func, gpointer data, 424 GDestroyNotify notify); 425 static void (*fp_gtk_file_chooser_set_filter)(GtkFileChooser *chooser, 426 GtkFileFilter *filter); 427 static GType (*fp_gtk_file_chooser_get_type)(void); 428 static GtkFileFilter* (*fp_gtk_file_filter_new)(void); 429 static void (*fp_gtk_file_chooser_set_do_overwrite_confirmation)( 430 GtkFileChooser *chooser, gboolean do_overwrite_confirmation); 431 static void (*fp_gtk_file_chooser_set_select_multiple)( 432 GtkFileChooser *chooser, gboolean select_multiple); 433 static gchar* (*fp_gtk_file_chooser_get_current_folder)(GtkFileChooser *chooser); 434 static GSList* (*fp_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser); 435 static guint (*fp_gtk_g_slist_length)(GSList *list); 436 static gulong (*fp_g_signal_connect_data)(gpointer instance, 437 const gchar *detailed_signal, GCallback c_handler, gpointer data, 438 GClosureNotify destroy_data, GConnectFlags connect_flags); 439 static void (*fp_gtk_widget_show)(void *widget); 440 static void (*fp_gtk_main)(void); 441 static guint (*fp_gtk_main_level)(void); 442 static gchar* (*fp_g_path_get_dirname) (const gchar *file_name); 443 static XID (*fp_gdk_x11_drawable_get_xid) (GdkWindow *drawable); 444 445 static GList* (*fp_g_list_append) (GList *list, gpointer data); 446 static void (*fp_g_list_free) (GList *list); 447 static void (*fp_g_list_free_full) (GList *list, GDestroyNotify free_func); 448 449 static gboolean (*fp_gtk_show_uri)(GdkScreen *screen, const gchar *uri, 450 guint32 timestamp, GError **error); 451 452 #endif /* !_GTK2_INTERFACE_H */