fidgit 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/.gitignore +7 -7
  2. data/.rspec +2 -2
  3. data/CHANGELOG.md +30 -30
  4. data/Gemfile +3 -3
  5. data/LICENSE.txt +19 -19
  6. data/README.textile +139 -139
  7. data/Rakefile +37 -37
  8. data/config/default_schema.yml +216 -216
  9. data/examples/_all_examples.rb +9 -9
  10. data/examples/align_example.rb +55 -55
  11. data/examples/button_and_toggle_button_example.rb +37 -37
  12. data/examples/color_picker_example.rb +16 -16
  13. data/examples/color_well_example.rb +24 -24
  14. data/examples/combo_box_example.rb +23 -23
  15. data/examples/file_dialog_example.rb +41 -41
  16. data/examples/grid_packer_example.rb +28 -28
  17. data/examples/helpers/example_window.rb +16 -16
  18. data/examples/label_example.rb +22 -22
  19. data/examples/list_example.rb +22 -22
  20. data/examples/menu_pane_example.rb +26 -26
  21. data/examples/message_dialog_example.rb +64 -64
  22. data/examples/radio_button_example.rb +36 -36
  23. data/examples/readme_example.rb +31 -31
  24. data/examples/scroll_window_example.rb +48 -48
  25. data/examples/slider_example.rb +33 -33
  26. data/examples/splash_example.rb +41 -41
  27. data/examples/text_area_example.rb +32 -32
  28. data/fidgit.gemspec +35 -35
  29. data/lib/fidgit.rb +50 -50
  30. data/lib/fidgit/chingu_ext/window.rb +5 -5
  31. data/lib/fidgit/cursor.rb +37 -37
  32. data/lib/fidgit/elements/button.rb +112 -112
  33. data/lib/fidgit/elements/color_picker.rb +62 -62
  34. data/lib/fidgit/elements/color_well.rb +38 -38
  35. data/lib/fidgit/elements/combo_box.rb +113 -113
  36. data/lib/fidgit/elements/composite.rb +16 -16
  37. data/lib/fidgit/elements/container.rb +208 -208
  38. data/lib/fidgit/elements/element.rb +297 -297
  39. data/lib/fidgit/elements/file_browser.rb +151 -151
  40. data/lib/fidgit/elements/grid.rb +226 -226
  41. data/lib/fidgit/elements/group.rb +64 -64
  42. data/lib/fidgit/elements/horizontal.rb +11 -11
  43. data/lib/fidgit/elements/image_frame.rb +64 -64
  44. data/lib/fidgit/elements/label.rb +84 -84
  45. data/lib/fidgit/elements/list.rb +46 -46
  46. data/lib/fidgit/elements/main_packer.rb +24 -24
  47. data/lib/fidgit/elements/menu_pane.rb +160 -160
  48. data/lib/fidgit/elements/packer.rb +41 -41
  49. data/lib/fidgit/elements/radio_button.rb +85 -85
  50. data/lib/fidgit/elements/scroll_area.rb +67 -67
  51. data/lib/fidgit/elements/scroll_bar.rb +127 -127
  52. data/lib/fidgit/elements/scroll_window.rb +82 -82
  53. data/lib/fidgit/elements/slider.rb +124 -124
  54. data/lib/fidgit/elements/text_area.rb +493 -493
  55. data/lib/fidgit/elements/text_line.rb +91 -91
  56. data/lib/fidgit/elements/toggle_button.rb +66 -66
  57. data/lib/fidgit/elements/tool_tip.rb +34 -34
  58. data/lib/fidgit/elements/vertical.rb +11 -11
  59. data/lib/fidgit/event.rb +158 -158
  60. data/lib/fidgit/gosu_ext/color.rb +135 -135
  61. data/lib/fidgit/gosu_ext/gosu_module.rb +24 -24
  62. data/lib/fidgit/history.rb +90 -90
  63. data/lib/fidgit/redirector.rb +82 -82
  64. data/lib/fidgit/schema.rb +123 -123
  65. data/lib/fidgit/selection.rb +105 -105
  66. data/lib/fidgit/standard_ext/hash.rb +20 -20
  67. data/lib/fidgit/states/dialog_state.rb +51 -51
  68. data/lib/fidgit/states/file_dialog.rb +24 -24
  69. data/lib/fidgit/states/gui_state.rb +329 -329
  70. data/lib/fidgit/states/message_dialog.rb +60 -60
  71. data/lib/fidgit/version.rb +4 -4
  72. data/lib/fidgit/window.rb +19 -19
  73. data/spec/fidgit/elements/helpers/helper.rb +2 -2
  74. data/spec/fidgit/elements/helpers/tex_play_helper.rb +8 -8
  75. data/spec/fidgit/elements/image_frame_spec.rb +68 -68
  76. data/spec/fidgit/elements/label_spec.rb +36 -36
  77. data/spec/fidgit/event_spec.rb +209 -209
  78. data/spec/fidgit/gosu_ext/color_spec.rb +129 -129
  79. data/spec/fidgit/gosu_ext/helpers/helper.rb +2 -2
  80. data/spec/fidgit/helpers/helper.rb +3 -3
  81. data/spec/fidgit/history_spec.rb +153 -153
  82. data/spec/fidgit/redirector_spec.rb +77 -77
  83. data/spec/fidgit/schema_spec.rb +66 -66
  84. data/spec/fidgit/schema_test.yml +32 -32
  85. metadata +67 -22
@@ -1,47 +1,47 @@
1
- # encoding: utf-8
2
-
3
- module Fidgit
4
- class List < Composite
5
- class Item < RadioButton
6
- end
7
-
8
- event :changed
9
-
10
- def size; @items.size; end
11
- def clear; @items.clear; end
12
-
13
- def initialize(options = {})
14
- options = {
15
- background_color: default(:background_color),
16
- border_color: default(:border_color),
17
- }.merge! options
18
-
19
- super options
20
-
21
- group do
22
- subscribe :changed do |sender, value|
23
- publish :changed, value
24
- end
25
-
26
- @items = vertical spacing: 0
27
- end
28
- end
29
-
30
- # @param [String] text
31
- # @option options [Gosu::Image] :icon
32
- def item(text, value, options = {}, &block)
33
- Item.new(text, value, { parent: @items }.merge!(options), &block)
34
- end
35
-
36
- protected
37
- def layout
38
- super
39
- if @items
40
- max_width = @items.each.to_a.map {|c| c.width }.max || 0
41
- @items.each {|c| c.rect.width = max_width }
42
- end
43
-
44
- nil
45
- end
46
- end
1
+ # encoding: utf-8
2
+
3
+ module Fidgit
4
+ class List < Composite
5
+ class Item < RadioButton
6
+ end
7
+
8
+ event :changed
9
+
10
+ def size; @items.size; end
11
+ def clear; @items.clear; end
12
+
13
+ def initialize(options = {})
14
+ options = {
15
+ background_color: default(:background_color),
16
+ border_color: default(:border_color),
17
+ }.merge! options
18
+
19
+ super options
20
+
21
+ group do
22
+ subscribe :changed do |sender, value|
23
+ publish :changed, value
24
+ end
25
+
26
+ @items = vertical spacing: 0
27
+ end
28
+ end
29
+
30
+ # @param [String] text
31
+ # @option options [Gosu::Image] :icon
32
+ def item(text, value, options = {}, &block)
33
+ Item.new(text, value, { parent: @items }.merge!(options), &block)
34
+ end
35
+
36
+ protected
37
+ def layout
38
+ super
39
+ if @items
40
+ max_width = @items.each.to_a.map {|c| c.width }.max || 0
41
+ @items.each {|c| c.rect.width = max_width }
42
+ end
43
+
44
+ nil
45
+ end
46
+ end
47
47
  end
@@ -1,25 +1,25 @@
1
- require_relative "vertical"
2
-
3
- module Fidgit
4
- # Main container that can contains a single "proper" packing element.
5
- class MainPacker < Vertical
6
- def initialize(options = {})
7
- options = {
8
- width: $window.width,
9
- height: $window.height,
10
- }.merge! options
11
-
12
- super options
13
- end
14
-
15
- def width; $window.width; end
16
- def height; $window.height; end
17
- def width=(value); ; end
18
- def height=(value); ; end
19
-
20
- def add(element)
21
- raise "MainPacker can only contain packing elements" unless element.is_a? Packer
22
- super(element)
23
- end
24
- end
1
+ require_relative "vertical"
2
+
3
+ module Fidgit
4
+ # Main container that can contains a single "proper" packing element.
5
+ class MainPacker < Vertical
6
+ def initialize(options = {})
7
+ options = {
8
+ width: $window.width,
9
+ height: $window.height,
10
+ }.merge! options
11
+
12
+ super options
13
+ end
14
+
15
+ def width; $window.width; end
16
+ def height; $window.height; end
17
+ def width=(value); ; end
18
+ def height=(value); ; end
19
+
20
+ def add(element)
21
+ raise "MainPacker can only contain packing elements" unless element.is_a? Packer
22
+ super(element)
23
+ end
24
+ end
25
25
  end
@@ -1,161 +1,161 @@
1
- module Fidgit
2
- class MenuPane < Composite
3
- # An item within the menu.
4
- class Item < Button
5
- attr_reader :value, :shortcut_text
6
-
7
- # @param (see Button#initialize)
8
- #
9
- # @option (see Button#initialize)
10
- # @param [any] value Value if the user picks this item
11
- # @option options [String] :shortcut_text ('')
12
- def initialize(text, value, options = {})
13
- options = {
14
- enabled: true,
15
- border_color: default(:border_color),
16
- shortcut_text: '',
17
- }.merge! options
18
-
19
- @value = value
20
- @shortcut_text = options[:shortcut_text]
21
-
22
- super(text, options)
23
- end
24
-
25
- def draw_foreground
26
- super
27
-
28
- unless @shortcut_text.empty?
29
- font.draw_rel("#{@shortcut_text}", rect.right - padding_right, y + ((height - font.height) / 2).floor, z, 1, 0, 1, 1, color)
30
- end
31
-
32
- nil
33
- end
34
-
35
- protected
36
- def layout
37
- super
38
-
39
- # Ignore layout request when asked before TextLine has been created.
40
- rect.width += font.text_width(" #{@shortcut_text}") unless @shortcut_text.empty? or @text.nil?
41
-
42
- nil
43
- end
44
- end
45
-
46
- class Separator < Label
47
- # @param (see Item#initialize)
48
- #
49
- # @option (see Item#initialize)
50
- def initialize(options = {})
51
- options = {
52
- height: default(:line_height),
53
- background_color: default(:background_color),
54
- padding: 0,
55
- }.merge! options
56
-
57
- super '', options
58
- end
59
- end
60
-
61
- extend Forwardable
62
-
63
- def_delegators :@items, :each, :clear, :size, :[]
64
-
65
- event :selected
66
-
67
- def index(value); @items.index find(value); end
68
- def x=(value); super(value); recalc; end
69
- def y=(value); super(value); recalc; end
70
-
71
- # @option (see Composite#initialize)
72
- # @option options [Float] :x (cursor x, if in a GuiState)
73
- # @option options [Float] :y (cursor y, if in a GuiState)
74
- # @option options [Boolean] :show (true) Whether to show immediately (show later with #show).
75
- def initialize(options = {}, &block)
76
- options = {
77
- background_color: default(:color),
78
- z: Float::INFINITY,
79
- show: true,
80
- }.merge! options
81
-
82
- state = $window.current_game_state
83
- if state.is_a? GuiState
84
- cursor = $window.current_game_state.cursor
85
- options = {
86
- x: cursor.x,
87
- y: cursor.y,
88
- }.merge! options
89
- end
90
-
91
- @items = nil
92
-
93
- super(options)
94
-
95
- @items = vertical spacing: 0, padding: 0
96
-
97
- if options[:show] and state.is_a? GuiState
98
- show
99
- end
100
- end
101
-
102
- def find(value)
103
- @items.find {|c| c.value == value }
104
- end
105
-
106
- def separator(options = {})
107
- options[:z] = z
108
-
109
- Separator.new({ parent: @items }.merge!(options))
110
- end
111
-
112
- def item(text, value, options = {}, &block)
113
- options = options.merge({
114
- parent: @items,
115
- z: z,
116
- })
117
- item = Item.new(text, value, options, &block)
118
-
119
- item.subscribe :left_mouse_button, method(:item_selected)
120
- item.subscribe :right_mouse_button, method(:item_selected)
121
-
122
- item
123
- end
124
-
125
- def item_selected(sender, x, y)
126
- publish(:selected, sender.value)
127
-
128
- $window.game_state_manager.current_game_state.hide_menu
129
-
130
- nil
131
- end
132
-
133
- def show
134
- $window.game_state_manager.current_game_state.show_menu self
135
- nil
136
- end
137
-
138
- protected
139
- def layout
140
- super
141
-
142
- if @items
143
- # Ensure the menu can't go over the edge of the screen. If it can't be avoided, align with top-left edge of screen.
144
- rect.x = [[x, $window.width - width - padding_right].min, 0].max
145
- rect.y = [[y, $window.height - height - padding_bottom].min, 0].max
146
-
147
- # Move the actual list if the menu has moved to keep on the screen.
148
- @items.x = x + padding_left
149
- @items.y = y + padding_top
150
-
151
- # Ensure that all items are of the same width.
152
- max_width = @items.map(&:width).max || 0
153
- @items.each {|c| c.rect.width = max_width }
154
-
155
- @items.recalc # Move all the items inside the packer to correct ones.
156
- end
157
-
158
- nil
159
- end
160
- end
1
+ module Fidgit
2
+ class MenuPane < Composite
3
+ # An item within the menu.
4
+ class Item < Button
5
+ attr_reader :value, :shortcut_text
6
+
7
+ # @param (see Button#initialize)
8
+ #
9
+ # @option (see Button#initialize)
10
+ # @param [any] value Value if the user picks this item
11
+ # @option options [String] :shortcut_text ('')
12
+ def initialize(text, value, options = {})
13
+ options = {
14
+ enabled: true,
15
+ border_color: default(:border_color),
16
+ shortcut_text: '',
17
+ }.merge! options
18
+
19
+ @value = value
20
+ @shortcut_text = options[:shortcut_text]
21
+
22
+ super(text, options)
23
+ end
24
+
25
+ def draw_foreground
26
+ super
27
+
28
+ unless @shortcut_text.empty?
29
+ font.draw_rel("#{@shortcut_text}", rect.right - padding_right, y + ((height - font.height) / 2).floor, z, 1, 0, 1, 1, color)
30
+ end
31
+
32
+ nil
33
+ end
34
+
35
+ protected
36
+ def layout
37
+ super
38
+
39
+ # Ignore layout request when asked before TextLine has been created.
40
+ rect.width += font.text_width(" #{@shortcut_text}") unless @shortcut_text.empty? or @text.nil?
41
+
42
+ nil
43
+ end
44
+ end
45
+
46
+ class Separator < Label
47
+ # @param (see Item#initialize)
48
+ #
49
+ # @option (see Item#initialize)
50
+ def initialize(options = {})
51
+ options = {
52
+ height: default(:line_height),
53
+ background_color: default(:background_color),
54
+ padding: 0,
55
+ }.merge! options
56
+
57
+ super '', options
58
+ end
59
+ end
60
+
61
+ extend Forwardable
62
+
63
+ def_delegators :@items, :each, :clear, :size, :[]
64
+
65
+ event :selected
66
+
67
+ def index(value); @items.index find(value); end
68
+ def x=(value); super(value); recalc; end
69
+ def y=(value); super(value); recalc; end
70
+
71
+ # @option (see Composite#initialize)
72
+ # @option options [Float] :x (cursor x, if in a GuiState)
73
+ # @option options [Float] :y (cursor y, if in a GuiState)
74
+ # @option options [Boolean] :show (true) Whether to show immediately (show later with #show).
75
+ def initialize(options = {}, &block)
76
+ options = {
77
+ background_color: default(:color),
78
+ z: Float::INFINITY,
79
+ show: true,
80
+ }.merge! options
81
+
82
+ state = $window.current_game_state
83
+ if state.is_a? GuiState
84
+ cursor = $window.current_game_state.cursor
85
+ options = {
86
+ x: cursor.x,
87
+ y: cursor.y,
88
+ }.merge! options
89
+ end
90
+
91
+ @items = nil
92
+
93
+ super(options)
94
+
95
+ @items = vertical spacing: 0, padding: 0
96
+
97
+ if options[:show] and state.is_a? GuiState
98
+ show
99
+ end
100
+ end
101
+
102
+ def find(value)
103
+ @items.find {|c| c.value == value }
104
+ end
105
+
106
+ def separator(options = {})
107
+ options[:z] = z
108
+
109
+ Separator.new({ parent: @items }.merge!(options))
110
+ end
111
+
112
+ def item(text, value, options = {}, &block)
113
+ options = options.merge({
114
+ parent: @items,
115
+ z: z,
116
+ })
117
+ item = Item.new(text, value, options, &block)
118
+
119
+ item.subscribe :left_mouse_button, method(:item_selected)
120
+ item.subscribe :right_mouse_button, method(:item_selected)
121
+
122
+ item
123
+ end
124
+
125
+ def item_selected(sender, x, y)
126
+ publish(:selected, sender.value)
127
+
128
+ $window.game_state_manager.current_game_state.hide_menu
129
+
130
+ nil
131
+ end
132
+
133
+ def show
134
+ $window.game_state_manager.current_game_state.show_menu self
135
+ nil
136
+ end
137
+
138
+ protected
139
+ def layout
140
+ super
141
+
142
+ if @items
143
+ # Ensure the menu can't go over the edge of the screen. If it can't be avoided, align with top-left edge of screen.
144
+ rect.x = [[x, $window.width - width - padding_right].min, 0].max
145
+ rect.y = [[y, $window.height - height - padding_bottom].min, 0].max
146
+
147
+ # Move the actual list if the menu has moved to keep on the screen.
148
+ @items.x = x + padding_left
149
+ @items.y = y + padding_top
150
+
151
+ # Ensure that all items are of the same width.
152
+ max_width = @items.map(&:width).max || 0
153
+ @items.each {|c| c.rect.width = max_width }
154
+
155
+ @items.recalc # Move all the items inside the packer to correct ones.
156
+ end
157
+
158
+ nil
159
+ end
160
+ end
161
161
  end