#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <config.h>
#include "native_state.h"
#include <jni.h>
#define RC_FILE ".classpath-gtkrc"
#define JVM_SUN
#ifndef __GTKPEER_H__
#define __GTKPEER_H__
#ifndef __GNUC__
#define __attribute__(x)
#endif
#ifdef JVM_SUN
extern struct state_table *native_state_table;
extern struct state_table *native_global_ref_table;
#define NSA_INIT(env, clazz) \
do {native_state_table = init_state_table (env, clazz); \
native_global_ref_table = init_state_table (env, clazz);} while (0)
#define NSA_GET_PTR(env, obj) \
get_state (env, obj, native_state_table)
#define NSA_SET_PTR(env, obj, ptr) \
set_state (env, obj, native_state_table, (void *)ptr)
#define NSA_DEL_PTR(env, obj) \
remove_state_slot (env, obj, native_state_table)
#define NSA_GET_GLOBAL_REF(env, obj) \
get_state (env, obj, native_global_ref_table)
#define NSA_SET_GLOBAL_REF(env, obj) \
do {jobject *globRefPtr; \
globRefPtr = (jobject *) malloc (sizeof (jobject)); \
*globRefPtr = (*env)->NewGlobalRef (env, obj); \
set_state (env, obj, native_global_ref_table, (void *)globRefPtr);} while (0)
#define NSA_DEL_GLOBAL_REF(env, obj) \
do {jobject *globRefPtr = get_state (env, obj, native_global_ref_table); \
remove_state_slot (env, obj, native_global_ref_table); \
(*env)->DeleteGlobalRef (env, *globRefPtr); \
free (globRefPtr);} while (0)
extern struct state_table *native_pixbufdecoder_state_table;
#define NSA_PB_INIT(env, clazz) \
native_pixbufdecoder_state_table = init_state_table (env, clazz)
#define NSA_GET_PB_PTR(env, obj) \
get_state (env, obj, native_pixbufdecoder_state_table)
#define NSA_SET_PB_PTR(env, obj, ptr) \
set_state (env, obj, native_pixbufdecoder_state_table, (void *)ptr)
#define NSA_DEL_PB_PTR(env, obj) \
remove_state_slot (env, obj, native_pixbufdecoder_state_table)
#endif
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
struct graphics
{
GdkDrawable *drawable;
GdkGC *gc;
GdkColormap *cm;
PangoFontDescription *pango_font;
PangoContext *pango_context;
PangoLayout *pango_layout;
jint x_offset, y_offset;
};
#define AWT_DEFAULT_CURSOR 0
#define AWT_CROSSHAIR_CURSOR 1
#define AWT_TEXT_CURSOR 2
#define AWT_WAIT_CURSOR 3
#define AWT_SW_RESIZE_CURSOR 4
#define AWT_SE_RESIZE_CURSOR 5
#define AWT_NW_RESIZE_CURSOR 6
#define AWT_NE_RESIZE_CURSOR 7
#define AWT_N_RESIZE_CURSOR 8
#define AWT_S_RESIZE_CURSOR 9
#define AWT_W_RESIZE_CURSOR 10
#define AWT_E_RESIZE_CURSOR 11
#define AWT_HAND_CURSOR 12
#define AWT_MOVE_CURSOR 13
#define SYNTHETIC_EVENT_MASK (1 << 10)
#define AWT_SHIFT_DOWN_MASK (1 << 6)
#define AWT_CTRL_DOWN_MASK (1 << 7)
#define AWT_META_DOWN_MASK (1 << 8)
#define AWT_ALT_DOWN_MASK (1 << 9)
#define AWT_BUTTON1_DOWN_MASK (1 << 10)
#define AWT_BUTTON2_DOWN_MASK (1 << 11)
#define AWT_BUTTON3_DOWN_MASK (1 << 12)
#define AWT_BUTTON1_MASK (1 << 4)
#define AWT_BUTTON2_MASK (1 << 3)
#define AWT_BUTTON3_MASK (1 << 2)
#define MULTI_CLICK_TIME 250
#define AWT_MOUSE_CLICKED 500
#define AWT_MOUSE_PRESSED 501
#define AWT_MOUSE_RELEASED 502
#define AWT_MOUSE_MOVED 503
#define AWT_MOUSE_ENTERED 504
#define AWT_MOUSE_EXITED 505
#define AWT_MOUSE_DRAGGED 506
#define AWT_ADJUSTMENT_UNIT_INCREMENT 1
#define AWT_ADJUSTMENT_UNIT_DECREMENT 2
#define AWT_ADJUSTMENT_BLOCK_DECREMENT 3
#define AWT_ADJUSTMENT_BLOCK_INCREMENT 4
#define AWT_ADJUSTMENT_TRACK 5
#define AWT_SCROLLPANE_SCROLLBARS_AS_NEEDED 0
#define AWT_SCROLLPANE_SCROLLBARS_ALWAYS 1
#define AWT_SCROLLPANE_SCROLLBARS_NEVER 2
#define AWT_LABEL_LEFT 0
#define AWT_LABEL_CENTER 1
#define AWT_LABEL_RIGHT 2
#define AWT_TEXTAREA_SCROLLBARS_BOTH 0
#define AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY 1
#define AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY 2
#define AWT_ITEM_SELECTED 1
#define AWT_ITEM_DESELECTED 2
#define AWT_KEY_TYPED 400
#define AWT_KEY_PRESSED 401
#define AWT_KEY_RELEASED 402
#define AWT_KEY_CHAR_UNDEFINED 0
#define AWT_KEY_LOCATION_UNKNOWN 0
#define AWT_KEY_LOCATION_STANDARD 1
#define AWT_KEY_LOCATION_LEFT 2
#define AWT_KEY_LOCATION_RIGHT 3
#define AWT_KEY_LOCATION_NUMPAD 4
#define VK_ENTER '\n'
#define VK_BACK_SPACE '\b'
#define VK_TAB '\t'
#define VK_CANCEL 3
#define VK_CLEAR 12
#define VK_SHIFT 16
#define VK_CONTROL 17
#define VK_ALT 18
#define VK_PAUSE 19
#define VK_CAPS_LOCK 20
#define VK_ESCAPE 27
#define VK_SPACE ' '
#define VK_PAGE_UP 33
#define VK_PAGE_DOWN 34
#define VK_END 35
#define VK_HOME 36
#define VK_LEFT 37
#define VK_UP 38
#define VK_RIGHT 39
#define VK_DOWN 40
#define VK_COMMA ','
#define VK_MINUS '-'
#define VK_PERIOD '.'
#define VK_SLASH '/'
#define VK_0 '0'
#define VK_1 '1'
#define VK_2 '2'
#define VK_3 '3'
#define VK_4 '4'
#define VK_5 '5'
#define VK_6 '6'
#define VK_7 '7'
#define VK_8 '8'
#define VK_9 '9'
#define VK_SEMICOLON ';'
#define VK_EQUALS '='
#define VK_A 'A'
#define VK_B 'B'
#define VK_C 'C'
#define VK_D 'D'
#define VK_E 'E'
#define VK_F 'F'
#define VK_G 'G'
#define VK_H 'H'
#define VK_I 'I'
#define VK_J 'J'
#define VK_K 'K'
#define VK_L 'L'
#define VK_M 'M'
#define VK_N 'N'
#define VK_O 'O'
#define VK_P 'P'
#define VK_Q 'Q'
#define VK_R 'R'
#define VK_S 'S'
#define VK_T 'T'
#define VK_U 'U'
#define VK_V 'V'
#define VK_W 'W'
#define VK_X 'X'
#define VK_Y 'Y'
#define VK_Z 'Z'
#define VK_OPEN_BRACKET '['
#define VK_BACK_SLASH '\\'
#define VK_CLOSE_BRACKET ']'
#define VK_NUMPAD0 96
#define VK_NUMPAD1 97
#define VK_NUMPAD2 98
#define VK_NUMPAD3 99
#define VK_NUMPAD4 100
#define VK_NUMPAD5 101
#define VK_NUMPAD6 102
#define VK_NUMPAD7 103
#define VK_NUMPAD8 104
#define VK_NUMPAD9 105
#define VK_MULTIPLY 106
#define VK_ADD 107
#define VK_SEPARATER 108
#define VK_SEPARATOR 108
#define VK_SUBTRACT 109
#define VK_DECIMAL 110
#define VK_DIVIDE 111
#define VK_DELETE 127
#define VK_NUM_LOCK 144
#define VK_SCROLL_LOCK 145
#define VK_F1 112
#define VK_F2 113
#define VK_F3 114
#define VK_F4 115
#define VK_F5 116
#define VK_F6 117
#define VK_F7 118
#define VK_F8 119
#define VK_F9 120
#define VK_F10 121
#define VK_F11 122
#define VK_F12 123
#define VK_F13 61440
#define VK_F14 61441
#define VK_F15 61442
#define VK_F16 61443
#define VK_F17 61444
#define VK_F18 61445
#define VK_F19 61446
#define VK_F20 61447
#define VK_F21 61448
#define VK_F22 61449
#define VK_F23 61450
#define VK_F24 61451
#define VK_PRINTSCREEN 154
#define VK_INSERT 155
#define VK_HELP 156
#define VK_META 157
#define VK_BACK_QUOTE 192
#define VK_QUOTE 222
#define VK_KP_UP 224
#define VK_KP_DOWN 225
#define VK_KP_LEFT 226
#define VK_KP_RIGHT 227
#define VK_DEAD_GRAVE 128
#define VK_DEAD_ACUTE 129
#define VK_DEAD_CIRCUMFLEX 130
#define VK_DEAD_TILDE 131
#define VK_DEAD_MACRON 132
#define VK_DEAD_BREVE 133
#define VK_DEAD_ABOVEDOT 134
#define VK_DEAD_DIAERESIS 135
#define VK_DEAD_ABOVERING 136
#define VK_DEAD_DOUBLEACUTE 137
#define VK_DEAD_CARON 138
#define VK_DEAD_CEDILLA 139
#define VK_DEAD_OGONEK 140
#define VK_DEAD_IOTA 141
#define VK_DEAD_VOICED_SOUND 142
#define VK_DEAD_SEMIVOICED_SOUND 143
#define VK_AMPERSAND 150
#define VK_ASTERISK 151
#define VK_QUOTEDBL 152
#define VK_LESS 153
#define VK_GREATER 160
#define VK_BRACELEFT 161
#define VK_BRACERIGHT 162
#define VK_AT 512
#define VK_COLON 513
#define VK_CIRCUMFLEX 514
#define VK_DOLLAR 515
#define VK_EURO_SIGN 516
#define VK_EXCLAMATION_MARK 517
#define VK_INVERTED_EXCLAMATION_MARK 518
#define VK_LEFT_PARENTHESIS 519
#define VK_NUMBER_SIGN 520
#define VK_PLUS 521
#define VK_RIGHT_PARENTHESIS 522
#define VK_UNDERSCORE 523
#define VK_FINAL 24
#define VK_CONVERT 28
#define VK_NONCONVERT 29
#define VK_ACCEPT 30
#define VK_MODECHANGE 31
#define VK_KANA 21
#define VK_KANJI 25
#define VK_ALPHANUMERIC 240
#define VK_KATAKANA 241
#define VK_HIRAGANA 242
#define VK_FULL_WIDTH 243
#define VK_HALF_WIDTH 244
#define VK_ROMAN_CHARACTERS 245
#define VK_ALL_CANDIDATES 256
#define VK_PREVIOUS_CANDIDATE 257
#define VK_CODE_INPUT 258
#define VK_JAPANESE_KATAKANA 259
#define VK_JAPANESE_HIRAGANA 260
#define VK_JAPANESE_ROMAN 261
#define VK_KANA_LOCK 262
#define VK_INPUT_METHOD_ON_OFF 263
#define VK_CUT 65489
#define VK_COPY 65485
#define VK_PASTE 65487
#define VK_UNDO 65483
#define VK_AGAIN 65481
#define VK_FIND 65488
#define VK_PROPS 65482
#define VK_STOP 65480
#define VK_COMPOSE 65312
#define VK_ALT_GRAPH 65406
#define VK_UNDEFINED 0
#define AWT_FOCUS_GAINED 1004
#define AWT_FOCUS_LOST 1005
#define AWT_WINDOW_OPENED 200
#define AWT_WINDOW_CLOSING 201
#define AWT_WINDOW_CLOSED 202
#define AWT_WINDOW_ICONIFIED 203
#define AWT_WINDOW_DEICONIFIED 204
#define AWT_WINDOW_ACTIVATED 205
#define AWT_WINDOW_DEACTIVATED 206
#define AWT_WINDOW_GAINED_FOCUS 207
#define AWT_WINDOW_LOST_FOCUS 208
#define AWT_WINDOW_STATE_CHANGED 209
#define AWT_FRAME_STATE_NORMAL 0
#define AWT_FRAME_STATE_ICONIFIED 1
#define AWT_FRAME_STATE_MAXIMIZED_HORIZ 2
#define AWT_FRAME_STATE_MAXIMIZED_VERT 4
#define AWT_FRAME_STATE_MAXIMIZED_BOTH 6
#define AWT_STYLE_PLAIN 0
#define AWT_STYLE_BOLD 1
#define AWT_STYLE_ITALIC 2
#define AWT_DESKTOP 0
#define AWT_ACTIVE_CAPTION 1
#define AWT_ACTIVE_CAPTION_TEXT 2
#define AWT_ACTIVE_CAPTION_BORDER 3
#define AWT_INACTIVE_CAPTION 4
#define AWT_INACTIVE_CAPTION_TEXT 5
#define AWT_INACTIVE_CAPTION_BORDER 6
#define AWT_WINDOW 7
#define AWT_WINDOW_BORDER 8
#define AWT_WINDOW_TEXT 9
#define AWT_MENU 10
#define AWT_MENU_TEXT 11
#define AWT_TEXT 12
#define AWT_TEXT_TEXT 13
#define AWT_TEXT_HIGHLIGHT 14
#define AWT_TEXT_HIGHLIGHT_TEXT 15
#define AWT_TEXT_INACTIVE_TEXT 16
#define AWT_CONTROL 17
#define AWT_CONTROL_TEXT 18
#define AWT_CONTROL_HIGHLIGHT 19
#define AWT_CONTROL_LT_HIGHLIGHT 20
#define AWT_CONTROL_SHADOW 21
#define AWT_CONTROL_DK_SHADOW 22
#define AWT_SCROLLBAR 23
#define AWT_INFO 24
#define AWT_INFO_TEXT 25
#define AWT_NUM_COLORS 26
extern jmethodID setBoundsCallbackID;
extern jmethodID postActionEventID;
extern jmethodID postMenuActionEventID;
extern jmethodID postMouseEventID;
extern jmethodID postConfigureEventID;
extern jmethodID postExposeEventID;
extern jmethodID postKeyEventID;
extern jmethodID postFocusEventID;
extern jmethodID postAdjustmentEventID;
extern jmethodID choicePostItemEventID;
extern jmethodID postItemEventID;
extern jmethodID postListItemEventID;
extern jmethodID postTextEventID;
extern jmethodID postWindowEventID;
extern jmethodID beginNativeRepaintID;
extern jmethodID endNativeRepaintID;
extern jmethodID initComponentGraphicsID;
extern jmethodID initComponentGraphics2DID;
extern jmethodID setCursorID;
extern jmethodID syncAttrsID;
extern jclass gdkColor;
extern jmethodID gdkColorID;
extern jmethodID postInsetsChangedEventID;
extern jmethodID windowGetWidthID;
extern jmethodID windowGetHeightID;
JNIEnv *gdk_env(void);
extern double dpi_conversion_factor;
extern GtkWindowGroup *global_gtk_window_group;
void awt_event_handler (GdkEvent *event);
gboolean pre_event_handler (GtkWidget *widget,
GdkEvent *event,
jobject peer);
void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
void connect_awt_hook_cb (GtkWidget *widget, jobject peer);
void set_visible (GtkWidget *widget, jboolean visible);
void set_parent (GtkWidget *widget, GtkContainer *parent);
jint keyevent_state_to_awt_mods (GdkEvent *event);
guint awt_keycode_to_keysym (jint keyCode, jint keyLocation);
struct item_event_hook_info
{
jobject peer_obj;
const char *label;
};
union widget_union
{
void **void_widget;
GtkWidget **widget;
};
#define DEBUG_LOCKING 0
#if DEBUG_LOCKING
#define gdk_threads_enter() \
{ \
g_print ("lock: %s, %d\n", __FILE__, __LINE__); \
gdk_threads_enter (); \
}
#define gdk_threads_leave() \
{ \
g_print ("unlock: %s, %d\n", __FILE__, __LINE__); \
gdk_threads_leave (); \
}
#endif
#endif