comparison nuklear_ui/blastem_nuklear.c @ 1520:cb3c6395b28c nuklear_ui

Initial work on keyboard binding settings view
author Michael Pavone <pavone@retrodev.com>
date Fri, 02 Feb 2018 09:24:01 -0800
parents 31a2997b745e
children a51721408c15
comparison
equal deleted inserted replaced
1501:31a2997b745e 1520:cb3c6395b28c
224 } 224 }
225 } 225 }
226 nk_layout_space_end(context); 226 nk_layout_space_end(context);
227 } 227 }
228 228
229 void binding_loop(char *key, tern_val val, uint8_t valtype, void *data)
230 {
231 if (valtype != TVAL_PTR) {
232 return;
233 }
234 tern_node **binding_lookup = data;
235 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key));
236 }
237
238 void binding_group(struct nk_context *context, char *name, const char **binds, uint32_t num_binds, tern_node *binding_lookup)
239 {
240 nk_layout_row_static(context, 34*num_binds+30, render_width() - 80, 1);
241 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) {
242 nk_layout_row_static(context, 30, render_width()/2 - 80, 2);
243
244 for (int i = 0; i < num_binds; i++)
245 {
246 char *label_alloc = path_extension(binds[i]);
247 const char *label = label_alloc;
248 if (!label) {
249 label = binds[i];
250 }
251 nk_label(context, label, NK_TEXT_LEFT);
252 if (label_alloc) {
253 free(label_alloc);
254 }
255 nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set"));
256 }
257 nk_group_end(context);
258 }
259 }
260
229 void view_key_bindings(struct nk_context *context) 261 void view_key_bindings(struct nk_context *context)
230 { 262 {
231 263 const char *controller1_binds[] = {
264 "gamepads.1.up", "gamepads.1.down", "gamepads.1.left", "gamepads.1.right"
265 "gamepads.1.a", "gamepads.1.b", "gamepads.1.c",
266 "gamepads.1.x", "gamepads.1.y", "gamepads.1.z",
267 "gamepads.1.start", "gamepads.1.mode"
268 };
269 const char *controller2_binds[] = {
270 "gamepads.2.up", "gamepads.2.down", "gamepads.2.left", "gamepads.2.right"
271 "gamepads.2.a", "gamepads.2.b", "gamepads.2.c",
272 "gamepads.2.x", "gamepads.2.y", "gamepads.2.z",
273 "gamepads.2.start", "gamepads.2.mode"
274 };
275 const char *speed_binds[] = {
276 "ui.next_speed", "ui.prev_speed",
277 "ui.set_speed.0", "ui.set_speed.1", "ui.set_speed.2" ,"ui.set_speed.3", "ui.set_speed.4",
278 "ui.set_speed.5", "ui.set_speed.6", "ui.set_speed.7" ,"ui.set_speed.8", "ui.set_speed.9",
279 };
280 const uint32_t NUM_C1_BINDS = sizeof(controller1_binds)/sizeof(*controller1_binds);
281 const uint32_t NUM_C2_BINDS = sizeof(controller2_binds)/sizeof(*controller2_binds);
282 const uint32_t NUM_SPEED_BINDS = sizeof(speed_binds)/sizeof(*speed_binds);
283 static tern_node *binding_lookup;
284 if (!binding_lookup) {
285 tern_node *bindings = tern_find_path(config, "bindings\0keys\0", TVAL_NODE).ptrval;
286 if (bindings) {
287 tern_foreach(bindings, binding_loop, &binding_lookup);
288 }
289 }
290 uint32_t width = render_width();
291 uint32_t height = render_height();
292 if (nk_begin(context, "Keyboard Bindings", nk_rect(0, 0, width, height), 0)) {
293 binding_group(context, "Controller 1", controller1_binds, NUM_C1_BINDS, binding_lookup);
294 binding_group(context, "Controller 2", controller2_binds, NUM_C2_BINDS, binding_lookup);
295 binding_group(context, "Speed Control", speed_binds, NUM_SPEED_BINDS, binding_lookup);
296
297 nk_end(context);
298 }
232 } 299 }
233 void view_controllers(struct nk_context *context) 300 void view_controllers(struct nk_context *context)
234 { 301 {
235 302
236 } 303 }