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 * ScritchUI framebuffer interface header.
16 #ifndef SQUIRRELJME_FB_H
17 #define SQUIRRELJME_FB_H
19 #include "sjme/config.h"
20 #include "sjme/debug.h"
21 #include "lib/scritchui/scritchui.h"
22 #include "lib/scritchui/scritchuiImpl.h"
23 #include "lib/scritchui/scritchuiPencil.h"
24 #include "lib/scritchui/scritchuiTypes.h"
28 #ifndef SJME_CXX_IS_EXTERNED
29 #define SJME_CXX_IS_EXTERNED
30 #define SJME_CXX_SQUIRRELJME_FB_H
33 #endif /* #ifdef SJME_CXX_IS_EXTERNED */
34 #endif /* #ifdef __cplusplus */
36 /*--------------------------------------------------------------------------*/
38 /** Framebuffer implementation functions. */
39 extern const sjme_scritchui_implFunctions sjme_scritchui_fbFunctions
;
41 /** The handle for wrapped items. */
42 #define SJME_SUI_FB_H_WRAPPED 0
44 /** The handle for non-wrapped widget state. */
45 #define SJME_SUI_FB_H_WSTATE 1
47 sjme_errorCode
sjme_scritchui_fb_apiInit(
48 sjme_attrInNotNull sjme_scritchui inState
);
51 * Maps the front end for the given base component info.
53 * @param inState The input state.
54 * @param topLevel The top level component.
55 * @param wrapped The bottom level wrapped component.
56 * @return Any resultant error, if any.
59 sjme_errorCode
sjme_scritchui_fb_biMap(
60 sjme_attrInNotNull sjme_scritchui inState
,
61 sjme_attrInNotNull sjme_scritchui_uiCommonBase
* topLevel
,
62 sjme_attrInNotNull sjme_scritchui_uiCommonBase
* wrapped
);
65 * Sets the listener information for wrapping, this stores the callback
66 * and the front end into the framebuffer listener core information. When the
67 * callback is executed, it will pull from this.
69 * @param inState The current state.
70 * @param infoCore The core information from the listener.
71 * @param inListener The listener to set.
72 * @param copyFrontEnd The front end data to copy, is optional.
73 * @param wrappedFrontEnd The front end to set for the wrapper.
74 * @return Any resultant error, if any.
77 sjme_errorCode
sjme_scritchui_fb_biSetListener(
78 sjme_attrInNotNull sjme_scritchui inState
,
79 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
80 sjme_attrInNotNull sjme_scritchui_listener_void
* infoCore
,
81 SJME_SCRITCHUI_SET_LISTENER_ARGS(void),
82 sjme_attrInOutNotNull sjme_frontEnd
* wrappedFrontEnd
);
84 sjme_errorCode
sjme_scritchui_fb_choiceItemInsert(
85 sjme_attrInNotNull sjme_scritchui inState
,
86 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
87 sjme_attrInOutNotNull sjme_jint
* inOutIndex
);
89 sjme_errorCode
sjme_scritchui_fb_choiceItemRemove(
90 sjme_attrInNotNull sjme_scritchui inState
,
91 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
92 sjme_attrInPositive sjme_jint atIndex
);
94 sjme_errorCode
sjme_scritchui_fb_choiceItemSetEnabled(
95 sjme_attrInNotNull sjme_scritchui inState
,
96 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
97 sjme_attrInPositive sjme_jint atIndex
,
98 sjme_attrInNotNull sjme_jboolean isEnabled
);
100 sjme_errorCode
sjme_scritchui_fb_choiceItemSetImage(
101 sjme_attrInNotNull sjme_scritchui inState
,
102 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
103 sjme_attrInPositive sjme_jint atIndex
,
104 sjme_attrInNullable sjme_jint
* inRgb
,
105 sjme_attrInPositive sjme_jint inRgbOff
,
106 sjme_attrInPositiveNonZero sjme_jint inRgbDataLen
,
107 sjme_attrInPositiveNonZero sjme_jint inRgbScanLen
,
108 sjme_attrInPositiveNonZero sjme_jint width
,
109 sjme_attrInPositiveNonZero sjme_jint height
);
111 sjme_errorCode
sjme_scritchui_fb_choiceItemSetSelected(
112 sjme_attrInNotNull sjme_scritchui inState
,
113 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
114 sjme_attrInPositive sjme_jint atIndex
,
115 sjme_attrInNotNull sjme_jboolean isSelected
);
117 sjme_errorCode
sjme_scritchui_fb_choiceItemSetString(
118 sjme_attrInNotNull sjme_scritchui inState
,
119 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
120 sjme_attrInPositive sjme_jint atIndex
,
121 sjme_attrInNullable sjme_lpcstr inString
);
123 sjme_errorCode
sjme_scritchui_fb_componentFocusGrab(
124 sjme_attrInNotNull sjme_scritchui inState
,
125 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
);
127 sjme_errorCode
sjme_scritchui_fb_componentFocusHas(
128 sjme_attrInNotNull sjme_scritchui inState
,
129 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
130 sjme_attrOutNotNull sjme_jboolean
* outHasFocus
);
132 sjme_errorCode
sjme_scritchui_fb_componentPosition(
133 sjme_attrInNotNull sjme_scritchui inState
,
134 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
135 sjme_attrOutNullable sjme_jint
* outX
,
136 sjme_attrOutNullable sjme_jint
* outY
);
138 sjme_errorCode
sjme_scritchui_fb_componentRepaint(
139 sjme_attrInNotNull sjme_scritchui inState
,
140 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
141 sjme_attrInPositive sjme_jint x
,
142 sjme_attrInPositive sjme_jint y
,
143 sjme_attrInPositiveNonZero sjme_jint width
,
144 sjme_attrInPositiveNonZero sjme_jint height
);
146 sjme_errorCode
sjme_scritchui_fb_componentRevalidate(
147 sjme_attrInNotNull sjme_scritchui inState
,
148 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
);
150 sjme_errorCode
sjme_scritchui_fb_componentSetInputListener(
151 sjme_attrInNotNull sjme_scritchui inState
,
152 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
153 SJME_SCRITCHUI_SET_LISTENER_ARGS(input
));
155 sjme_errorCode
sjme_scritchui_fb_componentSetPaintListener(
156 sjme_attrInNotNull sjme_scritchui inState
,
157 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
158 SJME_SCRITCHUI_SET_LISTENER_ARGS(paint
));
160 sjme_errorCode
sjme_scritchui_fb_componentSetSizeListener(
161 sjme_attrInNotNull sjme_scritchui inState
,
162 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
163 SJME_SCRITCHUI_SET_LISTENER_ARGS(size
));
165 sjme_errorCode
sjme_scritchui_fb_componentSetVisibleListener(
166 sjme_attrInNotNull sjme_scritchui inState
,
167 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
168 SJME_SCRITCHUI_SET_LISTENER_ARGS(visible
));
170 sjme_errorCode
sjme_scritchui_fb_componentSize(
171 sjme_attrInNotNull sjme_scritchui inState
,
172 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
173 sjme_attrOutNullable sjme_jint
* outWidth
,
174 sjme_attrOutNullable sjme_jint
* outHeight
);
176 sjme_errorCode
sjme_scritchui_fb_containerAdd(
177 sjme_attrInNotNull sjme_scritchui inState
,
178 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
179 sjme_attrInNotNull sjme_scritchui_uiContainer inContainerData
,
180 sjme_attrInNotNull sjme_scritchui_uiComponent addComponent
);
182 sjme_errorCode
sjme_scritchui_fb_containerRemove(
183 sjme_attrInNotNull sjme_scritchui inState
,
184 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
185 sjme_attrInNotNull sjme_scritchui_uiContainer inContainerData
,
186 sjme_attrInNotNull sjme_scritchui_uiComponent removeComponent
);
188 sjme_errorCode
sjme_scritchui_fb_containerSetBounds(
189 sjme_attrInNotNull sjme_scritchui inState
,
190 sjme_attrInNotNull sjme_scritchui_uiComponent inContainer
,
191 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
192 sjme_attrInPositive sjme_jint x
,
193 sjme_attrInPositive sjme_jint y
,
194 sjme_attrInPositiveNonZero sjme_jint width
,
195 sjme_attrInPositiveNonZero sjme_jint height
);
197 sjme_errorCode
sjme_scritchui_fb_labelSetString(
198 sjme_attrInNotNull sjme_scritchui inState
,
199 sjme_attrInNotNull sjme_scritchui_uiCommon inCommon
,
200 sjme_attrInNullable sjme_lpcstr inString
);
202 sjme_errorCode
sjme_scritchui_fb_lafElementColor(
203 sjme_attrInNotNull sjme_scritchui inState
,
204 sjme_attrInNullable sjme_scritchui_uiComponent inContext
,
205 sjme_attrOutNotNull sjme_jint
* outRGB
,
206 sjme_attrInValue sjme_scritchui_lafElementColorType elementColor
);
208 sjme_errorCode
sjme_scritchui_fb_listNew(
209 sjme_attrInNotNull sjme_scritchui inState
,
210 sjme_attrInNotNull sjme_scritchui_uiList inList
,
211 sjme_attrInNotNull
const sjme_scritchui_impl_initParamList
* init
);
213 sjme_errorCode
sjme_scritchui_fb_loopExecute(
214 sjme_attrInNotNull sjme_scritchui inState
,
215 sjme_attrInNotNull sjme_thread_mainFunc callback
,
216 sjme_attrInNullable sjme_thread_parameter anything
);
218 sjme_errorCode
sjme_scritchui_fb_loopExecuteLater(
219 sjme_attrInNotNull sjme_scritchui inState
,
220 sjme_attrInNotNull sjme_thread_mainFunc callback
,
221 sjme_attrInNullable sjme_thread_parameter anything
);
223 sjme_errorCode
sjme_scritchui_fb_loopExecuteWait(
224 sjme_attrInNotNull sjme_scritchui inState
,
225 sjme_attrInNotNull sjme_thread_mainFunc callback
,
226 sjme_attrInNullable sjme_thread_parameter anything
);
228 sjme_errorCode
sjme_scritchui_fb_menuBarNew(
229 sjme_attrInNotNull sjme_scritchui inState
,
230 sjme_attrInNotNull sjme_scritchui_uiMenuBar inMenuBar
,
231 sjme_attrInNullable sjme_pointer ignored
);
233 sjme_errorCode
sjme_scritchui_fb_menuInsert(
234 sjme_attrInNotNull sjme_scritchui inState
,
235 sjme_attrInNotNull sjme_scritchui_uiMenuKind intoMenu
,
236 sjme_attrInPositive sjme_jint atIndex
,
237 sjme_attrInNotNull sjme_scritchui_uiMenuKind childItem
);
239 sjme_errorCode
sjme_scritchui_fb_menuItemNew(
240 sjme_attrInNotNull sjme_scritchui inState
,
241 sjme_attrInNotNull sjme_scritchui_uiMenuItem inMenuItem
,
242 sjme_attrInNotNull
const sjme_scritchui_impl_initParamMenuItem
* init
);
244 sjme_errorCode
sjme_scritchui_fb_menuNew(
245 sjme_attrInNotNull sjme_scritchui inState
,
246 sjme_attrInNotNull sjme_scritchui_uiMenu inMenu
,
247 sjme_attrInNullable sjme_pointer ignored
);
249 sjme_errorCode
sjme_scritchui_fb_menuRemove(
250 sjme_attrInNotNull sjme_scritchui inState
,
251 sjme_attrInNotNull sjme_scritchui_uiMenuKind fromMenu
,
252 sjme_attrInPositive sjme_jint atIndex
);
254 sjme_errorCode
sjme_scritchui_fb_panelEnableFocus(
255 sjme_attrInNotNull sjme_scritchui inState
,
256 sjme_attrInNotNull sjme_scritchui_uiPanel inPanel
,
257 sjme_attrInValue sjme_jboolean enableFocus
,
258 sjme_attrInValue sjme_jboolean defaultFocus
);
260 sjme_errorCode
sjme_scritchui_fb_panelNew(
261 sjme_attrInNotNull sjme_scritchui inState
,
262 sjme_attrInNotNull sjme_scritchui_uiPanel inPanel
,
263 sjme_attrInNullable sjme_pointer ignored
);
265 sjme_errorCode
sjme_scritchui_fb_screens(
266 sjme_attrInNotNull sjme_scritchui inState
,
267 sjme_attrOutNotNull sjme_scritchui_uiScreen
* outScreens
,
268 sjme_attrInOutNotNull sjme_jint
* inOutNumScreens
);
270 sjme_errorCode
sjme_scritchui_fb_scrollPanelNew(
271 sjme_attrInNotNull sjme_scritchui inState
,
272 sjme_attrInNotNull sjme_scritchui_uiScrollPanel inScrollPanel
,
273 sjme_attrInNullable sjme_pointer ignored
);
275 sjme_errorCode
sjme_scritchui_fb_viewGetView(
276 sjme_attrInNotNull sjme_scritchui inState
,
277 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
278 sjme_attrOutNotNull sjme_scritchui_rect
* outViewRect
);
280 sjme_errorCode
sjme_scritchui_fb_viewSetArea(
281 sjme_attrInNotNull sjme_scritchui inState
,
282 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
283 sjme_attrInNotNull
const sjme_scritchui_dim
* inViewArea
,
284 sjme_attrInNotNull
const sjme_scritchui_dim
* inViewPage
);
286 sjme_errorCode
sjme_scritchui_fb_viewSetView(
287 sjme_attrInNotNull sjme_scritchui inState
,
288 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
289 sjme_attrInNotNull
const sjme_scritchui_point
* inViewPos
);
291 sjme_errorCode
sjme_scritchui_fb_viewSetViewListener(
292 sjme_attrInNotNull sjme_scritchui inState
,
293 sjme_attrInNotNull sjme_scritchui_uiComponent inComponent
,
294 SJME_SCRITCHUI_SET_LISTENER_ARGS(view
));
296 sjme_errorCode
sjme_scritchui_fb_windowContentMinimumSize(
297 sjme_attrInNotNull sjme_scritchui inState
,
298 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
299 sjme_attrInPositiveNonZero sjme_jint width
,
300 sjme_attrInPositiveNonZero sjme_jint height
);
302 sjme_errorCode
sjme_scritchui_fb_windowNew(
303 sjme_attrInNotNull sjme_scritchui inState
,
304 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
305 sjme_attrInNullable sjme_pointer ignored
);
307 sjme_errorCode
sjme_scritchui_fb_windowSetCloseListener(
308 sjme_attrInNotNull sjme_scritchui inState
,
309 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
310 SJME_SCRITCHUI_SET_LISTENER_ARGS(close
));
312 sjme_errorCode
sjme_scritchui_fb_windowSetMenuBar(
313 sjme_attrInNotNull sjme_scritchui inState
,
314 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
315 sjme_attrInNullable sjme_scritchui_uiMenuBar inMenuBar
);
317 sjme_errorCode
sjme_scritchui_fb_windowSetVisible(
318 sjme_attrInNotNull sjme_scritchui inState
,
319 sjme_attrInNotNull sjme_scritchui_uiWindow inWindow
,
320 sjme_attrInValue sjme_jboolean isVisible
);
322 /*--------------------------------------------------------------------------*/
326 #ifdef SJME_CXX_SQUIRRELJME_FB_H
328 #undef SJME_CXX_SQUIRRELJME_FB_H
329 #undef SJME_CXX_IS_EXTERNED
330 #endif /* #ifdef SJME_CXX_SQUIRRELJME_FB_H */
331 #endif /* #ifdef __cplusplus */
333 #endif /* SQUIRRELJME_FB_H */