glimmer-dsl-libui 0.4.2 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +1359 -200
  4. data/VERSION +1 -1
  5. data/examples/basic_entry.rb +27 -24
  6. data/examples/basic_entry2.rb +31 -0
  7. data/examples/color_button.rb +18 -13
  8. data/examples/color_button2.rb +14 -0
  9. data/examples/dynamic_area.rb +77 -90
  10. data/examples/dynamic_area2.rb +14 -12
  11. data/examples/dynamic_area3.rb +90 -0
  12. data/examples/dynamic_area4.rb +95 -0
  13. data/examples/font_button.rb +17 -12
  14. data/examples/font_button2.rb +18 -0
  15. data/examples/form.rb +42 -30
  16. data/examples/form2.rb +37 -0
  17. data/examples/form_table.rb +100 -87
  18. data/examples/form_table2.rb +93 -0
  19. data/examples/histogram.rb +93 -91
  20. data/examples/histogram2.rb +109 -0
  21. data/examples/login.rb +45 -39
  22. data/examples/login2.rb +55 -0
  23. data/examples/login3.rb +65 -0
  24. data/examples/login4.rb +61 -0
  25. data/examples/login5.rb +43 -0
  26. data/examples/meta_example.rb +9 -6
  27. data/examples/method_based_custom_keyword.rb +8 -15
  28. data/examples/method_based_custom_keyword2.rb +97 -0
  29. data/examples/timer.rb +28 -31
  30. data/examples/timer2.rb +129 -0
  31. data/glimmer-dsl-libui.gemspec +0 -0
  32. data/lib/glimmer/dsl/libui/data_binding_expression.rb +4 -6
  33. data/lib/glimmer/libui/attributed_string.rb +3 -0
  34. data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +5 -0
  35. data/lib/glimmer/libui/control_proxy/entry_proxy.rb +5 -0
  36. data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +4 -0
  37. data/lib/glimmer/libui/control_proxy/multiline_entry_proxy.rb +5 -0
  38. data/lib/glimmer/libui/control_proxy/slider_proxy.rb +38 -0
  39. data/lib/glimmer/libui/control_proxy/spinbox_proxy.rb +38 -0
  40. data/lib/glimmer/libui/control_proxy.rb +4 -0
  41. data/lib/glimmer/libui/data_bindable.rb +39 -0
  42. data/lib/glimmer/libui/shape.rb +2 -0
  43. metadata +19 -2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.6
@@ -2,30 +2,33 @@
2
2
 
3
3
  require 'glimmer-dsl-libui'
4
4
 
5
- include Glimmer
6
-
7
- window('Basic Entry', 300, 50) {
8
- horizontal_box {
9
- e = entry {
10
- # stretchy true # Smart default option for appending to horizontal_box
11
-
12
- on_changed do
13
- puts e.text
14
- $stdout.flush # For Windows
15
- end
16
- }
17
-
18
- button('Button') {
19
- stretchy false # stretchy property is available when control is nested under horizontal_box
5
+ class BasicEntry
6
+ include Glimmer
7
+
8
+ attr_accessor :entry_text
9
+
10
+ def launch
11
+ window('Basic Entry', 300, 50) {
12
+ horizontal_box {
13
+ entry {
14
+ # stretchy true # Smart default option for appending to horizontal_box
15
+ text <=> [self, :entry_text, after_write: ->(text) {puts text; $stdout.flush}] # bidirectional data-binding between text property and entry_text attribute, printing after write to model.
16
+ }
17
+
18
+ button('Button') {
19
+ stretchy false # stretchy property is available when control is nested under horizontal_box
20
+
21
+ on_clicked do
22
+ msg_box('You entered', entry_text)
23
+ end
24
+ }
25
+ }
20
26
 
21
- on_clicked do
22
- text = e.text
23
- msg_box('You entered', text)
27
+ on_closing do
28
+ puts 'Bye Bye'
24
29
  end
25
- }
26
- }
27
-
28
- on_closing do
29
- puts 'Bye Bye'
30
+ }.show
30
31
  end
31
- }.show
32
+ end
33
+
34
+ BasicEntry.new.launch
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window('Basic Entry', 300, 50) {
8
+ horizontal_box {
9
+ e = entry {
10
+ # stretchy true # Smart default option for appending to horizontal_box
11
+
12
+ on_changed do
13
+ puts e.text
14
+ $stdout.flush # For Windows
15
+ end
16
+ }
17
+
18
+ button('Button') {
19
+ stretchy false # stretchy property is available when control is nested under horizontal_box
20
+
21
+ on_clicked do
22
+ text = e.text
23
+ msg_box('You entered', text)
24
+ end
25
+ }
26
+ }
27
+
28
+ on_closing do
29
+ puts 'Bye Bye'
30
+ end
31
+ }.show
@@ -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
@@ -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