comparison io.c @ 1263:5f65a16c23ff

Implement raw screenshot functionality requested in ticket:10
author Michael Pavone <pavone@retrodev.com>
date Sat, 04 Mar 2017 11:50:14 -0800
parents db28178bd2a1
children a4fa897c99ce
comparison
equal deleted inserted replaced
1262:462d9770d467 1263:5f65a16c23ff
72 UI_PREV_SPEED, 72 UI_PREV_SPEED,
73 UI_RELEASE_MOUSE, 73 UI_RELEASE_MOUSE,
74 UI_TOGGLE_KEYBOARD_CAPTURE, 74 UI_TOGGLE_KEYBOARD_CAPTURE,
75 UI_TOGGLE_FULLSCREEN, 75 UI_TOGGLE_FULLSCREEN,
76 UI_SOFT_RESET, 76 UI_SOFT_RESET,
77 UI_SCREENSHOT,
77 UI_EXIT 78 UI_EXIT
78 } ui_action; 79 } ui_action;
79 80
80 typedef enum { 81 typedef enum {
81 MOUSE_ABSOLUTE, //really only useful for menu ROM 82 MOUSE_ABSOLUTE, //really only useful for menu ROM
399 400
400 uint8_t keyboard_connected(sega_io *io) 401 uint8_t keyboard_connected(sega_io *io)
401 { 402 {
402 return is_keyboard(io->ports) || is_keyboard(io->ports+1) || is_keyboard(io->ports+2); 403 return is_keyboard(io->ports) || is_keyboard(io->ports+1) || is_keyboard(io->ports+2);
403 } 404 }
405
406 #ifdef _WIN32
407 #define localtime_r(a,b) localtime(a)
408 #endif
404 409
405 void handle_binding_up(keybinding * binding) 410 void handle_binding_up(keybinding * binding)
406 { 411 {
407 switch(binding->bind_type) 412 switch(binding->bind_type)
408 { 413 {
489 render_toggle_fullscreen(); 494 render_toggle_fullscreen();
490 break; 495 break;
491 case UI_SOFT_RESET: 496 case UI_SOFT_RESET:
492 current_system->soft_reset(current_system); 497 current_system->soft_reset(current_system);
493 break; 498 break;
499 case UI_SCREENSHOT: {
500 char *screenshot_base = tern_find_path(config, "ui\0screenshot_path\0").ptrval;
501 if (!screenshot_base) {
502 screenshot_base = get_home_dir();
503 }
504 time_t now = time(NULL);
505 struct tm local_store;
506 char fname_part[256];
507 char *template = tern_find_path(config, "ui\0screenshot_template\0").ptrval;
508 if (!template) {
509 template = "blastem_%c.ppm";
510 }
511 strftime(fname_part, sizeof(fname_part), template, localtime_r(&now, &local_store));
512 char const *parts[] = {screenshot_base, PATH_SEP, fname_part};
513 char *path = alloc_concat_m(3, parts);
514 render_save_screenshot(path);
515 break;
516 }
494 case UI_EXIT: 517 case UI_EXIT:
495 current_system->request_exit(current_system); 518 current_system->request_exit(current_system);
496 break; 519 break;
497 } 520 }
498 break; 521 break;
663 *ui_out = UI_TOGGLE_KEYBOARD_CAPTURE; 686 *ui_out = UI_TOGGLE_KEYBOARD_CAPTURE;
664 } else if (!strcmp(target + 3, "toggle_fullscreen")) { 687 } else if (!strcmp(target + 3, "toggle_fullscreen")) {
665 *ui_out = UI_TOGGLE_FULLSCREEN; 688 *ui_out = UI_TOGGLE_FULLSCREEN;
666 } else if (!strcmp(target + 3, "soft_reset")) { 689 } else if (!strcmp(target + 3, "soft_reset")) {
667 *ui_out = UI_SOFT_RESET; 690 *ui_out = UI_SOFT_RESET;
691 } else if (!strcmp(target + 3, "screenshot")) {
692 *ui_out = UI_SCREENSHOT;
668 } else if(!strcmp(target + 3, "exit")) { 693 } else if(!strcmp(target + 3, "exit")) {
669 *ui_out = UI_EXIT; 694 *ui_out = UI_EXIT;
670 } else { 695 } else {
671 warning("Unreconized UI binding type %s\n", target); 696 warning("Unreconized UI binding type %s\n", target);
672 return 0; 697 return 0;