OXYGENHUB
◆ main openmsx / share / scripts / screenshot.tcl
2.1 KiB · Tcl · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
namespace eval openmsx {
2
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
		set filename [::openmsx::internal_screenshot {*}$args2]
18
		message "Screen saved to $filename"
19
	} else {
20
		# disable sprites, wait for one complete frame and take screenshot
21
		set orig_disable_sprites $::disablesprites
22
		set ::disablesprites true
23
		after frame [namespace code [list screenshot_helper1 $orig_disable_sprites $args2]]
24
	}
25
}
26
proc screenshot_helper1 {orig_disable_sprites args2} {
27
	after frame [namespace code [list screenshot_helper2 $orig_disable_sprites $args2]]
28
}
29
proc screenshot_helper2 {orig_disable_sprites args2} {
30
	# take screenshot and restore 'disablesprites' setting
31
	set filename [::openmsx::internal_screenshot {*}$args2]
32
	message "Screen saved to $filename"
33
	set ::disablesprites $orig_disable_sprites
34
}
35
36
set_help_text screenshot \
37
{screenshot                   Write screenshot to file "openmsxNNNN.png"
38
screenshot <filename>        Write screenshot to indicated file
39
screenshot -prefix foo       Write screenshot to file "fooNNNN.png"
40
screenshot -raw -size 640    640x480 raw screenshot (of MSX screen only)
41
screenshot -raw -size 320    320x240 raw screenshot (of MSX screen only)
42
screenshot -raw -size auto   raw screenshot (of MSX screen only), with size determined by screen mode
43
screenshot -raw              raw screenshot (of MSX screen only), default -size (auto)
44
screenshot -with-osd         Include OSD elements in the screenshot
45
screenshot -no-sprites       Don't include sprites in the screenshot
46
screenshot -guess-name       Guess the name of the running software and use it as prefix
47
}
48
49
set_tabcompletion_proc screenshot [namespace code screenshot_tab]
50
proc screenshot_tab {args} {
51
	list "-prefix" "-raw" "-size" "-with-osd" "-no-sprites" "-guess-name"
52
}
53
54
namespace export screenshot
55
56
}; # namespace
57
58
namespace import openmsx::screenshot