glimmer-dsl-libui 0.4.4 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -1
  3. data/README.md +932 -160
  4. data/VERSION +1 -1
  5. data/examples/button_counter.rb +2 -1
  6. data/examples/color_button.rb +18 -13
  7. data/examples/color_button2.rb +14 -0
  8. data/examples/date_time_picker.rb +19 -14
  9. data/examples/date_time_picker2.rb +20 -0
  10. data/examples/dynamic_area.rb +77 -90
  11. data/examples/dynamic_area2.rb +14 -12
  12. data/examples/dynamic_area3.rb +90 -0
  13. data/examples/dynamic_area4.rb +95 -0
  14. data/examples/font_button.rb +17 -12
  15. data/examples/font_button2.rb +18 -0
  16. data/examples/form_table.rb +0 -2
  17. data/examples/form_table2.rb +0 -2
  18. data/examples/histogram.rb +93 -91
  19. data/examples/histogram2.rb +109 -0
  20. data/examples/meta_example.rb +17 -6
  21. data/examples/midi_player.rb +5 -6
  22. data/examples/midi_player2.rb +83 -0
  23. data/examples/midi_player3.rb +84 -0
  24. data/examples/tetris.rb +15 -18
  25. data/examples/timer.rb +28 -31
  26. data/examples/timer2.rb +129 -0
  27. data/glimmer-dsl-libui.gemspec +0 -0
  28. data/lib/glimmer/libui/control_proxy/checkbox_proxy.rb +5 -0
  29. data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +5 -0
  30. data/lib/glimmer/libui/control_proxy/combobox_proxy.rb +18 -2
  31. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb +5 -0
  32. data/lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb +5 -0
  33. data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +4 -0
  34. data/lib/glimmer/libui/control_proxy/menu_item_proxy/check_menu_item_proxy.rb +5 -0
  35. data/lib/glimmer/libui/control_proxy/menu_item_proxy/radio_menu_item_proxy.rb +17 -4
  36. data/lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb +20 -0
  37. data/lib/glimmer/libui/control_proxy/slider_proxy.rb +38 -0
  38. data/lib/glimmer/libui/control_proxy/spinbox_proxy.rb +38 -0
  39. data/lib/glimmer/libui/control_proxy.rb +2 -2
  40. metadata +13 -2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.8
@@ -13,7 +13,8 @@ class ButtonCounter
13
13
  window('Hello, Button!', 190, 20) {
14
14
  vertical_box {
15
15
  button {
16
- text <= [self, :count, on_read: ->(count) {"Count: #{count}"}] # data-bind button text to self count, converting to string on read.
16
+ # data-bind button text to self count, converting to string on read.
17
+ text <= [self, :count, on_read: ->(count) {"Count: #{count}"}]
17
18
 
18
19
  on_clicked do
19
20
  self.count += 1
@@ -1,16 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
- include Glimmer
3
+ class ColorButton
4
+ include Glimmer
5
+
6
+ attr_accessor :selected_color
7
+
8
+ def initialize
9
+ @selected_color = :blue
10
+ end
11
+
12
+ def launch
13
+ window('color button', 240) {
14
+ color_button {
15
+ color <=> [self, :selected_color, after_write: ->(color) {p color}]
16
+ }
17
+ }.show
18
+ end
19
+ end
6
20
 
7
- window('color button', 240) {
8
- color_button { |cb|
9
- color :blue
10
-
11
- on_changed do
12
- rgba = cb.color
13
- p rgba
14
- end
15
- }
16
- }.show
21
+ ColorButton.new.launch
@@ -0,0 +1,14 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ include Glimmer
4
+
5
+ window('color button', 240) {
6
+ color_button { |cb|
7
+ color :blue
8
+
9
+ on_changed do
10
+ rgba = cb.color
11
+ p rgba
12
+ end
13
+ }
14
+ }.show
@@ -2,19 +2,24 @@
2
2
 
3
3
  require 'glimmer-dsl-libui'
4
4
 
5
- include Glimmer
6
-
7
- window('Date Time Pickers', 300, 200) {
8
- vertical_box {
9
- date_time_picker { |dtp|
10
- on_changed do
11
- time = dtp.time
12
- p time
13
- end
14
- }
15
- }
5
+ class DateTimePicker
6
+ include Glimmer
7
+
8
+ attr_accessor :picked_time
16
9
 
17
- on_closing do
18
- puts 'Bye Bye'
10
+ def launch
11
+ window('Date Time Pickers', 300, 200) {
12
+ vertical_box {
13
+ date_time_picker {
14
+ time <=> [self, :picked_time, after_write: ->(time) { p time }]
15
+ }
16
+ }
17
+
18
+ on_closing do
19
+ puts 'Bye Bye'
20
+ end
21
+ }.show
19
22
  end
20
- }.show
23
+ end
24
+
25
+ DateTimePicker.new.launch
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('Date Time Pickers', 300, 200) {
8
+ vertical_box {
9
+ date_time_picker { |dtp|
10
+ on_changed do
11
+ time = dtp.time
12
+ p time
13
+ end
14
+ }
15
+ }
16
+
17
+ on_closing do
18
+ puts 'Bye Bye'
19
+ end
20
+ }.show
@@ -1,97 +1,84 @@
1
1
  require 'glimmer-dsl-libui'
2
2
 
3
- include Glimmer
4
-
5
- window('Dynamic Area', 240, 600) {
6
- margined true
3
+ class DynamicArea
4
+ include Glimmer
7
5
 
8
- vertical_box {
9
- label('Rectangle Properties') {
10
- stretchy false
11
- }
12
-
13
- form {
14
- stretchy false
15
-
16
- @x_spinbox = spinbox(0, 1000) {
17
- label 'x'
18
- value 25
19
-
20
- on_changed do
21
- @area.queue_redraw_all
22
- end
23
- }
24
-
25
- @y_spinbox = spinbox(0, 1000) {
26
- label 'y'
27
- value 25
28
-
29
- on_changed do
30
- @area.queue_redraw_all
31
- end
32
- }
33
-
34
- @width_spinbox = spinbox(0, 1000) {
35
- label 'width'
36
- value 150
37
-
38
- on_changed do
39
- @area.queue_redraw_all
40
- end
41
- }
42
-
43
- @height_spinbox = spinbox(0, 1000) {
44
- label 'height'
45
- value 150
46
-
47
- on_changed do
48
- @area.queue_redraw_all
49
- end
50
- }
51
-
52
- @red_spinbox = spinbox(0, 255) {
53
- label 'red'
54
- value 102
55
-
56
- on_changed do
57
- @area.queue_redraw_all
58
- end
59
- }
60
-
61
- @green_spinbox = spinbox(0, 255) {
62
- label 'green'
63
- value 102
64
-
65
- on_changed do
66
- @area.queue_redraw_all
67
- end
68
- }
6
+ attr_accessor :rectangle_x, :rectangle_y, :rectangle_width, :rectangle_height, :rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha
7
+
8
+ def initialize
9
+ @rectangle_x = 25
10
+ @rectangle_y = 25
11
+ @rectangle_width = 150
12
+ @rectangle_height = 150
13
+ @rectangle_red = 102
14
+ @rectangle_green = 102
15
+ @rectangle_blue = 204
16
+ @rectangle_alpha = 100
17
+ end
18
+
19
+ def launch
20
+ window('Dynamic Area', 240, 600) {
21
+ margined true
69
22
 
70
- @blue_spinbox = spinbox(0, 255) {
71
- label 'blue'
72
- value 204
23
+ vertical_box {
24
+ label('Rectangle Properties') {
25
+ stretchy false
26
+ }
73
27
 
74
- on_changed do
75
- @area.queue_redraw_all
76
- end
77
- }
78
-
79
- @alpha_spinbox = spinbox(0, 100) {
80
- label 'alpha'
81
- value 100
28
+ form {
29
+ stretchy false
30
+
31
+ spinbox(0, 1000) {
32
+ label 'x'
33
+ value <=> [self, :rectangle_x, after_write: -> {@area.queue_redraw_all}]
34
+ }
35
+
36
+ spinbox(0, 1000) {
37
+ label 'y'
38
+ value <=> [self, :rectangle_y, after_write: -> {@area.queue_redraw_all}]
39
+ }
40
+
41
+ spinbox(0, 1000) {
42
+ label 'width'
43
+ value <=> [self, :rectangle_width, after_write: -> {@area.queue_redraw_all}]
44
+ }
45
+
46
+ spinbox(0, 1000) {
47
+ label 'height'
48
+ value <=> [self, :rectangle_height, after_write: -> {@area.queue_redraw_all}]
49
+ }
50
+
51
+ spinbox(0, 255) {
52
+ label 'red'
53
+ value <=> [self, :rectangle_red, after_write: -> {@area.queue_redraw_all}]
54
+ }
55
+
56
+ spinbox(0, 255) {
57
+ label 'green'
58
+ value <=> [self, :rectangle_green, after_write: -> {@area.queue_redraw_all}]
59
+ }
60
+
61
+ spinbox(0, 255) {
62
+ label 'blue'
63
+ value <=> [self, :rectangle_blue, after_write: -> {@area.queue_redraw_all}]
64
+ }
65
+
66
+ spinbox(0, 100) {
67
+ label 'alpha'
68
+ value <=> [self, :rectangle_alpha, after_write: -> {@area.queue_redraw_all}]
69
+ }
70
+ }
82
71
 
83
- on_changed do
84
- @area.queue_redraw_all
85
- end
86
- }
87
- }
88
-
89
- @area = area {
90
- on_draw do |area_draw_params|
91
- rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # a dynamic path is added semi-declaratively inside on_draw block
92
- fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
72
+ @area = area {
73
+ on_draw do |area_draw_params|
74
+ rectangle(rectangle_x, rectangle_y, rectangle_width, rectangle_height) { # a dynamic path is added semi-declaratively inside on_draw block
75
+ fill r: rectangle_red, g: rectangle_green, b: rectangle_blue, a: rectangle_alpha / 100.0
76
+ }
77
+ end
93
78
  }
94
- end
95
- }
96
- }
97
- }.show
79
+ }
80
+ }.show
81
+ end
82
+ end
83
+
84
+ DynamicArea.new.launch
@@ -18,7 +18,7 @@ window('Dynamic Area', 240, 600) {
18
18
  value 25
19
19
 
20
20
  on_changed do
21
- @rectangle.x = @x_spinbox.value # updating properties automatically triggers area.queue_redraw_all
21
+ @area.queue_redraw_all
22
22
  end
23
23
  }
24
24
 
@@ -27,7 +27,7 @@ window('Dynamic Area', 240, 600) {
27
27
  value 25
28
28
 
29
29
  on_changed do
30
- @rectangle.y = @y_spinbox.value # updating properties automatically triggers area.queue_redraw_all
30
+ @area.queue_redraw_all
31
31
  end
32
32
  }
33
33
 
@@ -36,7 +36,7 @@ window('Dynamic Area', 240, 600) {
36
36
  value 150
37
37
 
38
38
  on_changed do
39
- @rectangle.width = @width_spinbox.value # updating properties automatically triggers area.queue_redraw_all
39
+ @area.queue_redraw_all
40
40
  end
41
41
  }
42
42
 
@@ -45,7 +45,7 @@ window('Dynamic Area', 240, 600) {
45
45
  value 150
46
46
 
47
47
  on_changed do
48
- @rectangle.height = @height_spinbox.value # updating properties automatically triggers area.queue_redraw_all
48
+ @area.queue_redraw_all
49
49
  end
50
50
  }
51
51
 
@@ -54,7 +54,7 @@ window('Dynamic Area', 240, 600) {
54
54
  value 102
55
55
 
56
56
  on_changed do
57
- @rectangle.fill[:r] = @red_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
57
+ @area.queue_redraw_all
58
58
  end
59
59
  }
60
60
 
@@ -63,7 +63,7 @@ window('Dynamic Area', 240, 600) {
63
63
  value 102
64
64
 
65
65
  on_changed do
66
- @rectangle.fill[:g] = @green_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
66
+ @area.queue_redraw_all
67
67
  end
68
68
  }
69
69
 
@@ -72,7 +72,7 @@ window('Dynamic Area', 240, 600) {
72
72
  value 204
73
73
 
74
74
  on_changed do
75
- @rectangle.fill[:b] = @blue_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
75
+ @area.queue_redraw_all
76
76
  end
77
77
  }
78
78
 
@@ -81,15 +81,17 @@ window('Dynamic Area', 240, 600) {
81
81
  value 100
82
82
 
83
83
  on_changed do
84
- @rectangle.fill[:a] = @alpha_spinbox.value / 100.0 # updating hash properties automatically triggers area.queue_redraw_all
84
+ @area.queue_redraw_all
85
85
  end
86
86
  }
87
87
  }
88
88
 
89
- area {
90
- @rectangle = rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # stable path
91
- fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
92
- }
89
+ @area = area {
90
+ on_draw do |area_draw_params|
91
+ rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # a dynamic path is added semi-declaratively inside on_draw block
92
+ fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
93
+ }
94
+ end
93
95
  }
94
96
  }
95
97
  }.show
@@ -0,0 +1,90 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ class DynamicArea
4
+ include Glimmer
5
+
6
+ attr_accessor :rectangle_x, :rectangle_y, :rectangle_width, :rectangle_height, :rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha
7
+
8
+ def initialize
9
+ @rectangle_x = 25
10
+ @rectangle_y = 25
11
+ @rectangle_width = 150
12
+ @rectangle_height = 150
13
+ @rectangle_red = 102
14
+ @rectangle_green = 102
15
+ @rectangle_blue = 204
16
+ @rectangle_alpha = 100
17
+ end
18
+
19
+ def rectangle_fill
20
+ { r: rectangle_red, g: rectangle_green, b: rectangle_blue, a: rectangle_alpha / 100.0 }
21
+ end
22
+
23
+ def launch
24
+ window('Dynamic Area', 240, 600) {
25
+ margined true
26
+
27
+ vertical_box {
28
+ label('Rectangle Properties') {
29
+ stretchy false
30
+ }
31
+
32
+ form {
33
+ stretchy false
34
+
35
+ @x_spinbox = spinbox(0, 1000) {
36
+ label 'x'
37
+ value <=> [self, :rectangle_x]
38
+ }
39
+
40
+ @y_spinbox = spinbox(0, 1000) {
41
+ label 'y'
42
+ value <=> [self, :rectangle_y]
43
+ }
44
+
45
+ @width_spinbox = spinbox(0, 1000) {
46
+ label 'width'
47
+ value <=> [self, :rectangle_width]
48
+ }
49
+
50
+ @height_spinbox = spinbox(0, 1000) {
51
+ label 'height'
52
+ value <=> [self, :rectangle_height]
53
+ }
54
+
55
+ @red_spinbox = spinbox(0, 255) {
56
+ label 'red'
57
+ value <=> [self, :rectangle_red]
58
+ }
59
+
60
+ @green_spinbox = spinbox(0, 255) {
61
+ label 'green'
62
+ value <=> [self, :rectangle_green]
63
+ }
64
+
65
+ @blue_spinbox = spinbox(0, 255) {
66
+ label 'blue'
67
+ value <=> [self, :rectangle_blue]
68
+ }
69
+
70
+ @alpha_spinbox = spinbox(0, 100) {
71
+ label 'alpha'
72
+ value <=> [self, :rectangle_alpha]
73
+ }
74
+ }
75
+
76
+ area {
77
+ @rectangle = rectangle { # stable implicit path shape
78
+ x <= [self, :rectangle_x]
79
+ y <= [self, :rectangle_y]
80
+ width <= [self, :rectangle_width]
81
+ height <= [self, :rectangle_height]
82
+ fill <= [self, :rectangle_fill, computed_by: [:rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha]]
83
+ }
84
+ }
85
+ }
86
+ }.show
87
+ end
88
+ end
89
+
90
+ DynamicArea.new.launch
@@ -0,0 +1,95 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ include Glimmer
4
+
5
+ window('Dynamic Area', 240, 600) {
6
+ margined true
7
+
8
+ vertical_box {
9
+ label('Rectangle Properties') {
10
+ stretchy false
11
+ }
12
+
13
+ form {
14
+ stretchy false
15
+
16
+ @x_spinbox = spinbox(0, 1000) {
17
+ label 'x'
18
+ value 25
19
+
20
+ on_changed do
21
+ @rectangle.x = @x_spinbox.value # updating properties automatically triggers area.queue_redraw_all
22
+ end
23
+ }
24
+
25
+ @y_spinbox = spinbox(0, 1000) {
26
+ label 'y'
27
+ value 25
28
+
29
+ on_changed do
30
+ @rectangle.y = @y_spinbox.value # updating properties automatically triggers area.queue_redraw_all
31
+ end
32
+ }
33
+
34
+ @width_spinbox = spinbox(0, 1000) {
35
+ label 'width'
36
+ value 150
37
+
38
+ on_changed do
39
+ @rectangle.width = @width_spinbox.value # updating properties automatically triggers area.queue_redraw_all
40
+ end
41
+ }
42
+
43
+ @height_spinbox = spinbox(0, 1000) {
44
+ label 'height'
45
+ value 150
46
+
47
+ on_changed do
48
+ @rectangle.height = @height_spinbox.value # updating properties automatically triggers area.queue_redraw_all
49
+ end
50
+ }
51
+
52
+ @red_spinbox = spinbox(0, 255) {
53
+ label 'red'
54
+ value 102
55
+
56
+ on_changed do
57
+ @rectangle.fill[:r] = @red_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
58
+ end
59
+ }
60
+
61
+ @green_spinbox = spinbox(0, 255) {
62
+ label 'green'
63
+ value 102
64
+
65
+ on_changed do
66
+ @rectangle.fill[:g] = @green_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
67
+ end
68
+ }
69
+
70
+ @blue_spinbox = spinbox(0, 255) {
71
+ label 'blue'
72
+ value 204
73
+
74
+ on_changed do
75
+ @rectangle.fill[:b] = @blue_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
76
+ end
77
+ }
78
+
79
+ @alpha_spinbox = spinbox(0, 100) {
80
+ label 'alpha'
81
+ value 100
82
+
83
+ on_changed do
84
+ @rectangle.fill[:a] = @alpha_spinbox.value / 100.0 # updating hash properties automatically triggers area.queue_redraw_all
85
+ end
86
+ }
87
+ }
88
+
89
+ area {
90
+ @rectangle = rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # stable implicit path shape
91
+ fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
92
+ }
93
+ }
94
+ }
95
+ }.show
@@ -2,17 +2,22 @@
2
2
 
3
3
  require 'glimmer-dsl-libui'
4
4
 
5
- include Glimmer
6
-
7
- window('hello world', 300, 200) {
8
- font_button { |fb|
9
- on_changed do
10
- font_descriptor = fb.font
11
- p font_descriptor
12
- end
13
- }
5
+ class FontButton
6
+ include Glimmer
7
+
8
+ attr_accessor :font_descriptor
14
9
 
15
- on_closing do
16
- puts 'Bye Bye'
10
+ def launch
11
+ window('hello world', 300, 200) {
12
+ font_button {
13
+ font <=> [self, :font_descriptor, after_write: -> { p font_descriptor }]
14
+ }
15
+
16
+ on_closing do
17
+ puts 'Bye Bye'
18
+ end
19
+ }.show
17
20
  end
18
- }.show
21
+ end
22
+
23
+ FontButton.new.launch
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('hello world', 300, 200) {
8
+ font_button { |fb|
9
+ on_changed do
10
+ font_descriptor = fb.font
11
+ p font_descriptor
12
+ end
13
+ }
14
+
15
+ on_closing do
16
+ puts 'Bye Bye'
17
+ end
18
+ }.show
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  class FormTable
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  include Glimmer