1 /*
   2  * Copyright 2005-2006 Sun Microsystems, Inc.  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.  Sun designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22  * CA 95054 USA or visit www.sun.com if you need additional information or
  23  * have any questions.
  24  */
  25 #ifndef _GTK2_INTERFACE_H
  26 #define _GTK2_INTERFACE_H
  27 
  28 #include <stdlib.h>
  29 #include <jni.h>
  30 
  31 typedef enum _WidgetType
  32 {
  33     BUTTON,                     /* GtkButton */
  34     CHECK_BOX,                  /* GtkCheckButton */
  35     CHECK_BOX_MENU_ITEM,        /* GtkCheckMenuItem */
  36     COLOR_CHOOSER,              /* GtkColorSelectionDialog */
  37     COMBO_BOX,                  /* GtkComboBox */
  38     COMBO_BOX_ARROW_BUTTON,     /* GtkComboBoxEntry */
  39     COMBO_BOX_TEXT_FIELD,       /* GtkComboBoxEntry */
  40     DESKTOP_ICON,               /* GtkLabel */
  41     DESKTOP_PANE,               /* GtkContainer */
  42     EDITOR_PANE,                /* GtkTextView */
  43     FORMATTED_TEXT_FIELD,       /* GtkEntry */
  44     HANDLE_BOX,                 /* GtkHandleBox */
  45     HPROGRESS_BAR,              /* GtkProgressBar */
  46     HSCROLL_BAR,                /* GtkHScrollbar */
  47     HSCROLL_BAR_BUTTON_LEFT,    /* GtkHScrollbar */
  48     HSCROLL_BAR_BUTTON_RIGHT,   /* GtkHScrollbar */
  49     HSCROLL_BAR_TRACK,          /* GtkHScrollbar */
  50     HSCROLL_BAR_THUMB,          /* GtkHScrollbar */
  51     HSEPARATOR,                 /* GtkHSeparator */
  52     HSLIDER,                    /* GtkHScale */
  53     HSLIDER_TRACK,              /* GtkHScale */
  54     HSLIDER_THUMB,              /* GtkHScale */
  55     HSPLIT_PANE_DIVIDER,        /* GtkHPaned */
  56     INTERNAL_FRAME,             /* GtkWindow */
  57     INTERNAL_FRAME_TITLE_PANE,  /* GtkLabel */
  58     IMAGE,                      /* GtkImage */
  59     LABEL,                      /* GtkLabel */
  60     LIST,                       /* GtkTreeView */
  61     MENU,                       /* GtkMenu */
  62     MENU_BAR,                   /* GtkMenuBar */
  63     MENU_ITEM,                  /* GtkMenuItem */
  64     MENU_ITEM_ACCELERATOR,      /* GtkLabel */
  65     OPTION_PANE,                /* GtkMessageDialog */
  66     PANEL,                      /* GtkContainer */
  67     PASSWORD_FIELD,             /* GtkEntry */
  68     POPUP_MENU,                 /* GtkMenu */
  69     POPUP_MENU_SEPARATOR,       /* GtkSeparatorMenuItem */
  70     RADIO_BUTTON,               /* GtkRadioButton */
  71     RADIO_BUTTON_MENU_ITEM,     /* GtkRadioMenuItem */
  72     ROOT_PANE,                  /* GtkContainer */
  73     SCROLL_PANE,                /* GtkScrolledWindow */
  74     SPINNER,                    /* GtkSpinButton */
  75     SPINNER_ARROW_BUTTON,       /* GtkSpinButton */
  76     SPINNER_TEXT_FIELD,         /* GtkSpinButton */
  77     SPLIT_PANE,                 /* GtkPaned */
  78     TABBED_PANE,                /* GtkNotebook */
  79     TABBED_PANE_TAB_AREA,       /* GtkNotebook */
  80     TABBED_PANE_CONTENT,        /* GtkNotebook */
  81     TABBED_PANE_TAB,            /* GtkNotebook */
  82     TABLE,                      /* GtkTreeView */
  83     TABLE_HEADER,               /* GtkButton */
  84     TEXT_AREA,                  /* GtkTextView */
  85     TEXT_FIELD,                 /* GtkEntry */
  86     TEXT_PANE,                  /* GtkTextView */
  87     TITLED_BORDER,              /* GtkFrame */
  88     TOGGLE_BUTTON,              /* GtkToggleButton */
  89     TOOL_BAR,                   /* GtkToolbar */
  90     TOOL_BAR_DRAG_WINDOW,       /* GtkToolbar */
  91     TOOL_BAR_SEPARATOR,         /* GtkSeparatorToolItem */
  92     TOOL_TIP,                   /* GtkWindow */
  93     TREE,                       /* GtkTreeView */
  94     TREE_CELL,                  /* GtkTreeView */
  95     VIEWPORT,                   /* GtkViewport */
  96     VPROGRESS_BAR,              /* GtkProgressBar */
  97     VSCROLL_BAR,                /* GtkVScrollbar */
  98     VSCROLL_BAR_BUTTON_UP,      /* GtkVScrollbar */
  99     VSCROLL_BAR_BUTTON_DOWN,    /* GtkVScrollbar */
 100     VSCROLL_BAR_TRACK,          /* GtkVScrollbar */
 101     VSCROLL_BAR_THUMB,          /* GtkVScrollbar */
 102     VSEPARATOR,                 /* GtkVSeparator */
 103     VSLIDER,                    /* GtkVScale */
 104     VSLIDER_TRACK,              /* GtkVScale */
 105     VSLIDER_THUMB,              /* GtkVScale */
 106     VSPLIT_PANE_DIVIDER,        /* GtkVPaned */
 107     WIDGET_TYPE_SIZE
 108 } WidgetType;
 109 
 110 typedef enum _ColorType
 111 {
 112     FOREGROUND,
 113     BACKGROUND,
 114     TEXT_FOREGROUND,
 115     TEXT_BACKGROUND,
 116     FOCUS,
 117     LIGHT,
 118     DARK,
 119     MID,
 120     BLACK,
 121     WHITE
 122 } ColorType;
 123 
 124 typedef enum _Setting
 125 {
 126     GTK_FONT_NAME,
 127     GTK_ICON_SIZES
 128 } Setting;
 129 
 130 /* GTK types, here to eliminate need for GTK headers at compile time */
 131 
 132 #ifndef FALSE
 133 #define FALSE           (0)
 134 #define TRUE            (!FALSE)
 135 #endif
 136 
 137 #define GTK_HAS_FOCUS   (1 << 12)
 138 #define GTK_HAS_DEFAULT (1 << 14)
 139 
 140 
 141 /* basic types */
 142 typedef char    gchar;
 143 typedef short   gshort;
 144 typedef int     gint;
 145 typedef long    glong;
 146 typedef float   gfloat;
 147 typedef double  gdouble;
 148 typedef void*   gpointer;
 149 typedef gint    gboolean;
 150 
 151 typedef signed char  gint8;
 152 typedef signed short gint16;
 153 typedef signed int   gint32;
 154 
 155 typedef unsigned char  guchar;
 156 typedef unsigned char  guint8;
 157 typedef unsigned short gushort;
 158 typedef unsigned short guint16;
 159 typedef unsigned int   guint;
 160 typedef unsigned int   guint32;
 161 typedef unsigned int   gsize;
 162 typedef unsigned long  gulong;
 163 
 164 typedef signed long long   gint64;
 165 typedef unsigned long long guint64;
 166 
 167 /* enumerated constants */
 168 typedef enum
 169 {
 170   GTK_ARROW_UP,
 171   GTK_ARROW_DOWN,
 172   GTK_ARROW_LEFT,
 173   GTK_ARROW_RIGHT
 174 } GtkArrowType;
 175 
 176 typedef enum {
 177   GDK_COLORSPACE_RGB
 178 } GdkColorspace;
 179 
 180 typedef enum
 181 {
 182   GTK_EXPANDER_COLLAPSED,
 183   GTK_EXPANDER_SEMI_COLLAPSED,
 184   GTK_EXPANDER_SEMI_EXPANDED,
 185   GTK_EXPANDER_EXPANDED
 186 } GtkExpanderStyle;
 187 
 188 typedef enum
 189 {
 190   GTK_ICON_SIZE_INVALID,
 191   GTK_ICON_SIZE_MENU,
 192   GTK_ICON_SIZE_SMALL_TOOLBAR,
 193   GTK_ICON_SIZE_LARGE_TOOLBAR,
 194   GTK_ICON_SIZE_BUTTON,
 195   GTK_ICON_SIZE_DND,
 196   GTK_ICON_SIZE_DIALOG
 197 } GtkIconSize;
 198 
 199 typedef enum
 200 {
 201   GTK_ORIENTATION_HORIZONTAL,
 202   GTK_ORIENTATION_VERTICAL
 203 } GtkOrientation;
 204 
 205 typedef enum
 206 {
 207   GTK_POS_LEFT,
 208   GTK_POS_RIGHT,
 209   GTK_POS_TOP,
 210   GTK_POS_BOTTOM
 211 } GtkPositionType;
 212 
 213 typedef enum
 214 {
 215   GTK_SHADOW_NONE,
 216   GTK_SHADOW_IN,
 217   GTK_SHADOW_OUT,
 218   GTK_SHADOW_ETCHED_IN,
 219   GTK_SHADOW_ETCHED_OUT
 220 } GtkShadowType;
 221 
 222 typedef enum
 223 {
 224   GTK_STATE_NORMAL,
 225   GTK_STATE_ACTIVE,
 226   GTK_STATE_PRELIGHT,
 227   GTK_STATE_SELECTED,
 228   GTK_STATE_INSENSITIVE
 229 } GtkStateType;
 230 
 231 typedef enum
 232 {
 233   GTK_TEXT_DIR_NONE,
 234   GTK_TEXT_DIR_LTR,
 235   GTK_TEXT_DIR_RTL
 236 } GtkTextDirection;
 237 
 238 typedef enum
 239 {
 240   GTK_WINDOW_TOPLEVEL,
 241   GTK_WINDOW_POPUP
 242 } GtkWindowType;
 243 
 244 typedef enum
 245 {
 246   G_PARAM_READABLE            = 1 << 0,
 247   G_PARAM_WRITABLE            = 1 << 1,
 248   G_PARAM_CONSTRUCT           = 1 << 2,
 249   G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
 250   G_PARAM_LAX_VALIDATION      = 1 << 4,
 251   G_PARAM_PRIVATE             = 1 << 5
 252 } GParamFlags;
 253 
 254 /* We define all structure pointers to be void* */
 255 typedef void GError;
 256 typedef void GMainContext;
 257 typedef void GSList;
 258 
 259 typedef void GdkColormap;
 260 typedef void GdkDrawable;
 261 typedef void GdkGC;
 262 typedef void GdkPixbuf;
 263 typedef void GdkPixmap;
 264 typedef void GdkWindow;
 265 
 266 typedef void GtkFixed;
 267 typedef void GtkMenuItem;
 268 typedef void GtkMenuShell;
 269 typedef void GtkWidgetClass;
 270 typedef void PangoFontDescription;
 271 typedef void GtkSettings;
 272 
 273 /* Some real structures */
 274 typedef struct
 275 {
 276   guint32 pixel;
 277   guint16 red;
 278   guint16 green;
 279   guint16 blue;
 280 } GdkColor;
 281 
 282 typedef struct {
 283   gint      fd;
 284   gushort   events;
 285   gushort   revents;
 286 } GPollFD;
 287 
 288 typedef struct {
 289   gint x;
 290   gint y;
 291   gint width;
 292   gint height;
 293 } GdkRectangle;
 294 
 295 typedef struct {
 296   gint x;
 297   gint y;
 298   gint width;
 299   gint height;
 300 } GtkAllocation;
 301 
 302 typedef struct {
 303   gint width;
 304   gint height;
 305 } GtkRequisition;
 306 
 307 typedef struct {
 308   GtkWidgetClass *g_class;
 309 } GTypeInstance;
 310 
 311 typedef struct {
 312   gint left;
 313   gint right;
 314   gint top;
 315   gint bottom;
 316 } GtkBorder;
 317 
 318 /******************************************************
 319  * FIXME: it is more safe to include gtk headers for
 320  * the precise type definition of GType and other
 321  * structures. This is a place where getting rid of gtk
 322  * headers may be dangerous.
 323  ******************************************************/
 324 typedef gulong         GType;
 325 
 326 typedef struct
 327 {
 328   GType         g_type;
 329 
 330   union {
 331     gint        v_int;
 332     guint       v_uint;
 333     glong       v_long;
 334     gulong      v_ulong;
 335     gint64      v_int64;
 336     guint64     v_uint64;
 337     gfloat      v_float;
 338     gdouble     v_double;
 339     gpointer    v_pointer;
 340   } data[2];
 341 } GValue;
 342 
 343 typedef struct
 344 {
 345   GTypeInstance  g_type_instance;
 346 
 347   gchar         *name;
 348   GParamFlags    flags;
 349   GType          value_type;
 350   GType          owner_type;
 351 } GParamSpec;
 352 
 353 typedef struct {
 354   GTypeInstance g_type_instance;
 355   guint         ref_count;
 356   void         *qdata;
 357 } GObject;
 358 
 359 typedef struct {
 360   GObject parent_instance;
 361   guint32 flags;
 362 } GtkObject;
 363 
 364 typedef struct
 365 {
 366   GObject parent_instance;
 367 
 368   GdkColor fg[5];
 369   GdkColor bg[5];
 370   GdkColor light[5];
 371   GdkColor dark[5];
 372   GdkColor mid[5];
 373   GdkColor text[5];
 374   GdkColor base[5];
 375   GdkColor text_aa[5];          /* Halfway between text/base */
 376 
 377   GdkColor black;
 378   GdkColor white;
 379   PangoFontDescription *font_desc;
 380 
 381   gint xthickness;
 382   gint ythickness;
 383 
 384   GdkGC *fg_gc[5];
 385   GdkGC *bg_gc[5];
 386   GdkGC *light_gc[5];
 387   GdkGC *dark_gc[5];
 388   GdkGC *mid_gc[5];
 389   GdkGC *text_gc[5];
 390   GdkGC *base_gc[5];
 391   GdkGC *text_aa_gc[5];
 392   GdkGC *black_gc;
 393   GdkGC *white_gc;
 394 
 395   GdkPixmap *bg_pixmap[5];
 396 } GtkStyle;
 397 
 398 typedef struct _GtkWidget GtkWidget;
 399 struct _GtkWidget
 400 {
 401   GtkObject object;
 402   guint16 private_flags;
 403   guint8 state;
 404   guint8 saved_state;
 405   gchar *name;
 406   GtkStyle *style;
 407   GtkRequisition requisition;
 408   GtkAllocation allocation;
 409   GdkWindow *window;
 410   GtkWidget *parent;
 411 };
 412 
 413 typedef struct
 414 {
 415   GtkWidget widget;
 416 
 417   gfloat xalign;
 418   gfloat yalign;
 419 
 420   guint16 xpad;
 421   guint16 ypad;
 422 } GtkMisc;
 423 
 424 typedef struct {
 425   GtkWidget widget;
 426   GtkWidget *focus_child;
 427   guint border_width : 16;
 428   guint need_resize : 1;
 429   guint resize_mode : 2;
 430   guint reallocate_redraws : 1;
 431   guint has_focus_chain : 1;
 432 } GtkContainer;
 433 
 434 typedef struct {
 435   GtkContainer container;
 436   GtkWidget *child;
 437 } GtkBin;
 438 
 439 typedef struct {
 440   GtkBin bin;
 441   GdkWindow *event_window;
 442   gchar *label_text;
 443   guint activate_timeout;
 444   guint constructed : 1;
 445   guint in_button : 1;
 446   guint button_down : 1;
 447   guint relief : 2;
 448   guint use_underline : 1;
 449   guint use_stock : 1;
 450   guint depressed : 1;
 451   guint depress_on_activate : 1;
 452   guint focus_on_click : 1;
 453 } GtkButton;
 454 
 455 typedef struct {
 456   GtkButton button;
 457   guint active : 1;
 458   guint draw_indicator : 1;
 459   guint inconsistent : 1;
 460 } GtkToggleButton;
 461 
 462 typedef struct _GtkAdjustment GtkAdjustment;
 463 struct _GtkAdjustment
 464 {
 465   GtkObject parent_instance;
 466 
 467   gdouble lower;
 468   gdouble upper;
 469   gdouble value;
 470   gdouble step_increment;
 471   gdouble page_increment;
 472   gdouble page_size;
 473 };
 474 
 475 typedef enum
 476 {
 477   GTK_UPDATE_CONTINUOUS,
 478   GTK_UPDATE_DISCONTINUOUS,
 479   GTK_UPDATE_DELAYED
 480 } GtkUpdateType;
 481 
 482 typedef struct _GtkRange GtkRange;
 483 struct _GtkRange
 484 {
 485   GtkWidget widget;
 486   GtkAdjustment *adjustment;
 487   GtkUpdateType update_policy;
 488   guint inverted : 1;
 489   /*< protected >*/
 490   guint flippable : 1;
 491   guint has_stepper_a : 1;
 492   guint has_stepper_b : 1;
 493   guint has_stepper_c : 1;
 494   guint has_stepper_d : 1;
 495   guint need_recalc : 1;
 496   guint slider_size_fixed : 1;
 497   gint min_slider_size;
 498   GtkOrientation orientation;
 499   GdkRectangle range_rect;
 500   gint slider_start, slider_end;
 501   gint round_digits;
 502   /*< private >*/
 503   guint trough_click_forward : 1;
 504   guint update_pending : 1;
 505   /*GtkRangeLayout * */ void *layout;
 506   /*GtkRangeStepTimer * */ void* timer;
 507   gint slide_initial_slider_position;
 508   gint slide_initial_coordinate;
 509   guint update_timeout_id;
 510   GdkWindow *event_window;
 511 };
 512 
 513 typedef struct _GtkProgressBar       GtkProgressBar;
 514 
 515 typedef enum
 516 {
 517   GTK_PROGRESS_CONTINUOUS,
 518   GTK_PROGRESS_DISCRETE
 519 } GtkProgressBarStyle;
 520 
 521 typedef enum
 522 {
 523   GTK_PROGRESS_LEFT_TO_RIGHT,
 524   GTK_PROGRESS_RIGHT_TO_LEFT,
 525   GTK_PROGRESS_BOTTOM_TO_TOP,
 526   GTK_PROGRESS_TOP_TO_BOTTOM
 527 } GtkProgressBarOrientation;
 528 
 529 typedef struct _GtkProgress       GtkProgress;
 530 
 531 struct _GtkProgress
 532 {
 533   GtkWidget widget;
 534   GtkAdjustment *adjustment;
 535   GdkPixmap     *offscreen_pixmap;
 536   gchar         *format;
 537   gfloat         x_align;
 538   gfloat         y_align;
 539   guint          show_text : 1;
 540   guint          activity_mode : 1;
 541   guint          use_text_format : 1;
 542 };
 543 
 544 struct _GtkProgressBar
 545 {
 546   GtkProgress progress;
 547   GtkProgressBarStyle bar_style;
 548   GtkProgressBarOrientation orientation;
 549   guint blocks;
 550   gint  in_block;
 551   gint  activity_pos;
 552   guint activity_step;
 553   guint activity_blocks;
 554   gdouble pulse_fraction;
 555   guint activity_dir : 1;
 556   guint ellipsize : 3;
 557 };
 558 
 559 /*
 560  * Converts java.lang.String object to UTF-8 character string.
 561  */
 562 const char *getStrFor(JNIEnv *env, jstring value);
 563 
 564 /*
 565  * Check whether the gtk2 library is available and meets the minimum
 566  * version requirement.  If the library is already loaded this method has no
 567  * effect and returns success.
 568  * Returns FALSE on failure and TRUE on success.
 569  */
 570 gboolean gtk2_check_version();
 571 
 572 /*
 573  * Load the gtk2 library.  If the library is already loaded this method has no
 574  * effect and returns success.
 575  * Returns FALSE on failure and TRUE on success.
 576  */
 577 gboolean gtk2_load();
 578 
 579 /*
 580  * Unload the gtk2 library.  If the library is already unloaded this method has
 581  * no effect and returns success.
 582  * Returns FALSE on failure and TRUE on success.
 583  */
 584 gboolean gtk2_unload();
 585 
 586 void gtk2_paint_arrow(WidgetType widget_type, GtkStateType state_type,
 587         GtkShadowType shadow_type, const gchar *detail,
 588         gint x, gint y, gint width, gint height,
 589         GtkArrowType arrow_type, gboolean fill);
 590 void gtk2_paint_box(WidgetType widget_type, GtkStateType state_type,
 591         GtkShadowType shadow_type, const gchar *detail,
 592         gint x, gint y, gint width, gint height,
 593         gint synth_state, GtkTextDirection dir);
 594 void gtk2_paint_box_gap(WidgetType widget_type, GtkStateType state_type,
 595         GtkShadowType shadow_type, const gchar *detail,
 596         gint x, gint y, gint width, gint height,
 597         GtkPositionType gap_side, gint gap_x, gint gap_width);
 598 void gtk2_paint_check(WidgetType widget_type, gint synth_state,
 599         const gchar *detail, gint x, gint y, gint width, gint height);
 600 void gtk2_paint_diamond(WidgetType widget_type, GtkStateType state_type,
 601         GtkShadowType shadow_type, const gchar *detail,
 602         gint x, gint y, gint width, gint height);
 603 void gtk2_paint_expander(WidgetType widget_type, GtkStateType state_type,
 604         const gchar *detail, gint x, gint y, gint width, gint height,
 605         GtkExpanderStyle expander_style);
 606 void gtk2_paint_extension(WidgetType widget_type, GtkStateType state_type,
 607         GtkShadowType shadow_type, const gchar *detail,
 608         gint x, gint y, gint width, gint height, GtkPositionType gap_side);
 609 void gtk2_paint_flat_box(WidgetType widget_type, GtkStateType state_type,
 610         GtkShadowType shadow_type, const gchar *detail,
 611         gint x, gint y, gint width, gint height, gboolean has_focus);
 612 void gtk2_paint_focus(WidgetType widget_type, GtkStateType state_type,
 613         const char *detail, gint x, gint y, gint width, gint height);
 614 void gtk2_paint_handle(WidgetType widget_type, GtkStateType state_type,
 615         GtkShadowType shadow_type, const gchar *detail,
 616         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 617 void gtk2_paint_hline(WidgetType widget_type, GtkStateType state_type,
 618         const gchar *detail, gint x, gint y, gint width, gint height);
 619 void gtk2_paint_option(WidgetType widget_type, gint synth_state,
 620         const gchar *detail, gint x, gint y, gint width, gint height);
 621 void gtk2_paint_shadow(WidgetType widget_type, GtkStateType state_type,
 622         GtkShadowType shadow_type, const gchar *detail,
 623         gint x, gint y, gint width, gint height,
 624         gint synth_state, GtkTextDirection dir);
 625 void gtk2_paint_slider(WidgetType widget_type, GtkStateType state_type,
 626         GtkShadowType shadow_type, const gchar *detail,
 627         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 628 void gtk2_paint_vline(WidgetType widget_type, GtkStateType state_type,
 629         const gchar *detail, gint x, gint y, gint width, gint height);
 630 void gtk_paint_background(WidgetType widget_type, GtkStateType state_type,
 631         gint x, gint y, gint width, gint height);
 632 
 633 void gtk2_init_painting(gint w, gint h);
 634 gint gtk2_copy_image(gint *dest, gint width, gint height);
 635 
 636 gint gtk2_get_xthickness(JNIEnv *env, WidgetType widget_type);
 637 gint gtk2_get_ythickness(JNIEnv *env, WidgetType widget_type);
 638 gint gtk2_get_color_for_state(JNIEnv *env, WidgetType widget_type,
 639                               GtkStateType state_type, ColorType color_type);
 640 jobject gtk2_get_class_value(JNIEnv *env, WidgetType widget_type, jstring key);
 641 
 642 GdkPixbuf *gtk2_get_stock_icon(gint widget_type, const gchar *stock_id,
 643         GtkIconSize size, GtkTextDirection direction, const char *detail);
 644 GdkPixbuf *gtk2_get_icon(const gchar *filename, gint size);
 645 jstring gtk2_get_pango_font_name(JNIEnv *env, WidgetType widget_type);
 646 
 647 void flush_gtk_event_loop();
 648 
 649 jobject gtk2_get_setting(JNIEnv *env, Setting property);
 650 
 651 void gtk2_set_range_value(WidgetType widget_type, jdouble value,
 652                           jdouble min, jdouble max, jdouble visible);
 653 
 654 void (*fp_g_object_unref)(gpointer object);
 655 int (*fp_gdk_pixbuf_get_bits_per_sample)(const GdkPixbuf *pixbuf);
 656 guchar *(*fp_gdk_pixbuf_get_pixels)(const GdkPixbuf *pixbuf);
 657 gboolean (*fp_gdk_pixbuf_get_has_alpha)(const GdkPixbuf *pixbuf);
 658 int (*fp_gdk_pixbuf_get_height)(const GdkPixbuf *pixbuf);
 659 int (*fp_gdk_pixbuf_get_n_channels)(const GdkPixbuf *pixbuf);
 660 int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
 661 int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
 662 GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
 663 
 664 #endif /* !_GTK2_INTERFACE_H */