screenshot.tcl 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. namespace eval openmsx {
  2. rename ::screenshot old_screenshot
  3. proc screenshot {args} {
  4. set args2 [list]
  5. set sprites true
  6. foreach arg $args {
  7. if {$arg eq "-no-sprites"} {
  8. set sprites false
  9. } elseif {$arg eq "-guess-name"} {
  10. set base [utils::filename_clean [guess_title untitled]]
  11. if {$base ne ""} {lappend args2 -prefix "$base "}
  12. } else {
  13. lappend args2 $arg
  14. }
  15. }
  16. if {$sprites} {
  17. old_screenshot {*}$args2
  18. } else {
  19. # disable sprites, wait for one complete frame and take screenshot
  20. set orig_disable_sprites $::disablesprites
  21. set ::disablesprites true
  22. after frame [namespace code [list screenshot_helper1 $orig_disable_sprites $args2]]
  23. }
  24. }
  25. proc screenshot_helper1 {orig_disable_sprites args2} {
  26. after frame [namespace code [list screenshot_helper2 $orig_disable_sprites $args2]]
  27. }
  28. proc screenshot_helper2 {orig_disable_sprites args2} {
  29. # take screenshot and restore 'disablesprites' setting
  30. old_screenshot {*}$args2
  31. set ::disablesprites $orig_disable_sprites
  32. }
  33. namespace export screenshot
  34. }; # namespace
  35. namespace import openmsx::screenshot