motion-meter 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a73dbc2e89c3dc3e86692b1ea7439ae35f1f8180
4
+ data.tar.gz: 7146eb4a49718dc49102d61a8a0dea75683bf331
5
+ SHA512:
6
+ metadata.gz: 60c8e04a162e98c5e5f0977f2cf61bc435b158f5ab32c1bc2e88a2a39f1d8c503a5511c82b3138c286c8104245c06187aa9455183f1baa200dd87ca081169347
7
+ data.tar.gz: e9900b8c2a860d8ebd5a199d77f973c50946274b0c9f3e6890c91ecbb242e05db139aa04193d1152bfa8aadeb832045bcab4caaf4aff1a3866cf857626f2d22e
@@ -0,0 +1,73 @@
1
+ # motion-meter
2
+
3
+ A simple bar meter control with color based thresholds, useful for displaying a value such as an audio level according to whatever threshold and color rules you want to setup.
4
+
5
+ ## Requirements
6
+
7
+ * RubyMotion
8
+ * RubyGems
9
+
10
+ ## Setup
11
+
12
+ Add to your Gemfile:
13
+
14
+ ``` shell
15
+ gem 'motion-meter'
16
+ ```
17
+
18
+ Or install manually:
19
+
20
+ * gem install motion-meter
21
+
22
+ ## Usage
23
+
24
+ To setup the control, you can do the following:
25
+
26
+ ```ruby
27
+ @audio_level = Motion::Meter::ThresholdMeter.alloc.initWithFrame([[0, @mainWindow.contentView.bounds.size.height / 2.0], [@mainWindow.contentView.bounds.size.width, 30]])
28
+ @audio_level.add_threshold(-20, -5, NSColor.greenColor)
29
+ @audio_level.add_threshold(-5, 3, NSColor.yellowColor)
30
+ @audio_level.add_threshold(3, 10, NSColor.redColor)
31
+ @audio_level.min_value = -20
32
+ @audio_level.max_value = 10
33
+ @mainWindow.contentView.addSubview(@audio_level)
34
+ ```
35
+
36
+ You can then simple update the value to see it change in real-time:
37
+
38
+ ```ruby
39
+ @audio_level.value = value
40
+ ```
41
+
42
+ ## TODO
43
+
44
+ * Optionally displaying the value
45
+ * Optionally displaying the values of the thresholds along the top or bottom
46
+ * Additional display options/controls for meters, such as a needle display or something more fancy
47
+
48
+ ## Contributors
49
+
50
+ * Elliott Draper
51
+
52
+ ## License
53
+
54
+ Copyright 2015 Elliott Draper <el@kickcode.com>
55
+
56
+ Permission is hereby granted, free of charge, to any person obtaining
57
+ a copy of this software and associated documentation files (the
58
+ "Software"), to deal in the Software without restriction, including
59
+ without limitation the rights to use, copy, modify, merge, publish,
60
+ distribute, sublicense, and/or sell copies of the Software, and to
61
+ permit persons to whom the Software is furnished to do so, subject to
62
+ the following conditions:
63
+
64
+ The above copyright notice and this permission notice shall be
65
+ included in all copies or substantial portions of the Software.
66
+
67
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
68
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
69
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
70
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
71
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
72
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
73
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,7 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ Motion::Project::App.setup do |app|
6
+ app.files = [Dir.glob(File.join(File.dirname(__FILE__), "motion/**/*.rb")), app.files].flatten
7
+ end
@@ -0,0 +1,36 @@
1
+ class Motion::Meter::ThresholdMeter < NSView
2
+ Threshold = Struct.new(:start, :finish, :color)
3
+
4
+ attr_accessor :min_value, :max_value, :value, :thresholds
5
+
6
+ def add_threshold(start, finish, color)
7
+ self.thresholds ||= []
8
+ self.thresholds << Threshold.new(start, finish, color)
9
+ end
10
+
11
+ def range
12
+ self.max_value - self.min_value
13
+ end
14
+
15
+ def draw_width
16
+ (self.bounds.size.width / self.range.to_f) * ((self.value || 0) - self.min_value)
17
+ end
18
+
19
+ def value=(value)
20
+ @value = value
21
+ self.needsDisplay = true
22
+ end
23
+
24
+ def drawRect(frame)
25
+ frame.size = [self.draw_width, frame.size.height]
26
+
27
+ if (self.thresholds || []).any?
28
+ threshold = self.thresholds.detect { |threshold| threshold.start < (self.value || 0) && threshold.finish > (self.value || 0) }
29
+ color = threshold.color unless threshold.nil?
30
+ end
31
+
32
+ (color || NSColor.greenColor).setFill
33
+
34
+ NSRectFill(frame)
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ module Motion
2
+ module Meter
3
+ VERSION = 1.0
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-meter
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Elliott Draper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: motion-meter is a simple bar meter control with color based thresholds,
14
+ useful for displaying a value such as an audio level according to whatever threshold
15
+ and color rules you want to setup.
16
+ email: el@kickcode.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - lib/motion-meter.rb
23
+ - lib/motion/meter/threshold_meter.rb
24
+ - lib/motion/meter/version.rb
25
+ homepage:
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.2.2
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: Simple visual meter control with color based thresholds
49
+ test_files: []