1 /* -*- Mode: C; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
11 * GTK2 ScritchUI Header.
16 #ifndef SQUIRRELJME_GTK2_H
17 #define SQUIRRELJME_GTK2_H
22 #include "lib/scritchui/scritchui.h"
23 #include "lib/scritchui/scritchuiImpl.h"
24 #include "lib/scritchui/scritchuiPencil.h"
25 #include "sjme/config.h"
26 #include "sjme/debug.h"
30 #ifndef SJME_CXX_IS_EXTERNED
31 #define SJME_CXX_IS_EXTERNED
32 #define SJME_CXX_SQUIRRELJME_GTK2_H
34 #endif /* #ifdef SJME_CXX_IS_EXTERNED */
35 #endif /* #ifdef __cplusplus */
37 /*--------------------------------------------------------------------------*/
39 /** Maps a @c sjme_jboolean to @c gboolean . */
40 #define SJME_JBOOLEAN_TO_GBOOLEAN(b) \
41 ((b) == SJME_JNI_FALSE ? FALSE : TRUE)
43 /** Maps a @c gboolean to @c sjme_jboolean . */
44 #define GBOOLEAN_TO_SJME_JBOOLEAN(b) \
45 ((b) == FALSE ? SJME_JNI_FALSE : SJME_JNI_TRUE)
47 /** Standard widget handle. */
48 #define SJME_SUI_GTK2_H_WIDGET 0
50 /** Top most widget, to be added to container. */
51 #define SJME_SUI_GTK2_H_TOP_WIDGET 1
53 /** The table box for a window. */
54 #define SJME_SUI_GTK2_H_WINTABLE 1
56 /** Storage for the current menu bar in a window. */
57 #define SJME_SUI_GTK2_H_WINBAR 2
59 /** The global state accelerator group. */
60 #define SJME_SUI_GTK2_H_ACCELG 3
62 /** The accelerator key. */
63 #define SJME_SUI_GTK2_V_ACCELKEY 2
65 /** The accelerator modifier. */
66 #define SJME_SUI_GTK2_V_ACCELMOD 3
68 /** Pencil functions for GTK2. */
69 extern const sjme_scritchui_pencilImplFunctions
70 sjme_scritchui_gtk2_pencilFunctions
;
72 sjme_errorCode
sjme_scritchui_gtk2_apiInit(
73 sjme_attrInNotNull sjme_scritchui inState
);
75 sjme_errorCode
sjme_scritchui_gtk2_componentFocusGrab(
76 sjme_attrInNotNull sjme_scritchui inState
,
77 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
);
79 sjme_errorCode
sjme_scritchui_gtk2_componentFocusHas(
80 sjme_attrInNotNull sjme_scritchui inState
,
81 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
82 sjme_attrOutNotNull sjme_jboolean
* outHasFocus
);
84 sjme_errorCode
sjme_scritchui_gtk2_componentRepaint(
85 sjme_attrInNotNull sjme_scritchui inState
,
86 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
87 sjme_attrInPositive sjme_jint x
,
88 sjme_attrInPositive sjme_jint y
,
89 sjme_attrInPositiveNonZero sjme_jint width
,
90 sjme_attrInPositiveNonZero sjme_jint height
);
92 sjme_errorCode
sjme_scritchui_gtk2_componentRevalidate(
93 sjme_attrInNotNull sjme_scritchui inState
,
94 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
);
96 sjme_errorCode
sjme_scritchui_gtk2_componentSetInputListener(
97 sjme_attrInNotNull sjme_scritchui inState
,
98 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
99 SJME_SCRITCHUI_SET_LISTENER_ARGS(input
));
101 sjme_errorCode
sjme_scritchui_gtk2_componentSetPaintListener(
102 sjme_attrInNotNull sjme_scritchui inState
,
103 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
104 SJME_SCRITCHUI_SET_LISTENER_ARGS(paint
));
106 sjme_errorCode
sjme_scritchui_gtk2_componentSetSizeListener(
107 sjme_attrInNotNull sjme_scritchui inState
,
108 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
109 SJME_SCRITCHUI_SET_LISTENER_ARGS(size
));
111 sjme_errorCode
sjme_scritchui_gtk2_componentSize(
112 sjme_attrInNotNull sjme_scritchui inState
,
113 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
114 sjme_attrOutNullable sjme_jint
* outWidth
,
115 sjme_attrOutNullable sjme_jint
* outHeight
);
117 sjme_errorCode
sjme_scritchui_gtk2_containerAdd(
118 sjme_attrInNotNull sjme_scritchui inState
,
119 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
120 sjme_attrInNotNull sjme_scritchui_uiContainer inContainerData
,
121 sjme_attrInNotNull sjme_scritchui_uiComponent addComponent
);
123 sjme_errorCode
sjme_scritchui_gtk2_containerRemove(
124 sjme_attrInNotNull sjme_scritchui inState
,
125 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
126 sjme_attrInNotNull sjme_scritchui_uiContainer inContainerData
,
127 sjme_attrInNotNull sjme_scritchui_uiComponent removeComponent
);
129 sjme_errorCode
sjme_scritchui_gtk2_containerSetBounds(
130 sjme_attrInNotNull sjme_scritchui inState
,
131 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
132 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
133 sjme_attrInPositive sjme_jint x
,
134 sjme_attrInPositive sjme_jint y
,
135 sjme_attrInPositiveNonZero sjme_jint width
,
136 sjme_attrInPositiveNonZero sjme_jint height
);
138 sjme_errorCode
sjme_scritchui_gtk2_labelSetString(
139 sjme_attrInNotNull sjme_scritchui inState
,
140 sjme_attrInNotNull sjme_scritchui_uiCommon inCommon
,
141 sjme_attrInNullable sjme_lpcstr inString
);
143 sjme_errorCode
sjme_scritchui_gtk2_lafElementColor(
144 sjme_attrInNotNull sjme_scritchui inState
,
145 sjme_attrInNullable sjme_scritchui_uiComponent inContext
,
146 sjme_attrOutNotNull sjme_jint
* outRGB
,
147 sjme_attrInValue sjme_scritchui_lafElementColorType elementColor
);
149 sjme_errorCode
sjme_scritchui_gtk2_loopExecuteLater(
150 sjme_attrInNotNull sjme_scritchui inState
,
151 sjme_attrInNotNull sjme_thread_mainFunc callback
,
152 sjme_attrInNullable sjme_thread_parameter anything
);
154 sjme_errorCode
sjme_scritchui_gtk2_menuBarNew(
155 sjme_attrInNotNull sjme_scritchui inState
,
156 sjme_attrInNotNull sjme_scritchui_uiMenuBar inMenuBar
,
157 sjme_attrInNullable sjme_pointer ignored
);
159 sjme_errorCode
sjme_scritchui_gtk2_menuInsert(
160 sjme_attrInNotNull sjme_scritchui inState
,
161 sjme_attrInNotNull sjme_scritchui_uiMenuKind intoMenu
,
162 sjme_attrInPositive sjme_jint atIndex
,
163 sjme_attrInNotNull sjme_scritchui_uiMenuKind childItem
);
165 sjme_errorCode
sjme_scritchui_gtk2_menuItemNew(
166 sjme_attrInNotNull sjme_scritchui inState
,
167 sjme_attrInNotNull sjme_scritchui_uiMenuItem inMenuItem
,
168 sjme_attrInNotNull
const sjme_scritchui_impl_initParamMenuItem
* init
);
170 sjme_errorCode
sjme_scritchui_gtk2_menuNew(
171 sjme_attrInNotNull sjme_scritchui inState
,
172 sjme_attrInNotNull sjme_scritchui_uiMenu inMenu
,
173 sjme_attrInNullable sjme_pointer ignored
);
175 sjme_errorCode
sjme_scritchui_gtk2_menuRemove(
176 sjme_attrInNotNull sjme_scritchui inState
,
177 sjme_attrInNotNull sjme_scritchui_uiMenuKind fromMenu
,
178 sjme_attrInPositive sjme_jint atIndex
);
180 sjme_errorCode
sjme_scritchui_gtk2_panelEnableFocus(
181 sjme_attrInNotNull sjme_scritchui inState
,
182 sjme_attrInNotNull sjme_scritchui_uiPanel inPanel
,
183 sjme_attrInValue sjme_jboolean enableFocus
,
184 sjme_attrInValue sjme_jboolean defaultFocus
);
186 sjme_errorCode
sjme_scritchui_gtk2_panelNew(
187 sjme_attrInNotNull sjme_scritchui inState
,
188 sjme_attrInNotNull sjme_scritchui_uiPanel inPanel
,
189 sjme_attrInNullable sjme_pointer ignored
);
191 sjme_errorCode
sjme_scritchui_gtk2_screens(
192 sjme_attrInNotNull sjme_scritchui inState
,
193 sjme_attrOutNotNull sjme_scritchui_uiScreen
* outScreens
,
194 sjme_attrInOutNotNull sjme_jint
* inOutNumScreens
);
196 sjme_errorCode
sjme_scritchui_gtk2_scrollPanelNew(
197 sjme_attrInNotNull sjme_scritchui inState
,
198 sjme_attrInNotNull sjme_scritchui_uiScrollPanel inScrollPanel
,
199 sjme_attrInNullable sjme_pointer ignored
);
201 sjme_errorCode
sjme_scritchui_gtk2_viewGetView(
202 sjme_attrInNotNull sjme_scritchui inState
,
203 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
204 sjme_attrOutNotNull sjme_scritchui_rect
* outViewRect
);
206 sjme_errorCode
sjme_scritchui_gtk2_viewSetArea(
207 sjme_attrInNotNull sjme_scritchui inState
,
208 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
209 sjme_attrInNotNull
const sjme_scritchui_dim
* inViewArea
,
210 sjme_attrInNotNull
const sjme_scritchui_dim
* inViewPage
);
212 sjme_errorCode
sjme_scritchui_gtk2_viewSetView(
213 sjme_attrInNotNull sjme_scritchui inState
,
214 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
215 sjme_attrInNotNull
const sjme_scritchui_point
* inViewPos
);
217 sjme_errorCode
sjme_scritchui_gtk2_viewSetViewListener(
218 sjme_attrInNotNull sjme_scritchui inState
,
219 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
220 SJME_SCRITCHUI_SET_LISTENER_ARGS(view
));
222 sjme_errorCode
sjme_scritchui_gtk2_windowContentMinimumSize(
223 sjme_attrInNotNull sjme_scritchui inState
,
224 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
225 sjme_attrInPositiveNonZero sjme_jint width
,
226 sjme_attrInPositiveNonZero sjme_jint height
);
228 sjme_errorCode
sjme_scritchui_gtk2_windowNew(
229 sjme_attrInNotNull sjme_scritchui inState
,
230 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
231 sjme_attrInNullable sjme_pointer ignored
);
233 sjme_errorCode
sjme_scritchui_gtk2_windowSetCloseListenerFunc(
234 sjme_attrInNotNull sjme_scritchui inState
,
235 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
236 SJME_SCRITCHUI_SET_LISTENER_ARGS(close
));
238 sjme_errorCode
sjme_scritchui_gtk2_windowSetMenuBar(
239 sjme_attrInNotNull sjme_scritchui inState
,
240 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
241 sjme_attrInNullable sjme_scritchui_uiMenuBar inMenuBar
);
243 sjme_errorCode
sjme_scritchui_gtk2_windowSetVisible(
244 sjme_attrInNotNull sjme_scritchui inState
,
245 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
246 sjme_attrInValue sjme_jboolean isVisible
);
248 /*--------------------------------------------------------------------------*/
252 #ifdef SJME_CXX_SQUIRRELJME_GTK2_H
254 #undef SJME_CXX_SQUIRRELJME_GTK2_H
255 #undef SJME_CXX_IS_EXTERNED
256 #endif /* #ifdef SJME_CXX_SQUIRRELJME_GTK2_H */
257 #endif /* #ifdef __cplusplus */
259 #endif /* SQUIRRELJME_GTK2_H */