Skip to content

Commit 7a76e22

Browse files
committed
avoid calling fireChangedState for Slider
1 parent 77feca5 commit 7a76e22

1 file changed

Lines changed: 32 additions & 24 deletions

File tree

library/control_panel/control_panel.rb

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
# frozen_string_literal: true
21
# Here's a little library for quickly hooking up controls to sketches.
32
# For messing with the parameters and such.
43
# These controls will set instance variables on the sketches.
54
# You can make sliders, checkboxes, buttons, and drop-down menus.
6-
# (optionally) pass the range and default value.
5+
# Optionally pass range and a default value to sliders.
76
module ControlPanel
7+
def self.app_value(name, val)
8+
Processing.app.instance_variable_set("@#{name}", val)
9+
end
10+
811
# class used to create slider elements for control_panel
912
class Slider < javax.swing.JSlider
10-
def initialize(control_panel, name, range, initial_value, proc = nil)
13+
def initialize(control_panel, name, range, initial, proc = nil)
1114
min = range.begin * 100
12-
max = (
13-
(range.exclude_end? && range.begin.respond_to?(:succ)) ?
14-
range.max : range.end) * 100
15+
mx = range.end
16+
mx = range.max if range.exclude_end? && range.begin.respond_to?(:succ)
17+
max = mx * 100
1518
super(min, max)
1619
set_minor_tick_spacing((max - min).abs / 10)
1720
set_paint_ticks true
@@ -20,11 +23,12 @@ def initialize(control_panel, name, range, initial_value, proc = nil)
2023
label = control_panel.add_element(self, name)
2124
add_change_listener do
2225
update_label(label, name, value)
23-
Processing.app.instance_variable_set("@#{name}", value) unless value.nil?
26+
ControlPanel.app_value(name, value)
2427
proc.call(value) if proc
2528
end
26-
set_value(initial_value ? initial_value * 100 : min)
27-
fire_state_changed
29+
val = initial.nil? ? (range.first + range.last) * 50 : initial * 100
30+
set_value(val)
31+
ControlPanel.app_value(name, val)
2832
end
2933

3034
def value
@@ -45,7 +49,7 @@ def initialize(control_panel, name, elements, initial_value, proc = nil)
4549
set_preferred_size(java.awt.Dimension.new(190, 30))
4650
control_panel.add_element(self, name)
4751
add_action_listener do
48-
Processing.app.instance_variable_set("@#{name}", value) unless value.nil?
52+
ControlPanel.app_value(name, value) unless value.nil?
4953
proc.call(value) if proc
5054
end
5155
set_selected_index(initial_value ? elements.index(initial_value) : 0)
@@ -65,11 +69,12 @@ def initialize(control_panel, name, proc = nil)
6569
set_horizontal_alignment javax.swing.SwingConstants::CENTER
6670
control_panel.add_element(self, name, false)
6771
add_action_listener do
68-
Processing.app.instance_variable_set("@#{name}", value) unless value.nil?
72+
ControlPanel.app_value(name, value)
6973
proc.call(value) if proc
7074
end
7175
end
7276

77+
# define value as checkbox state
7378
def value
7479
is_selected
7580
end
@@ -82,7 +87,7 @@ def initialize(control_panel, name, proc = nil)
8287
set_preferred_size(java.awt.Dimension.new(170, 64))
8388
control_panel.add_element(self, name, false, true)
8489
add_action_listener do
85-
Processing.app.send(name.to_s)
90+
Processing.app.send(name)
8691
proc.call(value) if proc
8792
end
8893
end
@@ -98,19 +103,16 @@ def initialize
98103
super()
99104
@elements = []
100105
@panel = javax.swing.JPanel.new(java.awt.FlowLayout.new(1, 0, 0))
101-
set_feel
102-
end
103-
104-
def title(name)
105-
set_title(name)
106+
feel
106107
end
107108

108109
def display
109110
add panel
110111
set_size 200, 30 + (64 * elements.size)
111112
set_default_close_operation javax.swing.JFrame::HIDE_ON_CLOSE
112113
set_resizable false
113-
set_location(Processing.app.width + 10, 0) unless Processing.app.width + 10 > Processing.app.displayWidth
114+
xoffset = Processing.app.width + 10
115+
set_location(xoffset, 0) unless xoffset > Processing.app.displayWidth
114116
panel.visible = true
115117
end
116118

@@ -129,8 +131,12 @@ def remove
129131
dispose
130132
end
131133

132-
def slider(name, range = 0..100, initial_value = nil, &block)
133-
Slider.new(self, name, range, initial_value, block || nil)
134+
def title(name)
135+
set_title(name)
136+
end
137+
138+
def slider(name, range = 0..100, initial = nil, &block)
139+
Slider.new(self, name, range, initial, block || nil)
134140
end
135141

136142
def menu(name, elements, initial_value = nil, &block)
@@ -147,17 +153,17 @@ def button(name, &block)
147153
end
148154

149155
def look_feel(lf)
150-
set_feel(lf)
156+
feel(lf)
151157
end
152158

153159
private
154160

155-
def set_feel(lf = 'metal')
161+
def feel(lf = 'metal')
156162
lafinfo = javax.swing.UIManager.getInstalledLookAndFeels
157-
laf = lafinfo.to_ary.select do |info|
163+
laf = lafinfo.to_ary.find do |info|
158164
info.name =~ Regexp.new(Regexp.escape(lf), Regexp::IGNORECASE)
159165
end
160-
javax.swing.UIManager.setLookAndFeel(laf[0].class_name)
166+
javax.swing.UIManager.setLookAndFeel(laf.class_name)
161167
end
162168
end
163169

@@ -168,6 +174,8 @@ def control_panel
168174
return @control_panel unless block_given?
169175
yield(@control_panel)
170176
@control_panel.display
177+
@control_panel.set_visible true
178+
@control_panel # for legacy compat
171179
end
172180
end
173181
end

0 commit comments

Comments
 (0)