motion-macos-screenshothelper 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +56 -0
- data/lib/motion-macos-screenshot_helper.rb +10 -0
- data/lib/project/screenshot_helper.rb +100 -0
- metadata +62 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: d53c26fc23d123da23be8e88e87f93f6bad72326
|
|
4
|
+
data.tar.gz: 41afb45a500129d76e7ca0003716048063050742
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 3155828d0ceff7e31e78d8ecf02bbc8b944631d9a3658b1c655d57ca651fb591cf322daf55d7eb5a9f1862cfa902e158d83f8f87cc6f67c539359cc3979b397e
|
|
7
|
+
data.tar.gz: 82917f750b210a870cbc20a774a4bb19392dd3f73e0e802e46a20a7c226a8b9b07f364d0b7f3c2c5aa7ec711f09ff0b7f640e70b1537993a84730ee643de2c51
|
data/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# motion-macos-screenshothelper
|
|
2
|
+
|
|
3
|
+
A gem for taking automated screenshots in macOS applications written in Rubymotion.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add this line to your application's Gemfile:
|
|
8
|
+
|
|
9
|
+
gem 'motion-macos-screenshothelper'
|
|
10
|
+
|
|
11
|
+
And then execute:
|
|
12
|
+
|
|
13
|
+
$ bundle
|
|
14
|
+
|
|
15
|
+
Or install it yourself as:
|
|
16
|
+
|
|
17
|
+
$ gem install motion-macos-screenshothelper
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Add the ScreenshotHelper tool to your spec files like so:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
describe 'My application' do
|
|
25
|
+
before do
|
|
26
|
+
@app = NSApplication.sharedApplication
|
|
27
|
+
@sh = Motion::ScreenshotHelper.new(my_config)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'takes a screenshot' do
|
|
31
|
+
@sh.shoot.should == true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'takes a screenshot after waiting' do
|
|
35
|
+
# do something import with your GUI
|
|
36
|
+
@sh.pause(1.0) # time in seconds to wait
|
|
37
|
+
@sh.shoot.should == true
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
````
|
|
41
|
+
|
|
42
|
+
You may set the following config options when calling ```Motion::ScreenshotHelper.new`:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
my_config = {
|
|
46
|
+
screenshot_mode: Motion::ScreenshotHelper::SCREENSHOT_MODE_FULLSCREEN, # for full-screenshots
|
|
47
|
+
shots_dir: 'screenshots', # the target dir for the screenshot files
|
|
48
|
+
file_basename: 'screenshot', # the basename for the screenshot files (a counter will be added) e.g. 'screenshot_0.png'
|
|
49
|
+
app_name: NSBundle.mainBundle.infoDictionary['CFBundleName'] # your application name needed for focusing the app with AppleScript
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
ScreenshotHelper will make use of the screencapture command line tool.
|
|
54
|
+
|
|
55
|
+
## Contact
|
|
56
|
+
https://vt-learn.de
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
unless defined?(Motion::Project::Config)
|
|
4
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
|
8
|
+
Motion::Project::App.setup do |app|
|
|
9
|
+
app.files.unshift(Dir.glob(File.join(lib_dir_path, "project/**/*.rb")))
|
|
10
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module Motion
|
|
2
|
+
# A class for taking screenshots in Ruby apps running on the Mac
|
|
3
|
+
class ScreenshotHelper
|
|
4
|
+
|
|
5
|
+
attr_accessor :config
|
|
6
|
+
|
|
7
|
+
SCREENSHOT_MODE_FULLSCREEN = 0
|
|
8
|
+
SCREENSHOT_MODE_MAINWINDOW = 1
|
|
9
|
+
|
|
10
|
+
def initialize(config)
|
|
11
|
+
self.config = default_config.merge(config)
|
|
12
|
+
@counter = 0
|
|
13
|
+
clear_dir
|
|
14
|
+
self
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def default_config
|
|
18
|
+
{
|
|
19
|
+
screenshot_mode: SCREENSHOT_MODE_FULLSCREEN,
|
|
20
|
+
shots_dir: 'screenshots',
|
|
21
|
+
file_basename: 'screenshot',
|
|
22
|
+
app_name: NSBundle.mainBundle.infoDictionary['CFBundleName']
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def target_filename
|
|
27
|
+
"#{config[:shots_dir]}/#{config[:file_basename].to_s}_#{@counter.to_s}.png"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def shoot
|
|
31
|
+
begin
|
|
32
|
+
focus_app
|
|
33
|
+
system screenshot_cmd
|
|
34
|
+
@counter += 1
|
|
35
|
+
rescue Exception => e
|
|
36
|
+
puts "Exception #{e}"
|
|
37
|
+
return false
|
|
38
|
+
end
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def pause(sec=1.0)
|
|
43
|
+
intervall = NSDate.dateWithTimeIntervalSinceNow sec
|
|
44
|
+
NSThread.sleepUntilDate intervall
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def check_shots_dir
|
|
50
|
+
self.config[:shots_dir] = File.absolute_path(config[:shots_dir])
|
|
51
|
+
fail(IOError, "#{config[:shots_dir]} is not a directory") unless File.directory?(ndir)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def app
|
|
55
|
+
NSApplication.sharedApplication
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def screenshot_cmd
|
|
59
|
+
screen_rect = NSScreen.mainScreen.frame
|
|
60
|
+
case config[:screenshot_mode]
|
|
61
|
+
when ScreenshotHelper::SCREENSHOT_MODE_MAINWINDOW
|
|
62
|
+
fr = app_window.frame
|
|
63
|
+
x_origin = fr.origin[0]
|
|
64
|
+
y_origin = screen_rect.size[1] - fr.origin[1] - fr.size[1]
|
|
65
|
+
capture_frame = "#{x_origin},#{y_origin},#{fr.size[0]},#{fr.size[1]}"
|
|
66
|
+
rv = "screencapture -R#{capture_frame} #{target_filename}"
|
|
67
|
+
else
|
|
68
|
+
rv = "screencapture #{target_filename}"
|
|
69
|
+
end
|
|
70
|
+
rv
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def app_window
|
|
74
|
+
return app.mainWindow unless app.mainWindow.nil?
|
|
75
|
+
return app.keyWindow unless app.keyWindow.nil?
|
|
76
|
+
app.windows.first
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def focus_app
|
|
80
|
+
scpt = <<SCPT
|
|
81
|
+
tell application "#{config[:app_name]}"
|
|
82
|
+
activate
|
|
83
|
+
end tell
|
|
84
|
+
SCPT
|
|
85
|
+
osascript scpt
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def osascript(script_src)
|
|
89
|
+
error = Pointer.new('@')
|
|
90
|
+
apple_script = NSAppleScript.alloc.initWithSource(script_src)
|
|
91
|
+
apple_script.executeAndReturnError(error)
|
|
92
|
+
puts "NSAppleScript::error #{error.value.inspect}" unless error.value.nil?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def clear_dir
|
|
96
|
+
cmd = "rm -rf #{(config[:shots_dir] + '/*').dump}"
|
|
97
|
+
system cmd
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: motion-macos-screenshothelper
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Martin Kolb
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2016-11-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
description: A gem for taking automated screenshots in macOS applications written
|
|
28
|
+
in Rubymotion
|
|
29
|
+
email:
|
|
30
|
+
- admin@vt-learn.de
|
|
31
|
+
executables: []
|
|
32
|
+
extensions: []
|
|
33
|
+
extra_rdoc_files: []
|
|
34
|
+
files:
|
|
35
|
+
- README.md
|
|
36
|
+
- lib/motion-macos-screenshot_helper.rb
|
|
37
|
+
- lib/project/screenshot_helper.rb
|
|
38
|
+
homepage: https://vt-learn.de
|
|
39
|
+
licenses:
|
|
40
|
+
- MIT
|
|
41
|
+
metadata: {}
|
|
42
|
+
post_install_message:
|
|
43
|
+
rdoc_options: []
|
|
44
|
+
require_paths:
|
|
45
|
+
- lib
|
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
|
+
requirements:
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '0'
|
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - ">="
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '0'
|
|
56
|
+
requirements: []
|
|
57
|
+
rubyforge_project:
|
|
58
|
+
rubygems_version: 2.5.1
|
|
59
|
+
signing_key:
|
|
60
|
+
specification_version: 4
|
|
61
|
+
summary: This gem lets you take screenshots of your macOS app written in Rubymotion
|
|
62
|
+
test_files: []
|