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