1 /*
   2  * Copyright (c) 2005, 2013, 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 
  31 #define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  32 #define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  33 #define GTK_TYPE_FILE_CHOOSER             (fp_gtk_file_chooser_get_type ())
  34 #define GTK_FILE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER, GtkFileChooser))
  35 #define fp_g_signal_connect(instance, detailed_signal, c_handler, data) \
  36     fp_g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  37 #define G_CALLBACK(f) ((GCallback) (f))
  38 #define G_TYPE_FUNDAMENTAL_SHIFT (2)
  39 #define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  40 #define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20)
  41 #define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  42 #define GTK_STOCK_CANCEL           "gtk-cancel"
  43 #define GTK_STOCK_SAVE             "gtk-save"
  44 #define GTK_STOCK_OPEN             "gtk-open"
  45 #define GDK_CURRENT_TIME           0L
  46 
  47 typedef enum _WidgetType
  48 {
  49     BUTTON,                     /* GtkButton */
  50     CHECK_BOX,                  /* GtkCheckButton */
  51     CHECK_BOX_MENU_ITEM,        /* GtkCheckMenuItem */
  52     COLOR_CHOOSER,              /* GtkColorSelectionDialog */
  53     COMBO_BOX,                  /* GtkComboBox */
  54     COMBO_BOX_ARROW_BUTTON,     /* GtkComboBoxEntry */
  55     COMBO_BOX_TEXT_FIELD,       /* GtkComboBoxEntry */
  56     DESKTOP_ICON,               /* GtkLabel */
  57     DESKTOP_PANE,               /* GtkContainer */
  58     EDITOR_PANE,                /* GtkTextView */
  59     FORMATTED_TEXT_FIELD,       /* GtkEntry */
  60     HANDLE_BOX,                 /* GtkHandleBox */
  61     HPROGRESS_BAR,              /* GtkProgressBar */
  62     HSCROLL_BAR,                /* GtkHScrollbar */
  63     HSCROLL_BAR_BUTTON_LEFT,    /* GtkHScrollbar */
  64     HSCROLL_BAR_BUTTON_RIGHT,   /* GtkHScrollbar */
  65     HSCROLL_BAR_TRACK,          /* GtkHScrollbar */
  66     HSCROLL_BAR_THUMB,          /* GtkHScrollbar */
  67     HSEPARATOR,                 /* GtkHSeparator */
  68     HSLIDER,                    /* GtkHScale */
  69     HSLIDER_TRACK,              /* GtkHScale */
  70     HSLIDER_THUMB,              /* GtkHScale */
  71     HSPLIT_PANE_DIVIDER,        /* GtkHPaned */
  72     INTERNAL_FRAME,             /* GtkWindow */
  73     INTERNAL_FRAME_TITLE_PANE,  /* GtkLabel */
  74     IMAGE,                      /* GtkImage */
  75     LABEL,                      /* GtkLabel */
  76     LIST,                       /* GtkTreeView */
  77     MENU,                       /* GtkMenu */
  78     MENU_BAR,                   /* GtkMenuBar */
  79     MENU_ITEM,                  /* GtkMenuItem */
  80     MENU_ITEM_ACCELERATOR,      /* GtkLabel */
  81     OPTION_PANE,                /* GtkMessageDialog */
  82     PANEL,                      /* GtkContainer */
  83     PASSWORD_FIELD,             /* GtkEntry */
  84     POPUP_MENU,                 /* GtkMenu */
  85     POPUP_MENU_SEPARATOR,       /* GtkSeparatorMenuItem */
  86     RADIO_BUTTON,               /* GtkRadioButton */
  87     RADIO_BUTTON_MENU_ITEM,     /* GtkRadioMenuItem */
  88     ROOT_PANE,                  /* GtkContainer */
  89     SCROLL_PANE,                /* GtkScrolledWindow */
  90     SPINNER,                    /* GtkSpinButton */
  91     SPINNER_ARROW_BUTTON,       /* GtkSpinButton */
  92     SPINNER_TEXT_FIELD,         /* GtkSpinButton */
  93     SPLIT_PANE,                 /* GtkPaned */
  94     TABBED_PANE,                /* GtkNotebook */
  95     TABBED_PANE_TAB_AREA,       /* GtkNotebook */
  96     TABBED_PANE_CONTENT,        /* GtkNotebook */
  97     TABBED_PANE_TAB,            /* GtkNotebook */
  98     TABLE,                      /* GtkTreeView */
  99     TABLE_HEADER,               /* GtkButton */
 100     TEXT_AREA,                  /* GtkTextView */
 101     TEXT_FIELD,                 /* GtkEntry */
 102     TEXT_PANE,                  /* GtkTextView */
 103     TITLED_BORDER,              /* GtkFrame */
 104     TOGGLE_BUTTON,              /* GtkToggleButton */
 105     TOOL_BAR,                   /* GtkToolbar */
 106     TOOL_BAR_DRAG_WINDOW,       /* GtkToolbar */
 107     TOOL_BAR_SEPARATOR,         /* GtkSeparatorToolItem */
 108     TOOL_TIP,                   /* GtkWindow */
 109     TREE,                       /* GtkTreeView */
 110     TREE_CELL,                  /* GtkTreeView */
 111     VIEWPORT,                   /* GtkViewport */
 112     VPROGRESS_BAR,              /* GtkProgressBar */
 113     VSCROLL_BAR,                /* GtkVScrollbar */
 114     VSCROLL_BAR_BUTTON_UP,      /* GtkVScrollbar */
 115     VSCROLL_BAR_BUTTON_DOWN,    /* GtkVScrollbar */
 116     VSCROLL_BAR_TRACK,          /* GtkVScrollbar */
 117     VSCROLL_BAR_THUMB,          /* GtkVScrollbar */
 118     VSEPARATOR,                 /* GtkVSeparator */
 119     VSLIDER,                    /* GtkVScale */
 120     VSLIDER_TRACK,              /* GtkVScale */
 121     VSLIDER_THUMB,              /* GtkVScale */
 122     VSPLIT_PANE_DIVIDER,        /* GtkVPaned */
 123     WIDGET_TYPE_SIZE
 124 } WidgetType;
 125 
 126 typedef enum _ColorType
 127 {
 128     FOREGROUND,
 129     BACKGROUND,
 130     TEXT_FOREGROUND,
 131     TEXT_BACKGROUND,
 132     FOCUS,
 133     LIGHT,
 134     DARK,
 135     MID,
 136     BLACK,
 137     WHITE
 138 } ColorType;
 139 
 140 typedef enum _Setting
 141 {
 142     GTK_FONT_NAME,
 143     GTK_ICON_SIZES
 144 } Setting;
 145 
 146 /* GTK types, here to eliminate need for GTK headers at compile time */
 147 
 148 #ifndef FALSE
 149 #define FALSE           (0)
 150 #define TRUE            (!FALSE)
 151 #endif
 152 
 153 #define GTK_HAS_FOCUS   (1 << 12)
 154 #define GTK_HAS_DEFAULT (1 << 14)
 155 
 156 
 157 /* basic types */
 158 typedef char    gchar;
 159 typedef short   gshort;
 160 typedef int     gint;
 161 typedef long    glong;
 162 typedef float   gfloat;
 163 typedef double  gdouble;
 164 typedef void*   gpointer;
 165 typedef gint    gboolean;
 166 
 167 typedef signed char  gint8;
 168 typedef signed short gint16;
 169 typedef signed int   gint32;
 170 
 171 typedef unsigned char  guchar;
 172 typedef unsigned char  guint8;
 173 typedef unsigned short gushort;
 174 typedef unsigned short guint16;
 175 typedef unsigned int   guint;
 176 typedef unsigned int   guint32;
 177 typedef unsigned int   gsize;
 178 typedef unsigned long  gulong;
 179 
 180 typedef signed long long   gint64;
 181 typedef unsigned long long guint64;
 182 
 183 /* enumerated constants */
 184 typedef enum
 185 {
 186   GTK_ARROW_UP,
 187   GTK_ARROW_DOWN,
 188   GTK_ARROW_LEFT,
 189   GTK_ARROW_RIGHT
 190 } GtkArrowType;
 191 
 192 typedef enum {
 193   GDK_COLORSPACE_RGB
 194 } GdkColorspace;
 195 
 196 typedef enum
 197 {
 198   GTK_EXPANDER_COLLAPSED,
 199   GTK_EXPANDER_SEMI_COLLAPSED,
 200   GTK_EXPANDER_SEMI_EXPANDED,
 201   GTK_EXPANDER_EXPANDED
 202 } GtkExpanderStyle;
 203 
 204 typedef enum
 205 {
 206   GTK_ICON_SIZE_INVALID,
 207   GTK_ICON_SIZE_MENU,
 208   GTK_ICON_SIZE_SMALL_TOOLBAR,
 209   GTK_ICON_SIZE_LARGE_TOOLBAR,
 210   GTK_ICON_SIZE_BUTTON,
 211   GTK_ICON_SIZE_DND,
 212   GTK_ICON_SIZE_DIALOG
 213 } GtkIconSize;
 214 
 215 typedef enum
 216 {
 217   GTK_ORIENTATION_HORIZONTAL,
 218   GTK_ORIENTATION_VERTICAL
 219 } GtkOrientation;
 220 
 221 typedef enum
 222 {
 223   GTK_POS_LEFT,
 224   GTK_POS_RIGHT,
 225   GTK_POS_TOP,
 226   GTK_POS_BOTTOM
 227 } GtkPositionType;
 228 
 229 typedef enum
 230 {
 231   GTK_SHADOW_NONE,
 232   GTK_SHADOW_IN,
 233   GTK_SHADOW_OUT,
 234   GTK_SHADOW_ETCHED_IN,
 235   GTK_SHADOW_ETCHED_OUT
 236 } GtkShadowType;
 237 
 238 typedef enum
 239 {
 240   GTK_STATE_NORMAL,
 241   GTK_STATE_ACTIVE,
 242   GTK_STATE_PRELIGHT,
 243   GTK_STATE_SELECTED,
 244   GTK_STATE_INSENSITIVE
 245 } GtkStateType;
 246 
 247 typedef enum
 248 {
 249   GTK_TEXT_DIR_NONE,
 250   GTK_TEXT_DIR_LTR,
 251   GTK_TEXT_DIR_RTL
 252 } GtkTextDirection;
 253 
 254 typedef enum
 255 {
 256   GTK_WINDOW_TOPLEVEL,
 257   GTK_WINDOW_POPUP
 258 } GtkWindowType;
 259 
 260 typedef enum
 261 {
 262   G_PARAM_READABLE            = 1 << 0,
 263   G_PARAM_WRITABLE            = 1 << 1,
 264   G_PARAM_CONSTRUCT           = 1 << 2,
 265   G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
 266   G_PARAM_LAX_VALIDATION      = 1 << 4,
 267   G_PARAM_PRIVATE             = 1 << 5
 268 } GParamFlags;
 269 
 270 /* We define all structure pointers to be void* */
 271 typedef void GError;
 272 typedef void GMainContext;
 273 
 274 typedef struct _GSList GSList;
 275 struct _GSList
 276 {
 277   gpointer data;
 278   GSList *next;
 279 };
 280 
 281 typedef void GdkColormap;
 282 typedef void GdkDrawable;
 283 typedef void GdkGC;
 284 typedef void GdkScreen;
 285 typedef void GdkPixbuf;
 286 typedef void GdkPixmap;
 287 typedef void GdkWindow;
 288 
 289 typedef void GtkFixed;
 290 typedef void GtkMenuItem;
 291 typedef void GtkMenuShell;
 292 typedef void GtkWidgetClass;
 293 typedef void PangoFontDescription;
 294 typedef void GtkSettings;
 295 
 296 /* Some real structures */
 297 typedef struct
 298 {
 299   guint32 pixel;
 300   guint16 red;
 301   guint16 green;
 302   guint16 blue;
 303 } GdkColor;
 304 
 305 typedef struct {
 306   gint      fd;
 307   gushort   events;
 308   gushort   revents;
 309 } GPollFD;
 310 
 311 typedef struct {
 312   gint x;
 313   gint y;
 314   gint width;
 315   gint height;
 316 } GdkRectangle;
 317 
 318 typedef struct {
 319   gint x;
 320   gint y;
 321   gint width;
 322   gint height;
 323 } GtkAllocation;
 324 
 325 typedef struct {
 326   gint width;
 327   gint height;
 328 } GtkRequisition;
 329 
 330 typedef struct {
 331   GtkWidgetClass *g_class;
 332 } GTypeInstance;
 333 
 334 typedef struct {
 335   gint left;
 336   gint right;
 337   gint top;
 338   gint bottom;
 339 } GtkBorder;
 340 
 341 /******************************************************
 342  * FIXME: it is more safe to include gtk headers for
 343  * the precise type definition of GType and other
 344  * structures. This is a place where getting rid of gtk
 345  * headers may be dangerous.
 346  ******************************************************/
 347 typedef gulong         GType;
 348 
 349 typedef struct
 350 {
 351   GType         g_type;
 352 
 353   union {
 354     gint        v_int;
 355     guint       v_uint;
 356     glong       v_long;
 357     gulong      v_ulong;
 358     gint64      v_int64;
 359     guint64     v_uint64;
 360     gfloat      v_float;
 361     gdouble     v_double;
 362     gpointer    v_pointer;
 363   } data[2];
 364 } GValue;
 365 
 366 typedef struct
 367 {
 368   GTypeInstance  g_type_instance;
 369 
 370   gchar         *name;
 371   GParamFlags    flags;
 372   GType          value_type;
 373   GType          owner_type;
 374 } GParamSpec;
 375 
 376 typedef struct {
 377   GTypeInstance g_type_instance;
 378   guint         ref_count;
 379   void         *qdata;
 380 } GObject;
 381 
 382 typedef struct {
 383   GObject parent_instance;
 384   guint32 flags;
 385 } GtkObject;
 386 
 387 typedef struct
 388 {
 389   GObject parent_instance;
 390 
 391   GdkColor fg[5];
 392   GdkColor bg[5];
 393   GdkColor light[5];
 394   GdkColor dark[5];
 395   GdkColor mid[5];
 396   GdkColor text[5];
 397   GdkColor base[5];
 398   GdkColor text_aa[5];          /* Halfway between text/base */
 399 
 400   GdkColor black;
 401   GdkColor white;
 402   PangoFontDescription *font_desc;
 403 
 404   gint xthickness;
 405   gint ythickness;
 406 
 407   GdkGC *fg_gc[5];
 408   GdkGC *bg_gc[5];
 409   GdkGC *light_gc[5];
 410   GdkGC *dark_gc[5];
 411   GdkGC *mid_gc[5];
 412   GdkGC *text_gc[5];
 413   GdkGC *base_gc[5];
 414   GdkGC *text_aa_gc[5];
 415   GdkGC *black_gc;
 416   GdkGC *white_gc;
 417 
 418   GdkPixmap *bg_pixmap[5];
 419 } GtkStyle;
 420 
 421 typedef struct _GtkWidget GtkWidget;
 422 struct _GtkWidget
 423 {
 424   GtkObject object;
 425   guint16 private_flags;
 426   guint8 state;
 427   guint8 saved_state;
 428   gchar *name;
 429   GtkStyle *style;
 430   GtkRequisition requisition;
 431   GtkAllocation allocation;
 432   GdkWindow *window;
 433   GtkWidget *parent;
 434 };
 435 
 436 typedef struct
 437 {
 438   GtkWidget widget;
 439 
 440   gfloat xalign;
 441   gfloat yalign;
 442 
 443   guint16 xpad;
 444   guint16 ypad;
 445 } GtkMisc;
 446 
 447 typedef struct {
 448   GtkWidget widget;
 449   GtkWidget *focus_child;
 450   guint border_width : 16;
 451   guint need_resize : 1;
 452   guint resize_mode : 2;
 453   guint reallocate_redraws : 1;
 454   guint has_focus_chain : 1;
 455 } GtkContainer;
 456 
 457 typedef struct {
 458   GtkContainer container;
 459   GtkWidget *child;
 460 } GtkBin;
 461 
 462 typedef struct {
 463   GtkBin bin;
 464   GdkWindow *event_window;
 465   gchar *label_text;
 466   guint activate_timeout;
 467   guint constructed : 1;
 468   guint in_button : 1;
 469   guint button_down : 1;
 470   guint relief : 2;
 471   guint use_underline : 1;
 472   guint use_stock : 1;
 473   guint depressed : 1;
 474   guint depress_on_activate : 1;
 475   guint focus_on_click : 1;
 476 } GtkButton;
 477 
 478 typedef struct {
 479   GtkButton button;
 480   guint active : 1;
 481   guint draw_indicator : 1;
 482   guint inconsistent : 1;
 483 } GtkToggleButton;
 484 
 485 typedef struct _GtkAdjustment GtkAdjustment;
 486 struct _GtkAdjustment
 487 {
 488   GtkObject parent_instance;
 489 
 490   gdouble lower;
 491   gdouble upper;
 492   gdouble value;
 493   gdouble step_increment;
 494   gdouble page_increment;
 495   gdouble page_size;
 496 };
 497 
 498 typedef enum
 499 {
 500   GTK_UPDATE_CONTINUOUS,
 501   GTK_UPDATE_DISCONTINUOUS,
 502   GTK_UPDATE_DELAYED
 503 } GtkUpdateType;
 504 
 505 typedef struct _GtkRange GtkRange;
 506 struct _GtkRange
 507 {
 508   GtkWidget widget;
 509   GtkAdjustment *adjustment;
 510   GtkUpdateType update_policy;
 511   guint inverted : 1;
 512   /*< protected >*/
 513   guint flippable : 1;
 514   guint has_stepper_a : 1;
 515   guint has_stepper_b : 1;
 516   guint has_stepper_c : 1;
 517   guint has_stepper_d : 1;
 518   guint need_recalc : 1;
 519   guint slider_size_fixed : 1;
 520   gint min_slider_size;
 521   GtkOrientation orientation;
 522   GdkRectangle range_rect;
 523   gint slider_start, slider_end;
 524   gint round_digits;
 525   /*< private >*/
 526   guint trough_click_forward : 1;
 527   guint update_pending : 1;
 528   /*GtkRangeLayout * */ void *layout;
 529   /*GtkRangeStepTimer * */ void* timer;
 530   gint slide_initial_slider_position;
 531   gint slide_initial_coordinate;
 532   guint update_timeout_id;
 533   GdkWindow *event_window;
 534 };
 535 
 536 typedef struct _GtkProgressBar       GtkProgressBar;
 537 
 538 typedef enum
 539 {
 540   GTK_PROGRESS_CONTINUOUS,
 541   GTK_PROGRESS_DISCRETE
 542 } GtkProgressBarStyle;
 543 
 544 typedef enum
 545 {
 546   GTK_PROGRESS_LEFT_TO_RIGHT,
 547   GTK_PROGRESS_RIGHT_TO_LEFT,
 548   GTK_PROGRESS_BOTTOM_TO_TOP,
 549   GTK_PROGRESS_TOP_TO_BOTTOM
 550 } GtkProgressBarOrientation;
 551 
 552 typedef struct _GtkProgress       GtkProgress;
 553 
 554 struct _GtkProgress
 555 {
 556   GtkWidget widget;
 557   GtkAdjustment *adjustment;
 558   GdkPixmap     *offscreen_pixmap;
 559   gchar         *format;
 560   gfloat         x_align;
 561   gfloat         y_align;
 562   guint          show_text : 1;
 563   guint          activity_mode : 1;
 564   guint          use_text_format : 1;
 565 };
 566 
 567 struct _GtkProgressBar
 568 {
 569   GtkProgress progress;
 570   GtkProgressBarStyle bar_style;
 571   GtkProgressBarOrientation orientation;
 572   guint blocks;
 573   gint  in_block;
 574   gint  activity_pos;
 575   guint activity_step;
 576   guint activity_blocks;
 577   gdouble pulse_fraction;
 578   guint activity_dir : 1;
 579   guint ellipsize : 3;
 580 };
 581 
 582 typedef enum {
 583   GTK_RESPONSE_NONE = -1,
 584   GTK_RESPONSE_REJECT = -2,
 585   GTK_RESPONSE_ACCEPT = -3,
 586   GTK_RESPONSE_DELETE_EVENT = -4,
 587   GTK_RESPONSE_OK = -5,
 588   GTK_RESPONSE_CANCEL = -6,
 589   GTK_RESPONSE_CLOSE = -7,
 590   GTK_RESPONSE_YES = -8,
 591   GTK_RESPONSE_NO = -9,
 592   GTK_RESPONSE_APPLY = -10,
 593   GTK_RESPONSE_HELP = -11
 594 } GtkResponseType;
 595 
 596 typedef struct _GtkWindow GtkWindow;
 597 
 598 typedef struct _GtkFileChooser GtkFileChooser;
 599 
 600 typedef enum {
 601   GTK_FILE_CHOOSER_ACTION_OPEN,
 602   GTK_FILE_CHOOSER_ACTION_SAVE,
 603   GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
 604   GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
 605 } GtkFileChooserAction;
 606 
 607 typedef struct _GtkFileFilter GtkFileFilter;
 608 
 609 typedef enum {
 610   GTK_FILE_FILTER_FILENAME = 1 << 0,
 611   GTK_FILE_FILTER_URI = 1 << 1,
 612   GTK_FILE_FILTER_DISPLAY_NAME = 1 << 2,
 613   GTK_FILE_FILTER_MIME_TYPE = 1 << 3
 614 } GtkFileFilterFlags;
 615 
 616 typedef struct {
 617   GtkFileFilterFlags contains;
 618   const gchar *filename;
 619   const gchar *uri;
 620   const gchar *display_name;
 621   const gchar *mime_type;
 622 } GtkFileFilterInfo;
 623 
 624 typedef gboolean (*GtkFileFilterFunc)(const GtkFileFilterInfo *filter_info,
 625     gpointer data);
 626 
 627 typedef void (*GDestroyNotify)(gpointer data);
 628 
 629 typedef void (*GCallback)(void);
 630 
 631 typedef struct _GClosure GClosure;
 632 
 633 typedef void (*GClosureNotify)(gpointer data, GClosure *closure);
 634 
 635 typedef enum {
 636   G_CONNECT_AFTER = 1 << 0, G_CONNECT_SWAPPED = 1 << 1
 637 } GConnectFlags;
 638 
 639 typedef struct _GThreadFunctions GThreadFunctions;
 640 
 641 /*
 642  * Converts java.lang.String object to UTF-8 character string.
 643  */
 644 const char *getStrFor(JNIEnv *env, jstring value);
 645 
 646 /**
 647  * Returns :
 648  * NULL if the GLib library is compatible with the given version, or a string
 649  * describing the version mismatch.
 650  */
 651 gchar* (*fp_glib_check_version)(guint required_major, guint required_minor,
 652                        guint required_micro);
 653 
 654 /*
 655  * Check whether the gtk2 library is available and meets the minimum
 656  * version requirement.  If the library is already loaded this method has no
 657  * effect and returns success.
 658  * Returns FALSE on failure and TRUE on success.
 659  */
 660 gboolean gtk2_check_version();
 661 
 662 /**
 663  * Returns :
 664  * NULL if the GTK+ library is compatible with the given version, or a string
 665  * describing the version mismatch.
 666  */
 667 gchar* (*fp_gtk_check_version)(guint required_major, guint required_minor,
 668                        guint required_micro);
 669 /*
 670  * Load the gtk2 library.  If the library is already loaded this method has no
 671  * effect and returns success.
 672  * Returns FALSE on failure and TRUE on success.
 673  */
 674 gboolean gtk2_load(JNIEnv *env);
 675 
 676 /*
 677  * Loads fp_gtk_show_uri function pointer. This initialization is
 678  * separated because the function is required only
 679  * for java.awt.Desktop API. The function relies on initialization in
 680  * gtk2_load, so it must be invoked only after a successful gtk2_load
 681  * invocation
 682  */
 683 gboolean gtk2_show_uri_load();
 684 
 685 /*
 686  * Unload the gtk2 library.  If the library is already unloaded this method has
 687  * no effect and returns success.
 688  * Returns FALSE on failure and TRUE on success.
 689  */
 690 gboolean gtk2_unload();
 691 
 692 void gtk2_paint_arrow(WidgetType widget_type, GtkStateType state_type,
 693         GtkShadowType shadow_type, const gchar *detail,
 694         gint x, gint y, gint width, gint height,
 695         GtkArrowType arrow_type, gboolean fill);
 696 void gtk2_paint_box(WidgetType widget_type, GtkStateType state_type,
 697         GtkShadowType shadow_type, const gchar *detail,
 698         gint x, gint y, gint width, gint height,
 699         gint synth_state, GtkTextDirection dir);
 700 void gtk2_paint_box_gap(WidgetType widget_type, GtkStateType state_type,
 701         GtkShadowType shadow_type, const gchar *detail,
 702         gint x, gint y, gint width, gint height,
 703         GtkPositionType gap_side, gint gap_x, gint gap_width);
 704 void gtk2_paint_check(WidgetType widget_type, gint synth_state,
 705         const gchar *detail, gint x, gint y, gint width, gint height);
 706 void gtk2_paint_diamond(WidgetType widget_type, GtkStateType state_type,
 707         GtkShadowType shadow_type, const gchar *detail,
 708         gint x, gint y, gint width, gint height);
 709 void gtk2_paint_expander(WidgetType widget_type, GtkStateType state_type,
 710         const gchar *detail, gint x, gint y, gint width, gint height,
 711         GtkExpanderStyle expander_style);
 712 void gtk2_paint_extension(WidgetType widget_type, GtkStateType state_type,
 713         GtkShadowType shadow_type, const gchar *detail,
 714         gint x, gint y, gint width, gint height, GtkPositionType gap_side);
 715 void gtk2_paint_flat_box(WidgetType widget_type, GtkStateType state_type,
 716         GtkShadowType shadow_type, const gchar *detail,
 717         gint x, gint y, gint width, gint height, gboolean has_focus);
 718 void gtk2_paint_focus(WidgetType widget_type, GtkStateType state_type,
 719         const char *detail, gint x, gint y, gint width, gint height);
 720 void gtk2_paint_handle(WidgetType widget_type, GtkStateType state_type,
 721         GtkShadowType shadow_type, const gchar *detail,
 722         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 723 void gtk2_paint_hline(WidgetType widget_type, GtkStateType state_type,
 724         const gchar *detail, gint x, gint y, gint width, gint height);
 725 void gtk2_paint_option(WidgetType widget_type, gint synth_state,
 726         const gchar *detail, gint x, gint y, gint width, gint height);
 727 void gtk2_paint_shadow(WidgetType widget_type, GtkStateType state_type,
 728         GtkShadowType shadow_type, const gchar *detail,
 729         gint x, gint y, gint width, gint height,
 730         gint synth_state, GtkTextDirection dir);
 731 void gtk2_paint_slider(WidgetType widget_type, GtkStateType state_type,
 732         GtkShadowType shadow_type, const gchar *detail,
 733         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 734 void gtk2_paint_vline(WidgetType widget_type, GtkStateType state_type,
 735         const gchar *detail, gint x, gint y, gint width, gint height);
 736 void gtk_paint_background(WidgetType widget_type, GtkStateType state_type,
 737         gint x, gint y, gint width, gint height);
 738 
 739 void gtk2_init_painting(JNIEnv *env, gint w, gint h);
 740 gint gtk2_copy_image(gint *dest, gint width, gint height);
 741 
 742 gint gtk2_get_xthickness(JNIEnv *env, WidgetType widget_type);
 743 gint gtk2_get_ythickness(JNIEnv *env, WidgetType widget_type);
 744 gint gtk2_get_color_for_state(JNIEnv *env, WidgetType widget_type,
 745                               GtkStateType state_type, ColorType color_type);
 746 jobject gtk2_get_class_value(JNIEnv *env, WidgetType widget_type, jstring key);
 747 
 748 GdkPixbuf *gtk2_get_stock_icon(gint widget_type, const gchar *stock_id,
 749         GtkIconSize size, GtkTextDirection direction, const char *detail);
 750 GdkPixbuf *gtk2_get_icon(const gchar *filename, gint size);
 751 jstring gtk2_get_pango_font_name(JNIEnv *env, WidgetType widget_type);
 752 
 753 void flush_gtk_event_loop();
 754 
 755 jobject gtk2_get_setting(JNIEnv *env, Setting property);
 756 
 757 void gtk2_set_range_value(WidgetType widget_type, jdouble value,
 758                           jdouble min, jdouble max, jdouble visible);
 759 
 760 void (*fp_g_free)(gpointer mem);
 761 void (*fp_g_object_unref)(gpointer object);
 762 int (*fp_gdk_pixbuf_get_bits_per_sample)(const GdkPixbuf *pixbuf);
 763 guchar *(*fp_gdk_pixbuf_get_pixels)(const GdkPixbuf *pixbuf);
 764 gboolean (*fp_gdk_pixbuf_get_has_alpha)(const GdkPixbuf *pixbuf);
 765 int (*fp_gdk_pixbuf_get_height)(const GdkPixbuf *pixbuf);
 766 int (*fp_gdk_pixbuf_get_n_channels)(const GdkPixbuf *pixbuf);
 767 int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
 768 int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
 769 GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
 770 void (*fp_gtk_widget_destroy)(GtkWidget *widget);
 771 void (*fp_gtk_window_present)(GtkWindow *window);
 772 void (*fp_gtk_window_move)(GtkWindow *window, gint x, gint y);
 773 void (*fp_gtk_window_resize)(GtkWindow *window, gint width, gint height);
 774 
 775 /**
 776  * Function Pointers for GtkFileChooser
 777  */
 778 gchar* (*fp_gtk_file_chooser_get_filename)(GtkFileChooser *chooser);
 779 void (*fp_gtk_widget_hide)(GtkWidget *widget);
 780 void (*fp_gtk_main_quit)(void);
 781 GtkWidget* (*fp_gtk_file_chooser_dialog_new)(const gchar *title,
 782     GtkWindow *parent, GtkFileChooserAction action,
 783     const gchar *first_button_text, ...);
 784 gboolean (*fp_gtk_file_chooser_set_current_folder)(GtkFileChooser *chooser,
 785     const gchar *filename);
 786 gboolean (*fp_gtk_file_chooser_set_filename)(GtkFileChooser *chooser,
 787     const char *filename);
 788 void (*fp_gtk_file_chooser_set_current_name)(GtkFileChooser *chooser,
 789     const gchar *name);
 790 void (*fp_gtk_file_filter_add_custom)(GtkFileFilter *filter,
 791     GtkFileFilterFlags needed, GtkFileFilterFunc func, gpointer data,
 792     GDestroyNotify notify);
 793 void (*fp_gtk_file_chooser_set_filter)(GtkFileChooser *chooser,
 794     GtkFileFilter *filter);
 795 GType (*fp_gtk_file_chooser_get_type)(void);
 796 GtkFileFilter* (*fp_gtk_file_filter_new)(void);
 797 void (*fp_gtk_file_chooser_set_do_overwrite_confirmation)(
 798     GtkFileChooser *chooser, gboolean do_overwrite_confirmation);
 799 void (*fp_gtk_file_chooser_set_select_multiple)(
 800     GtkFileChooser *chooser, gboolean select_multiple);
 801 gchar* (*fp_gtk_file_chooser_get_current_folder)(GtkFileChooser *chooser);
 802 GSList* (*fp_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser);
 803 guint (*fp_gtk_g_slist_length)(GSList *list);
 804 gulong (*fp_g_signal_connect_data)(gpointer instance,
 805     const gchar *detailed_signal, GCallback c_handler, gpointer data,
 806     GClosureNotify destroy_data, GConnectFlags connect_flags);
 807 void (*fp_gtk_widget_show)(GtkWidget *widget);
 808 void (*fp_gtk_main)(void);
 809 guint (*fp_gtk_main_level)(void);
 810 
 811 
 812 /**
 813  * This function is available for GLIB > 2.20, so it MUST be
 814  * called within (fp_glib_check_version(2, 20, 0) == NULL) check.
 815  */
 816 gboolean (*fp_g_thread_get_initialized)(void);
 817 
 818 void (*fp_g_thread_init)(GThreadFunctions *vtable);
 819 void (*fp_gdk_threads_init)(void);
 820 void (*fp_gdk_threads_enter)(void);
 821 void (*fp_gdk_threads_leave)(void);
 822 
 823 gboolean (*fp_gtk_show_uri)(GdkScreen *screen, const gchar *uri,
 824     guint32 timestamp, GError **error);
 825 
 826 #endif /* !_GTK2_INTERFACE_H */