savio 0.1.4 → 0.1.5

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.
data/lib/savio/Slider.rb DELETED
@@ -1,195 +0,0 @@
1
- module Savio
2
- class Slider
3
- include IORenderable
4
-
5
- attr_reader :length, :min, :max, :size, :value
6
-
7
- @@sliders = []
8
- def self.sliders
9
- @@sliders
10
- end
11
-
12
- def initialize(args = {})
13
- @@sliders.push(self)
14
- super(args)
15
-
16
- @length = args[:length] || 100
17
- @min = args[:min] || 0
18
- @max = args[:max] || 100
19
-
20
- @style = args[:style] || 'knob'
21
- if @style != 'knob' && @style != 'fill'
22
- @style = 'knob'
23
- end
24
-
25
- @value = args[:value] || rand(@min..@max)
26
- @showValue = args[:showValue] || true
27
-
28
- @labelColor = args[:labelColor] || Savio::Colors::White
29
- @sliderColor = args[:sliderColor] || Savio::Colors::Gray
30
- @knobColor = args[:knobColor] || Savio::Colors::Green
31
-
32
- @onChange = Proc.new {}
33
-
34
- build()
35
- end
36
-
37
- def onChange(&proc)
38
- @onChange = proc
39
- end
40
-
41
- def style=(style)
42
- if style == 'knob' || style == 'fill'
43
- @style = style
44
- rebuild()
45
- end
46
- end
47
- def length=(length)
48
- @length = length.clamp(1, Window.width-@x)
49
- rebuild()
50
- end
51
- def showValue=(state)
52
- @showValue = state
53
- rebuild()
54
- end
55
- def labelColor=(c)
56
- @labelColor = c
57
- rebuild()
58
- end
59
- def sliderColor=(c)
60
- @sliderColor = c
61
- rebuild()
62
- end
63
- def knobColor=(c)
64
- @knobColor = c
65
- rebuild()
66
- end
67
- def min=(x)
68
- @min = x
69
- setValue(@value)
70
- end
71
- def max=(x)
72
- @max = x
73
- setValue(@value)
74
- end
75
-
76
- def renderKnobTo(x)
77
- if x.between?(@x, @x+@length)
78
- case @style
79
- when 'knob'
80
- @knob.x = x
81
- when 'fill'
82
- @knob.width = x - @x
83
- end
84
- end
85
- end
86
-
87
- def moveKnob(x)
88
- if x.between?(@x, @x+@length)
89
- renderKnobTo(x)
90
-
91
- to_max = @max
92
- to_min = @min
93
- from_max = @x + @length
94
- from_min = @x
95
- pos = x
96
- @value = (((to_max - to_min) * (pos - from_min)) / (from_max - from_min) + to_min)
97
- if @showValue == true
98
- @label.text = @value.round(2).to_s
99
- end
100
- @onChange.call
101
- end
102
- end
103
-
104
- def value=(value)
105
- setValue(value)
106
- end
107
-
108
- def setValue(value)
109
- if value.between?(@min, @max)
110
- to_max = @x + @length
111
- to_min = @x
112
- from_max = @max.to_f
113
- from_min = @min.to_f
114
- pos = value
115
- knobX = (((to_max - to_min) * (pos - from_min)) / (from_max - from_min) + to_min)
116
- @value = value
117
- if @showValue == true
118
- @label.text = @value.round(2).to_s
119
- end
120
- renderKnobTo(knobX)
121
- else
122
- setValue(@min)
123
- end
124
- end
125
-
126
- def remove()
127
- super()
128
- @sliderLine.remove
129
- @knob.remove
130
- @label.remove
131
- @nameLabel.remove
132
- end
133
-
134
- def add()
135
- super()
136
- @sliderLine.add
137
- @knob.add
138
- @label.add
139
- @nameLabel.add
140
- end
141
-
142
- def build()
143
- @shown = true
144
-
145
- @sliderLine = Line.new(
146
- x1: @x, y1: @y,
147
- x2: @x+@length, y2: @y,
148
- width: @size,
149
- color: @sliderColor,
150
- z: @z
151
- )
152
-
153
- case @style
154
- when 'knob'
155
- @knob = Circle.new(
156
- x: @x, y: @y,
157
- radius: @size * 1.2,
158
- color: @knobColor,
159
- z: @z+1
160
- )
161
- when 'fill'
162
- @knob = Rectangle.new(
163
- x: @x, y: @y,
164
- width: 0 , height: @size,
165
- color: @knobColor,
166
- z: @z+1
167
- )
168
- end
169
-
170
- @label = Text.new(
171
- @value.to_s,
172
- x: @x + @length + @size, y: @y - @size * 1.75,
173
- size: @size * 2.5,
174
- color: @labelColor,
175
- z: @z+1
176
- )
177
-
178
- @label.y = @y + @sliderLine.width / 2 - @label.height / 2
179
-
180
- @nameLabel = Text.new(
181
- @displayName.to_s,
182
- x: @x, y: @y - @size * 3 - @size,
183
- size: @size * 2.5,
184
- color: @labelColor,
185
- z: @z+2
186
- )
187
-
188
- setValue(@value)
189
-
190
- if @showValue == false
191
- @label.remove
192
- end
193
- end
194
- end
195
- end
data/lib/savio/hsv2rgb.rb DELETED
@@ -1,78 +0,0 @@
1
- module Savio
2
- RgbColor = Struct.new(:r, :g, :b) do
3
- def self.newFromHSV(hsv)
4
- rgb = hsv.to_rgb()
5
- return RgbColor.new(rgb.r,rgb.g,rgb.b)
6
- end
7
- def to_hsv()
8
- max = [r, g, b].max
9
- min = [r, g, b].min
10
- delta = max - min
11
- v = max
12
-
13
- if (max != 0.0)
14
- s = delta / max
15
- else
16
- s = 0.0
17
- end
18
-
19
- if (s == 0.0)
20
- h = 0.0
21
- else
22
- if (r == max)
23
- h = 0 + (g - b) / delta
24
- elsif (g == max)
25
- h = 2 + (b - r) / delta
26
- elsif (b == max)
27
- h = 4 + (r - g) / delta
28
- end
29
-
30
- h *= 60.0
31
-
32
- if (h < 0)
33
- h += 360.0
34
- end
35
- end
36
- return HsvColor.new(h,s,v)
37
- end
38
- end
39
- HsvColor = Struct.new(:h, :s, :v) do
40
- def self.newFromRGB(rgb)
41
- hsv = rgb.to_hsv()
42
- return HsvColor.new(hsv.h,hsv.s,hsv.v)
43
- end
44
- def to_rgb()
45
- hue = h.to_f
46
- saturation = s.to_f
47
- value = v.to_f
48
-
49
- chroma = (value * saturation).to_f
50
- hPrime = hue/60.0
51
- x = (chroma * (1 - (hPrime % 2 - 1).abs)).to_f
52
-
53
- if 0 <= hPrime && hPrime < 1
54
- rgb = [chroma, x, 0]
55
- elsif 1 <= hPrime && hPrime < 2
56
- rgb = [x, chroma, 0]
57
- elsif 2 <= hPrime && hPrime < 3
58
- rgb = [0, chroma, x]
59
- elsif 3 <= hPrime && hPrime < 4
60
- rgb = [0, x, chroma]
61
- elsif 4 <= hPrime && hPrime < 5
62
- rgb = [x, 0, chroma]
63
- elsif 5 <= hPrime && hPrime < 6
64
- rgb = [chroma, 0, x]
65
- else
66
- rgb = [0,0,0]
67
- end
68
-
69
- match = (value - chroma).to_f
70
-
71
- rgb[0] = (rgb[0] + match).to_f
72
- rgb[1] = (rgb[1] + match).to_f
73
- rgb[2] = (rgb[2] + match).to_f
74
-
75
- return RgbColor.new(rgb[0],rgb[1],rgb[2])
76
- end
77
- end
78
- end
data/lib/savio/io.rb DELETED
@@ -1,250 +0,0 @@
1
- #Adding ability to sense dragging
2
- on :mouse do |event|
3
- if Savio.listening
4
-
5
- if @dragging == nil
6
- @dragging = {}
7
- end
8
- if event.type == :down
9
- @dragging[event.button] = true
10
- end
11
- if event.type == :up
12
- @dragging[event.button] = false
13
- end
14
-
15
- end
16
- end
17
-
18
- #Button Handler
19
- on :mouse do |event|
20
- if Savio.listening
21
-
22
- if @dragging[:right] == false
23
- Button.buttons.each do |button|
24
- if button.draggingEnabled
25
- button.endDrag()
26
- end
27
- end
28
- end
29
-
30
- if @dragging[:right] == true
31
- Button.buttons.each do |button|
32
-
33
- if button.draggingEnabled
34
- check = Struct.new(:x,:y).new(false,false)
35
- case button.style
36
- when 'box'
37
- check.y = event.y.between?(button.y,button.y+button.height)
38
- check.x = event.x.between?(button.x,button.x+button.length)
39
- when 'badge'
40
- check.x = event.x.between?(button.x-button.size,button.x+button.size)
41
- check.y = event.y.between?(button.y-button.size,button.y+button.size)
42
- end
43
- if check.x && check.y
44
- button.allowDrag = true
45
- end
46
- if button.allowDrag
47
- button.drag(event.x, event.y)
48
- end
49
- end
50
- end
51
- end
52
-
53
- if @dragging[:left] == true
54
- Button.buttons.each do |button|
55
-
56
- if button.shown && button.enabled
57
- check = Struct.new(:x,:y).new(false,false)
58
- case button.style
59
- when 'box'
60
- check.y = event.y.between?(button.y,button.y+button.height)
61
- check.x = event.x.between?(button.x,button.x+button.length)
62
- when 'badge'
63
- check.x = event.x.between?(button.x-button.size,button.x+button.size)
64
- check.y = event.y.between?(button.y-button.size,button.y+button.size)
65
- end
66
- if check.x && check.y
67
- if button.buttonManager == nil
68
- button.toggle
69
- else
70
- button.buttonManager.toggle(button)
71
- end
72
- end
73
- end
74
-
75
- end
76
- end
77
-
78
- end
79
- end
80
-
81
- #Slider Handler
82
- on :mouse do |event|
83
- if Savio.listening
84
-
85
- if @dragging[:right] == false
86
- Slider.sliders.each do |slider|
87
- if slider.draggingEnabled
88
- slider.endDrag()
89
- end
90
- end
91
- end
92
-
93
- if @dragging[:right] == true
94
- Slider.sliders.each do |slider|
95
-
96
- if slider.draggingEnabled
97
- if event.y.between?(slider.y-slider.size,slider.y+slider.size) && event.x.between?(slider.x,slider.x+slider.length)
98
- slider.allowDrag = true
99
- end
100
- if slider.allowDrag
101
- slider.drag(event.x, event.y)
102
- end
103
- end
104
-
105
- end
106
- end
107
-
108
- if @dragging[:left] == true
109
- Slider.sliders.each do |slider|
110
-
111
- if slider.shown && slider.enabled
112
- if event.y.between?(slider.y-slider.size,slider.y+slider.size)
113
- slider.moveKnob(event.x)
114
- end
115
- end
116
-
117
- end
118
- end
119
-
120
- end
121
- end
122
-
123
- #Inputbox Handler
124
- on :mouse do |event|
125
- if Savio.listening
126
-
127
- if @dragging[:right] == false
128
- InputBox.inputBoxs.each do |inputBox|
129
- if inputBox.draggingEnabled
130
- inputBox.endDrag()
131
- end
132
- end
133
- end
134
-
135
- if @dragging[:right] == true
136
- InputBox.inputBoxs.each do |inputBox|
137
-
138
- if inputBox.draggingEnabled
139
- if event.y.between?(inputBox.y,inputBox.y+inputBox.height) && event.x.between?(inputBox.x,inputBox.x+inputBox.length)
140
- inputBox.allowDrag = true
141
- end
142
- if inputBox.allowDrag
143
- inputBox.drag(event.x, event.y)
144
- end
145
- end
146
-
147
- end
148
- end
149
-
150
- if @dragging[:left] == true
151
- InputBox.inputBoxs.each do |inputBox|
152
-
153
- if inputBox.shown && inputBox.enabled
154
- if event.y.between?(inputBox.y,inputBox.y+inputBox.height) && event.x.between?(inputBox.x,inputBox.x+inputBox.length)
155
- inputBox.select
156
- else
157
- inputBox.deselect
158
- end
159
- end
160
-
161
- end
162
- end
163
-
164
- end
165
- end
166
-
167
- on :key do |event|
168
- if Savio.listening
169
-
170
- InputBox.inputBoxs.each do |inputBox|
171
- if inputBox.selected
172
- if event.type == :down
173
- if event.key == "left shift"
174
- inputBox.shift = true
175
- else
176
- inputBox.addKey(event.key)
177
- end
178
- elsif event.type == :up && event.key == "left shift"
179
- inputBox.shift = false
180
- end
181
- end
182
- end
183
-
184
- end
185
- end
186
-
187
- # #ColorPicker Handler
188
- on :mouse do |event|
189
- if Savio.listening
190
-
191
- if @dragging[:right] == false
192
- ColorSlider.colorSliders.each do |slider|
193
- if slider.draggingEnabled
194
- slider.endDrag()
195
- end
196
- end
197
- end
198
-
199
- if @dragging[:right] == true
200
- ColorSlider.colorSliders.each do |slider|
201
-
202
- if slider.draggingEnabled
203
- distance = (event.x-slider.x.to_f) ** 2 + (event.y-slider.y.to_f) ** 2
204
- distance = Math.sqrt(distance)
205
- if distance <= slider.size.to_f
206
- slider.allowDrag = true
207
- end
208
- if slider.allowDrag
209
- slider.drag(event.x, event.y)
210
- end
211
- end
212
-
213
- end
214
- end
215
-
216
- if @dragging[:left] == true
217
- ColorSlider.colorSliders.each do |slider|
218
- if slider.shown && slider.enabled
219
-
220
- distance = (event.x-slider.x.to_f) ** 2 + (event.y-slider.y.to_f) ** 2
221
- distance = Math.sqrt(distance)
222
-
223
- if distance <= slider.size.to_f * 0.7
224
- slider.showOptions
225
- else
226
- slider.hideOptions
227
- end
228
-
229
- if distance >= slider.size * 0.90 && distance <= slider.size * 1.15
230
- if event.x - slider.x == 0
231
- event.x += 0.01
232
- end
233
- angle = Math.atan((event.y.to_f - slider.y.to_f) / (event.x.to_f - slider.x.to_f)).to_f
234
- angle = angle.to_f * 180.0/Math::PI
235
-
236
- if (event.x.to_f - slider.x.to_f) < 0
237
- angle += 180.0
238
- end
239
- if event.y.to_f - slider.y.to_f < 0 && (event.x.to_f - slider.x.to_f) > 0
240
- angle += 360.0
241
- end
242
-
243
- slider.setValue(angle.to_f)
244
- end
245
- end
246
- end
247
- end
248
-
249
- end
250
- end
data/lib/savio/version.rb DELETED
@@ -1,3 +0,0 @@
1
- module Savio
2
- VERSION = "0.1.4"
3
- end
data/lib/savio.rb DELETED
@@ -1,82 +0,0 @@
1
- require "savio/version"
2
- require 'ruby2d'
3
-
4
- module Savio
5
- class Error < StandardError; end
6
-
7
- require 'savio/IORenderable.rb'
8
- require 'savio/InputBox.rb'
9
- require 'savio/Slider.rb'
10
- require 'savio/Button.rb'
11
- require 'savio/ButtonManager.rb'
12
- require 'savio/hsv2rgb.rb'
13
- require 'savio/ColorSlider.rb'
14
- require 'savio/Scene.rb'
15
- require 'savio/Colors.rb'
16
- require 'savio/io.rb'
17
-
18
- def self.makeBool(value)
19
- case value
20
- when true, 'true', 1, '1', 't' then true
21
- when false, 'false', nil, '', 0, '0', 'f' then false
22
- else
23
- return "no"
24
- end
25
- end
26
-
27
- def self.guessType(value)
28
- if value.to_i.to_s == value
29
- return "int"
30
- elsif value.to_f.to_s == value
31
- return "float"
32
- elsif value == "true" || value == "false"
33
- return "bool"
34
- else
35
- return "str"
36
- end
37
- end
38
-
39
- def self.listen()
40
- @listening = true
41
- end
42
-
43
- def self.stop()
44
- @listening = false
45
- end
46
-
47
- def self.listening
48
- return @listening
49
- end
50
-
51
-
52
- @elements = []
53
- def self.elements
54
- @elements
55
- end
56
-
57
- def self.addElement(element)
58
- @elements.push(element)
59
- end
60
-
61
- def self.removeElement(element)
62
- @elements.delete(element)
63
- end
64
-
65
-
66
- def self.hide
67
- @elements.each do |e|
68
- e.remove
69
- end
70
- end
71
-
72
- def self.unhide
73
- @elements.each do |e|
74
- e.add
75
- end
76
- end
77
-
78
-
79
- end
80
-
81
- include Savio
82
- Savio.listen
data/savio.gemspec DELETED
@@ -1,26 +0,0 @@
1
- require_relative 'lib/savio/version'
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "savio"
5
- spec.version = Savio::VERSION
6
- spec.authors = ["TheRealSavi"]
7
- spec.email = ["JohnGibbons167@gmail.com"]
8
-
9
- spec.summary = %q{Adds IO Elements to Ruby2D}
10
- spec.description = %q{Allows you to easily ask for user input through sliders, buttons, text boxs, etc}
11
- spec.homepage = "http://www.gibbonsiv.com"
12
- spec.license = "MIT"
13
- spec.metadata = { "source_code_uri" => "https://github.com/TheRealSavi/savio" }
14
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
15
-
16
-
17
- # Specify which files should be added to the gem when it is released.
18
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
- end
22
- spec.bindir = "exe"
23
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
25
- spec.add_dependency "ruby2d", "~> 0.9.2"
26
- end
data/test.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'savio'
2
-
3
- $colorSlider = ColorSlider.new(x: 200, y:200)
4
-
5
- update do
6
- puts $colorSlider.hsv
7
- end
8
-
9
- show()