cura 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -21
  3. data/cura.gemspec +1 -1
  4. data/examples/hello_world/lib/hello_world.rb +10 -10
  5. data/examples/mruby-examples/mrbgem.rake +5 -6
  6. data/examples/todo_list/data.db +0 -0
  7. data/examples/todo_list/lib/todo_list/application.rb +24 -18
  8. data/lib/cura/adapter.rb +13 -20
  9. data/lib/cura/application.rb +47 -51
  10. data/lib/cura/attributes/has_ancestry.rb +4 -8
  11. data/lib/cura/attributes/has_application.rb +3 -7
  12. data/lib/cura/attributes/has_attributes.rb +1 -9
  13. data/lib/cura/attributes/has_children.rb +14 -20
  14. data/lib/cura/attributes/has_colors.rb +14 -18
  15. data/lib/cura/attributes/has_coordinates.rb +9 -15
  16. data/lib/cura/attributes/has_dimensions.rb +12 -18
  17. data/lib/cura/attributes/has_events.rb +10 -18
  18. data/lib/cura/attributes/has_focusability.rb +5 -11
  19. data/lib/cura/attributes/has_initialize.rb +1 -5
  20. data/lib/cura/attributes/has_offsets.rb +16 -20
  21. data/lib/cura/attributes/has_orientation.rb +12 -18
  22. data/lib/cura/attributes/has_relative_coordinates.rb +4 -8
  23. data/lib/cura/attributes/has_root.rb +18 -22
  24. data/lib/cura/attributes/has_side_attributes.rb +18 -24
  25. data/lib/cura/attributes/has_windows.rb +13 -19
  26. data/lib/cura/borders.rb +0 -4
  27. data/lib/cura/color.rb +84 -91
  28. data/lib/cura/component/base.rb +29 -33
  29. data/lib/cura/component/button.rb +10 -16
  30. data/lib/cura/component/group.rb +14 -18
  31. data/lib/cura/component/label.rb +44 -48
  32. data/lib/cura/component/listbox.rb +24 -28
  33. data/lib/cura/component/pack.rb +14 -18
  34. data/lib/cura/component/scrollbar.rb +41 -45
  35. data/lib/cura/component/textbox.rb +21 -25
  36. data/lib/cura/cursor.rb +15 -23
  37. data/lib/cura/error/base.rb +0 -3
  38. data/lib/cura/error/invalid_adapter.rb +1 -7
  39. data/lib/cura/error/invalid_application.rb +1 -7
  40. data/lib/cura/error/invalid_color.rb +1 -7
  41. data/lib/cura/error/invalid_component.rb +1 -7
  42. data/lib/cura/error/invalid_middleware.rb +1 -7
  43. data/lib/cura/event.rb +4 -8
  44. data/lib/cura/event/base.rb +17 -24
  45. data/lib/cura/event/click.rb +1 -6
  46. data/lib/cura/event/dispatcher.rb +20 -26
  47. data/lib/cura/event/focus.rb +1 -6
  48. data/lib/cura/event/handler.rb +16 -24
  49. data/lib/cura/event/key_down.rb +11 -17
  50. data/lib/cura/event/middleware/aimer/base.rb +4 -10
  51. data/lib/cura/event/middleware/aimer/dispatcher_target.rb +2 -8
  52. data/lib/cura/event/middleware/aimer/mouse_focus.rb +6 -11
  53. data/lib/cura/event/middleware/aimer/target_option.rb +4 -10
  54. data/lib/cura/event/middleware/base.rb +0 -4
  55. data/lib/cura/event/middleware/dispatch.rb +0 -4
  56. data/lib/cura/event/middleware/translator/base.rb +4 -10
  57. data/lib/cura/event/middleware/translator/mouse_click.rb +4 -8
  58. data/lib/cura/event/mouse.rb +5 -11
  59. data/lib/cura/event/mouse_button.rb +21 -27
  60. data/lib/cura/event/mouse_wheel_down.rb +1 -6
  61. data/lib/cura/event/mouse_wheel_up.rb +1 -6
  62. data/lib/cura/event/resize.rb +0 -4
  63. data/lib/cura/event/selected.rb +1 -6
  64. data/lib/cura/event/unfocus.rb +1 -6
  65. data/lib/cura/focus_controller.rb +19 -23
  66. data/lib/cura/key.rb +277 -283
  67. data/lib/cura/margins.rb +0 -4
  68. data/lib/cura/offsets.rb +14 -18
  69. data/lib/cura/padding.rb +0 -4
  70. data/lib/cura/pencil.rb +3 -7
  71. data/lib/cura/version.rb +1 -3
  72. data/lib/cura/window.rb +11 -16
  73. data/spec/cura/attributes/has_ancestry_spec.rb +39 -39
  74. data/spec/cura/attributes/has_application_spec.rb +20 -20
  75. data/spec/cura/attributes/has_attributes_spec.rb +26 -26
  76. data/spec/cura/attributes/has_children_spec.rb +54 -54
  77. data/spec/cura/attributes/has_colors_spec.rb +4 -4
  78. data/spec/cura/attributes/has_coordinates_spec.rb +4 -4
  79. data/spec/cura/attributes/has_dimensions_spec.rb +4 -4
  80. data/spec/cura/attributes/has_events_spec.rb +4 -4
  81. data/spec/cura/attributes/has_focusability_spec.rb +18 -18
  82. data/spec/cura/attributes/has_offsets_spec.rb +4 -4
  83. data/spec/cura/attributes/has_orientation_spec.rb +38 -38
  84. data/spec/cura/attributes/has_relative_coordinates_spec.rb +4 -4
  85. data/spec/cura/attributes/has_side_attributes_spec.rb +4 -4
  86. data/spec/spec_helper.rb +1 -1
  87. data/spec/support/shared_examples_for_attributes.rb +41 -41
  88. metadata +1 -1
@@ -1,28 +1,26 @@
1
1
  module Cura
2
2
  module Attributes
3
-
4
3
  # Allows an object to have a `parent` and `ancestors`.
5
4
  module HasAncestry
6
-
7
5
  def initialize(attributes={})
8
6
  @ancestors = []
9
-
7
+
10
8
  super
11
9
  end
12
-
10
+
13
11
  # Get/set the parent of this object.
14
12
  # It's not recommended to set this directly as it may break the ancestory chain.
15
13
  #
16
14
  # @return [Object]
17
15
  attr_accessor :parent
18
-
16
+
19
17
  # Determine if this object has a parent.
20
18
  #
21
19
  # @return [Boolean]
22
20
  def parent?
23
21
  !@parent.nil?
24
22
  end
25
-
23
+
26
24
  # Get the ancestors of this object.
27
25
  #
28
26
  # @return [Array<Object>]
@@ -33,8 +31,6 @@ module Cura
33
31
  @parent.respond_to?(:ancestors) ? [@parent] + @parent.ancestors : [@parent]
34
32
  end
35
33
  end
36
-
37
34
  end
38
-
39
35
  end
40
36
  end
@@ -1,31 +1,27 @@
1
1
  if Kernel.respond_to?(:require)
2
2
  require "cura/application"
3
-
3
+
4
4
  require "cura/error/invalid_application"
5
5
  end
6
6
 
7
7
  module Cura
8
8
  module Attributes
9
-
10
9
  # Allows an object to belong to a Cura::Application.
11
10
  module HasApplication
12
-
13
11
  # Get the application of this object.
14
12
  #
15
13
  # @return [Application]
16
14
  attr_reader :application
17
-
15
+
18
16
  # Set the application of this object.
19
17
  #
20
18
  # @param [Application] value
21
19
  # @return [Application]
22
20
  def application=(value)
23
21
  raise Error::InvalidApplication unless value.nil? || value.is_a?(Cura::Application)
24
-
22
+
25
23
  @application = value
26
24
  end
27
-
28
25
  end
29
-
30
26
  end
31
27
  end
@@ -1,12 +1,9 @@
1
1
  module Cura
2
2
  module Attributes
3
-
4
3
  # Adds the `update_attributes` method.
5
- module HasAttributes # TODO: Aspect::HasAttributes
6
-
4
+ module HasAttributes # TODO: Use Aspect::HasAttributes
7
5
  # The class methods to be mixed in when included.
8
6
  module ClassMethods
9
-
10
7
  def attribute(name, options={}, &block)
11
8
  options = options.to_h
12
9
 
@@ -30,15 +27,12 @@ module Cura
30
27
  end
31
28
  end
32
29
  end
33
-
34
30
  end
35
31
 
36
32
  class << self
37
-
38
33
  def included(base)
39
34
  base.extend(ClassMethods)
40
35
  end
41
-
42
36
  end
43
37
 
44
38
  # Initialize this object by optionally updating attributes with a Hash.
@@ -82,8 +76,6 @@ module Cura
82
76
  def convert_attributes(attributes={})
83
77
  attributes.to_h
84
78
  end
85
-
86
79
  end
87
-
88
80
  end
89
81
  end
@@ -6,26 +6,24 @@ end
6
6
 
7
7
  module Cura
8
8
  module Attributes
9
-
10
9
  # Allows an object to have child components.
11
10
  # TODO: Lots of code is the same as HasWindows
12
11
  module HasChildren
13
-
14
12
  include Enumerable
15
-
13
+
16
14
  def initialize(*arguments)
17
15
  @children = []
18
-
16
+
19
17
  super
20
18
  end
21
-
19
+
22
20
  # Traverse the children of this object.
23
21
  #
24
22
  # @return [Array]
25
23
  def each(&block)
26
24
  @children.each(&block)
27
25
  end
28
-
26
+
29
27
  # Get the children of this object.
30
28
  #
31
29
  # @param [Boolean] recursive Determines if the children should be gathered recursively to retrieve all of this object's decendants.
@@ -37,19 +35,19 @@ module Cura
37
35
  @children
38
36
  end
39
37
  end
40
-
38
+
41
39
  # Add a child to this group.
42
40
  #
43
41
  # @param [Component] component
44
42
  # @return [Component]
45
43
  def add_child(component)
46
44
  raise TypeError, "component must be a Cura::Component" unless component.is_a?(Component::Base)
47
-
45
+
48
46
  @children << component
49
-
47
+
50
48
  component
51
49
  end
52
-
50
+
53
51
  # Add multiple children to this group.
54
52
  #
55
53
  # @param [<Component>] children
@@ -57,7 +55,7 @@ module Cura
57
55
  def add_children(*children)
58
56
  children.each { |child| add_child(child) }
59
57
  end
60
-
58
+
61
59
  # Remove a child from this object's children at the given index.
62
60
  #
63
61
  # @param [#to_i] index
@@ -65,7 +63,7 @@ module Cura
65
63
  def delete_child_at(index)
66
64
  @children.delete_at(index.to_i)
67
65
  end
68
-
66
+
69
67
  # Remove a child from this object's children.
70
68
  #
71
69
  # @param [Component] component
@@ -75,25 +73,23 @@ module Cura
75
73
 
76
74
  delete_child_at(@children.index(component))
77
75
  end
78
-
76
+
79
77
  # Remove all children.
80
78
  #
81
79
  # @return [Group]
82
80
  def delete_children
83
-
84
81
  (0...@children.count).to_a.reverse_each { |index| delete_child_at(index) } # TODO: Why reverse?
85
82
  self
86
83
  end
87
-
84
+
88
85
  # Determine if this group has children.
89
86
  #
90
87
  # @return [Boolean]
91
88
  def children?
92
89
  @children.any?
93
90
  end
94
-
91
+
95
92
  protected
96
-
97
93
 
98
94
  def validate_component(component)
99
95
  raise Error::InvalidComponent unless component.is_a?(Component::Base)
@@ -102,12 +98,10 @@ module Cura
102
98
  def update_children
103
99
  children.each(&:update)
104
100
  end
105
-
101
+
106
102
  def draw_children
107
103
  children.each(&:draw)
108
104
  end
109
-
110
105
  end
111
-
112
106
  end
113
107
  end
@@ -1,66 +1,62 @@
1
1
  if Kernel.respond_to?(:require)
2
2
  require "cura/attributes/has_attributes"
3
-
3
+
4
4
  require "cura/error/invalid_color"
5
-
5
+
6
6
  require "cura/color"
7
7
  end
8
8
 
9
9
  module Cura
10
10
  module Attributes
11
-
12
11
  # Adds the #foreground and #background attributes.
13
12
  # TODO: Should be color and background... HasBackground and HasColor
14
13
  module HasColors
15
-
16
14
  include HasAttributes
17
-
15
+
18
16
  def initialize(attributes={})
19
17
  @foreground = :inherit unless instance_variable_defined?(:@foreground)
20
18
  @background = :inherit unless instance_variable_defined?(:@background)
21
-
19
+
22
20
  super
23
21
  end
24
-
22
+
25
23
  # @method foreground
26
24
  # Get the foreground color of this object.
27
25
  #
28
26
  # @return [Color]
29
-
27
+
30
28
  # @method foreground=(value)
31
29
  # Set the foreground color of this object.
32
30
  #
33
31
  # @param [Color] value
34
32
  # @return [Color]
35
-
33
+
36
34
  attribute(:foreground) { |value| validate_color_attribute(value) }
37
-
35
+
38
36
  # @method background
39
37
  # Get the background color of this object.
40
38
  #
41
39
  # @return [Color]
42
-
40
+
43
41
  # @method background=(value)
44
42
  # Set the background color of this object.
45
43
  #
46
44
  # @param [Color] value
47
45
  # @return [Color]
48
-
46
+
49
47
  attribute(:background) { |value| validate_color_attribute(value) }
50
-
48
+
51
49
  protected
52
-
50
+
53
51
  def validate_color_attribute(value)
54
52
  unless value.is_a?(Cura::Color)
55
53
  value = value.to_sym
56
-
54
+
57
55
  raise Error::InvalidColor unless value == :inherit
58
56
  end
59
-
57
+
60
58
  value
61
59
  end
62
-
63
60
  end
64
-
65
61
  end
66
62
  end
@@ -1,49 +1,43 @@
1
- if Kernel.respond_to?(:require)
2
- require "cura/attributes/has_attributes"
3
- end
1
+ require "cura/attributes/has_attributes" if Kernel.respond_to?(:require)
4
2
 
5
3
  module Cura
6
4
  module Attributes
7
-
8
5
  # Adds the `x` and `y` attributes.
9
6
  module HasCoordinates
10
-
11
7
  include HasAttributes
12
-
8
+
13
9
  def initialize(attributes={})
14
10
  @x = 0 unless instance_variable_defined?(:@x)
15
11
  @y = 0 unless instance_variable_defined?(:@y)
16
-
12
+
17
13
  super
18
14
  end
19
-
15
+
20
16
  # @method x
21
17
  # Get the X coordinate of this object.
22
18
  #
23
19
  # @return [Integer]
24
-
20
+
25
21
  # @method x=(value)
26
22
  # Set the X coordinate of this object.
27
23
  #
28
24
  # @param [#to_i] value
29
25
  # @return [Integer]
30
-
26
+
31
27
  attribute(:x) { |value| value.to_i }
32
-
28
+
33
29
  # @method y
34
30
  # Get the Y coordinate of this object.
35
31
  #
36
32
  # @return [Integer]
37
-
33
+
38
34
  # @method y=(value)
39
35
  # Set the Y coordinate of this object.
40
36
  #
41
37
  # @param [#to_i] value
42
38
  # @return [Integer]
43
-
39
+
44
40
  attribute(:y) { |value| value.to_i }
45
-
46
41
  end
47
-
48
42
  end
49
43
  end
@@ -1,48 +1,44 @@
1
- if Kernel.respond_to?(:require)
2
- require "cura/attributes/has_attributes"
3
- end
1
+ require "cura/attributes/has_attributes" if Kernel.respond_to?(:require)
4
2
 
5
3
  module Cura
6
4
  module Attributes
7
-
8
5
  # Adds the `width` and `height` attributes.
9
6
  module HasDimensions
10
-
11
7
  include HasAttributes
12
-
8
+
13
9
  def initialize(attributes={})
14
10
  @width = :auto unless instance_variable_defined?(:@width)
15
11
  @height = :auto unless instance_variable_defined?(:@height)
16
-
12
+
17
13
  super
18
14
  end
19
-
15
+
20
16
  # @method width
21
17
  # Get the width dimension of this object.
22
18
  #
23
19
  # @param [#to_i] value
24
20
  # @return [Integer]
25
-
21
+
26
22
  # @method width=(value)
27
23
  # Set the width dimension of this object.
28
24
  #
29
25
  # @return [Integer]
30
-
26
+
31
27
  attribute(:width) { |value| validate_size_attribute(value) }
32
-
28
+
33
29
  # @method height
34
30
  # Get the height dimension of this object.
35
31
  #
36
32
  # @return [Integer]
37
-
33
+
38
34
  # @method height=(value)
39
35
  # Set the height dimension of this object.
40
36
  #
41
37
  # @param [#to_i] value
42
38
  # @return [Integer]
43
-
39
+
44
40
  attribute(:height) { |value| validate_size_attribute(value) }
45
-
41
+
46
42
  # Set one or both of the dimensions of this object.
47
43
  # @param [#to_h] options
48
44
  # @option options [#to_i] :width
@@ -50,14 +46,12 @@ module Cura
50
46
  # @return [Object] This object
51
47
  def resize(options)
52
48
  options = options.to_h
53
-
49
+
54
50
  self.width = options[:width] if options.key?(:width)
55
51
  self.height = options[:height] if options.key?(:height)
56
-
52
+
57
53
  self
58
54
  end
59
-
60
55
  end
61
-
62
56
  end
63
57
  end
@@ -5,22 +5,19 @@ end
5
5
 
6
6
  module Cura
7
7
  module Attributes
8
-
9
8
  # Adds an `event_handler` attribute as well as `callbacks` and `on_event` class methods.
10
9
  # When subclassed, the callbacks are inherited.
11
10
  # TODO: Rename to HasEventHandler
12
11
  module HasEvents
13
-
14
12
  # The class methods to be mixed in when included.
15
13
  module ClassMethods
16
-
17
14
  # The callbacks stored on this class.
18
15
  #
19
16
  # @return [Hash<Symbol,Array<Proc>>]
20
17
  def callbacks
21
18
  @callbacks ||= {}
22
19
  end
23
-
20
+
24
21
  # Store a callback on this class.
25
22
  # Stored callbacks will be registered on the event handler on initialization.
26
23
  #
@@ -29,10 +26,10 @@ module Cura
29
26
  # @return [Proc] The callback block.
30
27
  def on_event(event_name=:default, &block)
31
28
  (callbacks[event_name.to_sym] ||= []) << block
32
-
29
+
33
30
  block
34
31
  end
35
-
32
+
36
33
  # Register this classes callbacks onto the subclass, when inherited.
37
34
  def inherited(subclass)
38
35
  callbacks.each do |event_name, blocks|
@@ -41,29 +38,26 @@ module Cura
41
38
  end
42
39
  end
43
40
  end
44
-
45
41
  end
46
-
42
+
47
43
  class << self
48
-
49
44
  def included(base)
50
45
  base.send(:extend, ClassMethods)
51
46
  end
52
-
53
47
  end
54
-
48
+
55
49
  def initialize(attributes={})
56
50
  @event_handler = Event::Handler.new(self)
57
51
  register_class_callbacks
58
-
52
+
59
53
  super
60
54
  end
61
-
55
+
62
56
  # Get the event handler for this object.
63
57
  #
64
58
  # @return [Event::Handler]
65
59
  attr_reader :event_handler
66
-
60
+
67
61
  # Register a callback for an event to this instance.
68
62
  #
69
63
  # @param [nil, #to_sym] event_name The event name.
@@ -72,9 +66,9 @@ module Cura
72
66
  def on_event(event_name=:default, *arguments, &block)
73
67
  event_handler.register(event_name, *arguments, &block)
74
68
  end
75
-
69
+
76
70
  protected
77
-
71
+
78
72
  def register_class_callbacks
79
73
  self.class.callbacks.each do |event_name, blocks|
80
74
  blocks.each do |block|
@@ -82,8 +76,6 @@ module Cura
82
76
  end
83
77
  end
84
78
  end
85
-
86
79
  end
87
-
88
80
  end
89
81
  end