fidgit 0.0.2alpha

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.
Files changed (87) hide show
  1. data/.gitignore +8 -0
  2. data/.rspec +2 -0
  3. data/COPYING.txt +674 -0
  4. data/Gemfile +4 -0
  5. data/README.textile +138 -0
  6. data/Rakefile +38 -0
  7. data/config/default_schema.yml +180 -0
  8. data/examples/_all_examples.rb +9 -0
  9. data/examples/align_example.rb +56 -0
  10. data/examples/button_and_toggle_button_example.rb +27 -0
  11. data/examples/color_picker_example.rb +17 -0
  12. data/examples/color_well_example.rb +25 -0
  13. data/examples/combo_box_example.rb +24 -0
  14. data/examples/file_dialog_example.rb +42 -0
  15. data/examples/grid_packer_example.rb +29 -0
  16. data/examples/helpers/example_window.rb +17 -0
  17. data/examples/label_example.rb +17 -0
  18. data/examples/list_example.rb +23 -0
  19. data/examples/media/images/head_icon.png +0 -0
  20. data/examples/menu_pane_example.rb +27 -0
  21. data/examples/message_dialog_example.rb +65 -0
  22. data/examples/radio_button_example.rb +37 -0
  23. data/examples/readme_example.rb +32 -0
  24. data/examples/scroll_window_example.rb +49 -0
  25. data/examples/slider_example.rb +30 -0
  26. data/examples/splash_example.rb +42 -0
  27. data/examples/text_area_example.rb +28 -0
  28. data/fidgit.gemspec +28 -0
  29. data/lib/fidgit.rb +4 -0
  30. data/lib/fidgit/chingu_ext/window.rb +6 -0
  31. data/lib/fidgit/clipboard.rb +23 -0
  32. data/lib/fidgit/cursor.rb +38 -0
  33. data/lib/fidgit/elements/button.rb +68 -0
  34. data/lib/fidgit/elements/color_picker.rb +63 -0
  35. data/lib/fidgit/elements/color_well.rb +39 -0
  36. data/lib/fidgit/elements/combo_box.rb +85 -0
  37. data/lib/fidgit/elements/composite.rb +17 -0
  38. data/lib/fidgit/elements/container.rb +187 -0
  39. data/lib/fidgit/elements/element.rb +252 -0
  40. data/lib/fidgit/elements/file_browser.rb +152 -0
  41. data/lib/fidgit/elements/grid_packer.rb +219 -0
  42. data/lib/fidgit/elements/group.rb +66 -0
  43. data/lib/fidgit/elements/horizontal_packer.rb +12 -0
  44. data/lib/fidgit/elements/label.rb +77 -0
  45. data/lib/fidgit/elements/list.rb +47 -0
  46. data/lib/fidgit/elements/menu_pane.rb +149 -0
  47. data/lib/fidgit/elements/packer.rb +42 -0
  48. data/lib/fidgit/elements/radio_button.rb +86 -0
  49. data/lib/fidgit/elements/scroll_area.rb +75 -0
  50. data/lib/fidgit/elements/scroll_bar.rb +114 -0
  51. data/lib/fidgit/elements/scroll_window.rb +92 -0
  52. data/lib/fidgit/elements/slider.rb +119 -0
  53. data/lib/fidgit/elements/text_area.rb +351 -0
  54. data/lib/fidgit/elements/toggle_button.rb +67 -0
  55. data/lib/fidgit/elements/tool_tip.rb +35 -0
  56. data/lib/fidgit/elements/vertical_packer.rb +12 -0
  57. data/lib/fidgit/event.rb +99 -0
  58. data/lib/fidgit/gosu_ext/color.rb +123 -0
  59. data/lib/fidgit/history.rb +85 -0
  60. data/lib/fidgit/redirector.rb +83 -0
  61. data/lib/fidgit/schema.rb +123 -0
  62. data/lib/fidgit/selection.rb +106 -0
  63. data/lib/fidgit/standard_ext/hash.rb +21 -0
  64. data/lib/fidgit/states/dialog_state.rb +42 -0
  65. data/lib/fidgit/states/file_dialog.rb +24 -0
  66. data/lib/fidgit/states/gui_state.rb +301 -0
  67. data/lib/fidgit/states/message_dialog.rb +61 -0
  68. data/lib/fidgit/thumbnail.rb +29 -0
  69. data/lib/fidgit/version.rb +5 -0
  70. data/lib/fidgit/window.rb +19 -0
  71. data/media/images/arrow.png +0 -0
  72. data/media/images/file_directory.png +0 -0
  73. data/media/images/file_file.png +0 -0
  74. data/media/images/pixel.png +0 -0
  75. data/spec/fidgit/elements/helpers/helper.rb +3 -0
  76. data/spec/fidgit/elements/label_spec.rb +49 -0
  77. data/spec/fidgit/event_spec.rb +149 -0
  78. data/spec/fidgit/gosu_ext/color_spec.rb +130 -0
  79. data/spec/fidgit/gosu_ext/helpers/helper.rb +3 -0
  80. data/spec/fidgit/helpers/helper.rb +4 -0
  81. data/spec/fidgit/helpers/tex_play_helper.rb +9 -0
  82. data/spec/fidgit/history_spec.rb +144 -0
  83. data/spec/fidgit/redirector_spec.rb +78 -0
  84. data/spec/fidgit/schema_spec.rb +67 -0
  85. data/spec/fidgit/schema_test.yml +32 -0
  86. data/spec/fidgit/thumbnail_spec.rb +50 -0
  87. metadata +177 -0
@@ -0,0 +1,17 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ class ExampleState < Fidgit::GuiState
4
+ def initialize
5
+ super
6
+
7
+ pack :vertical do
8
+ my_label = label 'No color picked'
9
+
10
+ color_picker(width: 100) do |sender, color|
11
+ my_label.text = color.to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ ExampleWindow.new.show
@@ -0,0 +1,25 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ class ExampleState < Fidgit::GuiState
4
+ def initialize
5
+ super
6
+
7
+ pack :vertical do
8
+ my_label = label "No color selected."
9
+
10
+ group do
11
+ pack :grid, num_columns: 15, padding: 0, spacing: 4 do
12
+ 150.times do
13
+ color_well(color: Gosu::Color.rgb(rand(255), rand(255), rand(255)))
14
+ end
15
+ end
16
+
17
+ subscribe :changed do |sender, color|
18
+ my_label.text = color.to_s
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ ExampleWindow.new.show
@@ -0,0 +1,24 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Example for Button and ToggleButton
4
+ class ExampleState < Fidgit::GuiState
5
+ def initialize
6
+ super
7
+
8
+ pack :vertical do
9
+ my_label = label "Label", tip: "I'm a label"
10
+
11
+ combo_box(value: 1, tip: "I'm a combo box; press me and make a selection!") do
12
+ subscribe :changed do |sender, value|
13
+ my_label.text = "Chose #{value}!"
14
+ end
15
+
16
+ item "One", 1
17
+ item "Two", 2
18
+ item "Three", 3
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ ExampleWindow.new.show
@@ -0,0 +1,42 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+
4
+ Fidgit::Element.schema.merge_elements!(Element: { font_size: 15 })
5
+
6
+ class ExampleState < Fidgit::GuiState
7
+ def initialize
8
+ super
9
+
10
+ container.background_color = Gosu::Color.rgb(50, 50, 50)
11
+ pack :vertical, align: :center do
12
+ full_base_directory = ''
13
+ restricted_base_directory = File.expand_path(File.join(__FILE__, '..', '..'))
14
+ directory = File.join(restricted_base_directory, 'media', 'images')
15
+
16
+ my_label = label "No files are actually loaded or saved by this example"
17
+ button("Load...(limited path access)") do
18
+ file_dialog(:open, base_directory: restricted_base_directory, directory: directory, pattern: "*.png") do |result, file|
19
+ case result
20
+ when :open
21
+ my_label.text = "Loaded #{file}"
22
+ when :cancel
23
+ my_label.text = "Loading cancelled"
24
+ end
25
+ end
26
+ end
27
+
28
+ button("Save...(unrestricted path access)") do
29
+ file_dialog(:save, base_directory: full_base_directory, directory: directory, pattern: "*.png") do |result, file|
30
+ case result
31
+ when :save
32
+ my_label.text = "Saved #{file}"
33
+ when :cancel
34
+ my_label.text = "Save cancelled"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ ExampleWindow.new.show
@@ -0,0 +1,29 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ class ExampleState < Fidgit::GuiState
4
+ BORDER_COLOR = Gosu::Color.rgb(255, 0, 0)
5
+ FIXED_NUM = 5
6
+ NUM_CELLS = 17
7
+
8
+ def initialize
9
+ super
10
+
11
+ pack :vertical do
12
+ label "Grid with #{FIXED_NUM} columns"
13
+ pack :grid, num_columns: FIXED_NUM, border_color: BORDER_COLOR, cell_border_color: Gosu::Color.rgba(0, 255, 0, 255), cell_border_thickness: 1 do
14
+ NUM_CELLS.times do |i|
15
+ label "Cell #{i}", font_size: rand(15) + 15, border_color: BORDER_COLOR, border_thickness: 1
16
+ end
17
+ end
18
+
19
+ label "Grid with #{FIXED_NUM} rows"
20
+ pack :grid, num_rows: FIXED_NUM, border_color: BORDER_COLOR, cell_background_color: Gosu::Color.rgba(0, 100, 100, 255) do
21
+ NUM_CELLS.times do |i|
22
+ label "Cell #{i}", font_size: rand(15) + 15, border_color: BORDER_COLOR, border_thickness: 1
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ ExampleWindow.new.show
@@ -0,0 +1,17 @@
1
+ require_relative '../../lib/fidgit'
2
+
3
+ media_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'media'))
4
+ Gosu::Image.autoload_dirs << File.join(media_dir, 'images')
5
+ Gosu::Sample.autoload_dirs << File.join(media_dir, 'samples')
6
+ Gosu::Font.autoload_dirs << File.join(media_dir, 'fonts')
7
+
8
+ class ExampleWindow < Chingu::Window
9
+ def initialize(options = {})
10
+ super(640, 480, false)
11
+
12
+ on_input(:escape) { close }
13
+
14
+ caption = "#{File.basename($0).chomp(".rb").tr('_', ' ')} #{ENV['FIDGIT_EXAMPLES_TEXT']}"
15
+ push_game_state ExampleState
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Labels can have text and/or icons.
4
+ class ExampleState < Fidgit::GuiState
5
+ def initialize
6
+ super
7
+
8
+ pack :vertical, background_color: Gosu::Color.rgb(255, 0, 0) do
9
+ label "Hello!", tip: 'A label with text'
10
+ label "Hello!", icon: Gosu::Image["head_icon.png"], tip: 'A label with text & icon'
11
+ label '', icon: Gosu::Image["head_icon.png"], tip: 'A label with just icon'
12
+ label '', background_color: Gosu::Color.rgb(0, 255, 0), tip: 'No text or icon'
13
+ end
14
+ end
15
+ end
16
+
17
+ ExampleWindow.new.show
@@ -0,0 +1,23 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Labels can have text and/or icons.
4
+ class ExampleState < Fidgit::GuiState
5
+ def initialize
6
+ super
7
+
8
+ pack :vertical do
9
+ my_label = label "No clicky"
10
+
11
+ list do
12
+ item "chunky bacon", :CHUNKYBACON, tip: "You prefer Chunky Bacon, don't you?"
13
+ item "lentils", :LENTILS, tip: "Lentils? Well, I suppose someone has to like them"
14
+
15
+ subscribe :changed do |sender, value|
16
+ my_label.text = "I like #{value} more than anything in the world!"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ ExampleWindow.new.show
@@ -0,0 +1,27 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Labels can have text and/or icons.
4
+ class ExampleState < Fidgit::GuiState
5
+ def initialize
6
+ super
7
+
8
+ pack :vertical do
9
+ my_label = label "Right click to open context menu"
10
+
11
+ my_label.subscribe :released_right_mouse_button do
12
+ menu do
13
+ item "Chunky bacon", :CHUNKY_BACON, shortcut: "Ctrl-^-*"
14
+ separator
15
+ item "Lentils", :LENTILS, shortcut: "Alt-F15"
16
+ item "Tepid gruel", :GRUEL, shortcut: "CenterMeta"
17
+
18
+ subscribe :selected do |sender, value|
19
+ my_label.text = "I like #{value} more than anything. Mmmm!"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ ExampleWindow.new.show
@@ -0,0 +1,65 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Example for Button and ToggleButton
4
+ class ExampleState < Fidgit::GuiState
5
+ def initialize
6
+ super
7
+
8
+ pack :vertical do
9
+ my_label = label "Why not open a dialog? You know you want to!", tip: "I'm a label"
10
+
11
+ button("Open an ok message dialog") do
12
+ message "System shutdown immanent"
13
+ end
14
+
15
+ button("Open an ok/cancel message dialog") do
16
+ message("Really 'rm -rf .'?", type: :ok_cancel) do |result|
17
+ my_label.text = case result
18
+ when :ok then "All your base are belong to us!"
19
+ when :cancel then "Cancelled"
20
+ end
21
+ end
22
+ end
23
+
24
+ button("Open a yes/no message dialog") do
25
+ message("Do you like any sorts of cheese? Even Government cheese counts, you know!", type: :yes_no, yes_text: "Yay!", no_text: "Nay!") do |result|
26
+ my_label.text = case result
27
+ when :yes then "You like cheese"
28
+ when :no then "You don't like cheese"
29
+ end
30
+ end
31
+ end
32
+
33
+ button("Open a yes/no/cancel message dialog") do
34
+ message("Do you know what you are doing?", type: :yes_no_cancel) do |result|
35
+ my_label.text = case result
36
+ when :yes then "I'm not convinced you know what you are doing"
37
+ when :no then "At least you are aware of your own shortcomings"
38
+ when :cancel then "Don't avoid the question!"
39
+ end
40
+ end
41
+ end
42
+
43
+ button("Open quit/cancel message dialog") do
44
+ message("Really leave us?", type: :quit_cancel) do |result|
45
+ my_label.text = case result
46
+ when :quit then "Quit! Bye!"
47
+ when :cancel then "Oh, you are staying? Yay!"
48
+ end
49
+ end
50
+ end
51
+
52
+ button("Open quit/save/cancel message dialog") do
53
+ message("You have unsaved data.\nSave before quitting?", type: :quit_save_cancel) do |result|
54
+ my_label.text = case result
55
+ when :quit then "File discarded and quit"
56
+ when :save then "File saved and quit"
57
+ when :cancel then "Nothing happened. You should be more committed"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ ExampleWindow.new.show
@@ -0,0 +1,37 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ class ExampleState < Fidgit::GuiState
4
+ def initialize
5
+ super
6
+
7
+ pack :vertical do
8
+ my_label = label "No button selected"
9
+
10
+ button("Deselect") do
11
+ @group.value = nil
12
+ end
13
+
14
+ button("Select #7") do
15
+ @group.value = 7
16
+ end
17
+
18
+ @group = group do
19
+ pack :grid, num_columns: 5, padding: 0 do
20
+ 15.times do |i|
21
+ radio_button "##{i}", i, width: 60
22
+ end
23
+ end
24
+
25
+ subscribe :changed do |sender, value|
26
+ my_label.text = if value
27
+ "Button #{value.to_s} selected"
28
+ else
29
+ "No button selected"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ ExampleWindow.new.show
@@ -0,0 +1,32 @@
1
+ require_relative "../lib/fidgit"
2
+
3
+ # Normally, you'd load this from the gem using:
4
+ # require 'fidgit'
5
+
6
+ class MyGame < Chingu::Window
7
+ def initialize
8
+ super(640, 480, false)
9
+
10
+ # To use the Fidgit features, a Fidgit::GuiState must be active.
11
+ push_game_state MyGuiState
12
+ end
13
+ end
14
+
15
+ class MyGuiState < Fidgit::GuiState
16
+ def initialize
17
+ super
18
+
19
+ # Create a vertically packed section, centred on the window.
20
+ pack :vertical, align: :center do
21
+ # Create a label with a dark green background.
22
+ my_label = label "Hello world!", background_color: Gosu::Color.rgb(0, 100, 0)
23
+
24
+ # Create a button that, when clicked, changes the label text.
25
+ button("Goodbye", align_h: :center, tip: "Press me and be done with it!") do
26
+ my_label.text = "Goodbye cruel world!"
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ MyGame.new.show
@@ -0,0 +1,49 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ # Example for Button and ToggleButton
4
+ class ExampleState < Fidgit::GuiState
5
+ HEIGHT = 225
6
+ WIDTH = 140
7
+ def initialize
8
+ super
9
+
10
+ pack :vertical do
11
+ pack :horizontal do
12
+ [
13
+ [20, "All cheer the ascendancy of number "], # Should have both scrollers
14
+ [20, "#"], # Only has v-scroller.
15
+ [4, "#"], # No scrollers.
16
+ [4, "All cheer the ascendancy of number "], # Only has h-scroller
17
+ ].each do |num_labels, text|
18
+ pack :vertical do
19
+ scroll_window(width: WIDTH, height: HEIGHT, background_color: Gosu::Color.rgb(0, 100, 0)) do
20
+ pack :vertical do
21
+ (1..num_labels).each do |i|
22
+ label "#{text}#{i}!"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ pack :horizontal, padding: 0 do
31
+ pack :vertical do
32
+ scroll_window(width: 300, height: 150) do
33
+ text_area(text: "Hello world! " * 19, width: 284)
34
+ end
35
+ end
36
+
37
+ pack :vertical do
38
+ scroll_window(width: 300, height: 150) do
39
+ %w[One Two Three Four Five Six].each do |name|
40
+ toggle_button(name)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ ExampleWindow.new.show
@@ -0,0 +1,30 @@
1
+ require_relative 'helpers/example_window'
2
+
3
+ class ExampleState < Fidgit::GuiState
4
+ def initialize
5
+ super
6
+
7
+ pack :vertical do
8
+ pack :horizontal do
9
+ # Discrete values (0..100)
10
+ slider = slider(width: 100, range: 0..5, value: 3) do |sender, value|
11
+ @discrete_label.text = "Discrete slider is at #{value}"
12
+ end
13
+
14
+ @discrete_label = label "Discrete slider is at #{slider.value}"
15
+ end
16
+
17
+ pack :horizontal do
18
+ # Continuous values (0.0..1.0)
19
+
20
+ slider = slider(width: 100, range: 0.0..100.0, value: 77.2) do |sender, value|
21
+ @continuous_label.text = "Continuous slider is at #{"%.03f" % value}%"
22
+ end
23
+
24
+ @continuous_label = label "Continuous slider is at #{"%.03f" % slider.value}%"
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ ExampleWindow.new.show