cura 0.0.1 → 0.0.2

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 (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,24 @@
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 `focusable` attribute to objects.
9
6
  module HasFocusability
10
-
11
7
  include HasAttributes
12
-
8
+
13
9
  def initialize(attributes={})
14
10
  @focusable = false unless instance_variable_defined?(:@focusable)
15
-
11
+
16
12
  super
17
13
  end
18
-
14
+
19
15
  # Get whether this object is focusable or not.
20
16
  #
21
17
  # @return [Boolean]
22
18
  def focusable?
23
19
  @focusable
24
20
  end
25
-
21
+
26
22
  # Set whether this object is focusable or not.
27
23
  #
28
24
  # @param [Object] value
@@ -30,8 +26,6 @@ module Cura
30
26
  def focusable=(value)
31
27
  @focusable = !!value
32
28
  end
33
-
34
29
  end
35
-
36
30
  end
37
31
  end
@@ -1,15 +1,11 @@
1
1
  module Cura
2
2
  module Attributes
3
-
4
3
  # Stops the initialize super chain.
5
4
  # Must be included before any Cura::Attributes modules which define an #initialize method.
6
5
  module HasInitialize
7
-
8
- def initialize(*arguments)
6
+ def initialize(*_arguments)
9
7
  # Blank on purpose. Carry on, my wayward son.
10
8
  end
11
-
12
9
  end
13
-
14
10
  end
15
11
  end
@@ -8,75 +8,71 @@ end
8
8
 
9
9
  module Cura
10
10
  module Attributes
11
-
12
11
  # Adds the `offsets` attribute to objects.
13
12
  module HasOffsets
14
-
15
13
  include HasAttributes
16
-
14
+
17
15
  # @method border
18
16
  # Get the borders of this object.
19
17
  #
20
18
  # @return [Borders]
21
-
19
+
22
20
  # @method border=(value)
23
21
  # Set the borders of this object.
24
22
  #
25
23
  # @param [Borders, #to_h] value
26
24
  # @return [Borders]
27
-
25
+
28
26
  attribute(:border, type: Borders) { |value, options| validate_offset_attribute(value, options[:type]) }
29
-
27
+
30
28
  # @method margin
31
29
  # Get the margins of this object.
32
30
  #
33
31
  # @return [Margins]
34
-
32
+
35
33
  # @method margin=(value)
36
34
  # Set the margins of this object.
37
35
  #
38
36
  # @param [Margins, #to_h] value
39
37
  # @return [Margins]
40
-
38
+
41
39
  attribute(:margin, type: Margins) { |value, options| validate_offset_attribute(value, options[:type]) }
42
-
40
+
43
41
  # @method padding
44
42
  # Get the padding of this object.
45
43
  #
46
44
  # @return [Padding]
47
-
45
+
48
46
  # @method padding=(value)
49
47
  # Set the padding of this object.
50
48
  #
51
49
  # @param [Padding, #to_h] value
52
50
  # @return [Padding]
53
-
51
+
54
52
  attribute(:padding, type: Padding) { |value, options| validate_offset_attribute(value, options[:type]) }
55
-
53
+
56
54
  def initialize(attributes={})
57
55
  @offsets = Offsets.new(component: self)
58
-
56
+
59
57
  self.margin = attributes[:margin]
60
58
  self.border = attributes[:border]
61
59
  self.padding = attributes[:padding]
62
-
60
+
63
61
  super
64
62
  end
65
-
63
+
66
64
  # Get the offsets of this object.
67
65
  #
68
66
  # @return [Offsets]
69
67
  attr_reader :offsets
70
-
68
+
71
69
  protected
72
-
70
+
73
71
  def validate_offset_attribute(value, type)
74
72
  value ||= {}
75
-
73
+
76
74
  value.is_a?(type) ? value : type.new(value)
77
75
  end
78
-
79
76
  end
80
-
81
77
  end
82
78
  end
@@ -1,53 +1,47 @@
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 `orientation` attribute to objects, which can be :vertical or :horizontal.
9
6
  module HasOrientation
10
-
11
7
  include HasAttributes
12
-
8
+
13
9
  def initialize(attributes={})
14
10
  @orientation = :vertical unless instance_variable_defined?(:@orientation)
15
-
11
+
16
12
  super
17
13
  end
18
-
14
+
19
15
  # Get the orientation of this object.
20
- #
16
+ #
21
17
  # @return [Symbol]
22
18
  attr_reader :orientation
23
-
19
+
24
20
  # Set the orientation of this object.
25
21
  # Must be :vertical or :horizontal.
26
- #
22
+ #
27
23
  # @param [#to_sym] value
28
24
  # @return [Symbol]
29
25
  def orientation=(value)
30
26
  value = value.to_sym
31
27
  raise ArgumentError, "orientation must be one of :vertical or :horizontal" unless [:vertical, :horizontal].include?(value)
32
-
28
+
33
29
  @orientation = value
34
30
  end
35
-
31
+
36
32
  # Check if this object's orientation is set to :horizontal.
37
- #
33
+ #
38
34
  # @return [Boolean]
39
35
  def horizontal?
40
36
  orientation == :horizontal
41
37
  end
42
-
38
+
43
39
  # Check if this object's orientation is set to :vertical.
44
- #
40
+ #
45
41
  # @return [Boolean]
46
42
  def vertical?
47
43
  orientation == :vertical
48
44
  end
49
-
50
45
  end
51
-
52
46
  end
53
47
  end
@@ -5,35 +5,31 @@ end
5
5
 
6
6
  module Cura
7
7
  module Attributes
8
-
9
8
  # Adds the `absolute_x` and `absolute_y` attributes, which are relative to it's parent.
10
9
  module HasRelativeCoordinates
11
-
12
10
  include HasAncestry
13
11
  include HasCoordinates
14
-
12
+
15
13
  def initialize(attributes={})
16
14
  @absolute_x = 0
17
15
  @absolute_y = 0
18
-
16
+
19
17
  super
20
18
  end
21
-
19
+
22
20
  # Get the absolute X coordinate of this object.
23
21
  #
24
22
  # @return [Integer]
25
23
  def absolute_x
26
24
  parent? && parent.respond_to?(:absolute_x) ? @x + parent.offsets.left + parent.absolute_x : @x
27
25
  end
28
-
26
+
29
27
  # Get the absolute Y coordinate of this object.
30
28
  #
31
29
  # @return [Integer]
32
30
  def absolute_y
33
31
  parent? && parent.respond_to?(:absolute_y) ? @y + parent.offsets.top + parent.absolute_y : @y
34
32
  end
35
-
36
33
  end
37
-
38
34
  end
39
35
  end
@@ -1,45 +1,43 @@
1
1
  if Kernel.respond_to?(:require)
2
2
  require "cura/attributes/has_attributes"
3
-
3
+
4
4
  require "cura/component/group"
5
5
  end
6
6
 
7
7
  module Cura
8
8
  module Attributes
9
-
10
9
  # Adds the `root` attribute to an object, which defaults to a Component::Group.
11
10
  module HasRoot
12
-
13
11
  include Attributes::HasAttributes
14
-
12
+
15
13
  def initialize(attributes={})
16
14
  @root = Component::Group.new(parent: self)
17
-
15
+
18
16
  super
19
17
  end
20
-
18
+
21
19
  # @method root
22
20
  # Get root component for this object.
23
21
  #
24
22
  # @return [Component::Group]
25
-
23
+
26
24
  # @method root=(component)
27
25
  # Set root component for this object.
28
26
  #
29
27
  # @param [Component::Group] component
30
28
  # @return [Component::Group]
31
-
29
+
32
30
  attribute(:root) { |component| set_root(component) }
33
-
31
+
34
32
  # Delegates -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
35
-
33
+
36
34
  # Get the children of this object.
37
35
  #
38
36
  # @return [<Component>]
39
37
  def children(recursive=false)
40
38
  @root.children(recursive)
41
39
  end
42
-
40
+
43
41
  # Add a child to this object's root component.
44
42
  #
45
43
  # @param [Component] component
@@ -47,7 +45,7 @@ module Cura
47
45
  def add_child(component)
48
46
  @root.add_child(component)
49
47
  end
50
-
48
+
51
49
  # Add multiple children to this object's root component.
52
50
  #
53
51
  # @param [<Component>] children
@@ -55,7 +53,7 @@ module Cura
55
53
  def add_children(*children)
56
54
  @root.add_children(*children)
57
55
  end
58
-
56
+
59
57
  # Remove a child from object's root component at the given index.
60
58
  #
61
59
  # @param [Integer] index
@@ -63,7 +61,7 @@ module Cura
63
61
  def delete_child_at(index)
64
62
  @root.delete_child_at(index)
65
63
  end
66
-
64
+
67
65
  # Remove a child from this object's root component.
68
66
  #
69
67
  # @param [Component] component
@@ -71,34 +69,32 @@ module Cura
71
69
  def delete_child(component)
72
70
  @root.delete_child(component)
73
71
  end
74
-
72
+
75
73
  # Remove all children from object's root component.
76
74
  #
77
75
  # @return [HasChildren]
78
76
  def delete_children
79
77
  @root.delete_children
80
78
  end
81
-
79
+
82
80
  # Determine if this object's root component has children.
83
81
  #
84
82
  # @return [Boolean]
85
83
  def children?
86
84
  @root.children?
87
85
  end
88
-
86
+
89
87
  protected
90
-
88
+
91
89
  def set_root(component)
92
90
  raise TypeError, "root must be a Component::Group" unless component.is_a?(Component::Group)
93
-
91
+
94
92
  @root.parent = nil unless @root.nil?
95
93
  @root = component
96
94
  @root.parent = self
97
-
95
+
98
96
  @root
99
97
  end
100
-
101
98
  end
102
-
103
99
  end
104
100
  end
@@ -1,95 +1,89 @@
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 `top`, `right`, `bottom`, `left`, `width`, and `height` attributes to objects.
9
6
  module HasSideAttributes
10
-
11
7
  include HasAttributes
12
-
8
+
13
9
  # @method top
14
10
  # Get the top attribute.
15
11
  #
16
12
  # @return [Integer]
17
-
13
+
18
14
  # @method top=(value)
19
15
  # Set the top attribute.
20
16
  #
21
17
  # @param [#to_i] value
22
18
  # @return [Integer]
23
-
19
+
24
20
  attribute(:top) { |value| validate_size_attribute(value) }
25
-
21
+
26
22
  # @method right
27
23
  # Get the right attribute.
28
24
  #
29
25
  # @return [Integer]
30
-
26
+
31
27
  # @method right=(value)
32
28
  # Set the right attribute.
33
29
  #
34
30
  # @param [#to_i] value
35
31
  # @return [Integer]
36
-
32
+
37
33
  attribute(:right) { |value| validate_size_attribute(value) }
38
-
34
+
39
35
  # @method bottom
40
36
  # Get the bottom attribute.
41
37
  #
42
38
  # @return [Integer]
43
-
39
+
44
40
  # @method bottom=(value)
45
41
  # Set the bottom attribute.
46
42
  #
47
43
  # @param [#to_i] value
48
44
  # @return [Integer]
49
-
45
+
50
46
  attribute(:bottom) { |value| validate_size_attribute(value) }
51
-
47
+
52
48
  # @method left
53
49
  # Get the left attribute.
54
50
  #
55
51
  # @return [Integer]
56
-
52
+
57
53
  # @method left=(value)
58
54
  # Set the left attribute.
59
55
  #
60
56
  # @param [#to_i] value
61
57
  # @return [Integer]
62
-
58
+
63
59
  attribute(:left) { |value| validate_size_attribute(value) }
64
-
60
+
65
61
  def initialize(attributes={})
66
62
  @top = 0 unless instance_variable_defined?(:@top)
67
63
  @right = 0 unless instance_variable_defined?(:@right)
68
64
  @bottom = 0 unless instance_variable_defined?(:@bottom)
69
65
  @left = 0 unless instance_variable_defined?(:@left)
70
-
66
+
71
67
  unless attributes.respond_to?(:to_hash) || attributes.respond_to?(:to_h)
72
68
  attributes = { top: attributes, right: attributes, bottom: attributes, left: attributes } # Set all side attributes to the argument given
73
69
  end
74
-
70
+
75
71
  super
76
72
  end
77
-
73
+
78
74
  # Get the total height of the attributes.
79
75
  #
80
76
  # @return [Integer]
81
77
  def height
82
78
  @top + @bottom
83
79
  end
84
-
80
+
85
81
  # Get the total width of the attributes.
86
82
  #
87
83
  # @return [Integer]
88
84
  def width
89
85
  @left + @right
90
86
  end
91
-
92
87
  end
93
-
94
88
  end
95
89
  end