Mercurial > repos > blastem
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 } |