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
@@ -4,13 +4,9 @@ if Kernel.respond_to?(:require)
4
4
  end
5
5
 
6
6
  module Cura
7
-
8
7
  # The margin side attributes of a component.
9
8
  class Margins
10
-
11
9
  include Attributes::HasInitialize
12
10
  include Attributes::HasSideAttributes
13
-
14
11
  end
15
-
16
12
  end
@@ -5,59 +5,57 @@ if Kernel.respond_to?(:require)
5
5
  end
6
6
 
7
7
  module Cura
8
-
9
8
  # The offsets of a component's drawing area.
10
9
  class Offsets
11
-
12
10
  include Attributes::HasInitialize
13
11
  include Attributes::HasAttributes
14
-
12
+
15
13
  def initialize(attributes={})
16
14
  super
17
-
15
+
18
16
  raise ArgumentError, "component must be set" if @component.nil?
19
17
  end
20
-
18
+
21
19
  # @method component
22
20
  # Get the component to calculate offsets for.
23
21
  #
24
22
  # @return [Component]
25
-
23
+
26
24
  # @method component=(value)
27
25
  # Set the component to calculate offsets for.
28
26
  #
29
27
  # @param [Component] value
30
28
  # @return [Component]
31
29
  attribute(:component) { |value| validate_component(value) }
32
-
30
+
33
31
  # Get the top offset from the contents of a component from the top.
34
32
  #
35
33
  # @return [Integer]
36
34
  def top
37
35
  attribute_sum(:top)
38
36
  end
39
-
37
+
40
38
  # Get the right offset from the contents of a component from the right.
41
39
  #
42
40
  # @return [Integer]
43
41
  def right
44
42
  attribute_sum(:right)
45
43
  end
46
-
44
+
47
45
  # Get the bottom offset from the contents of a component from the bottom.
48
46
  #
49
47
  # @return [Integer]
50
48
  def bottom
51
49
  attribute_sum(:bottom)
52
50
  end
53
-
51
+
54
52
  # Get the left offset from the contents of a component from the left.
55
53
  #
56
54
  # @return [Integer]
57
55
  def left
58
56
  attribute_sum(:left)
59
57
  end
60
-
58
+
61
59
  # Get the full height of offsets of a component.
62
60
  #
63
61
  # @return [Integer]
@@ -65,7 +63,7 @@ module Cura
65
63
  # top + bottom
66
64
  attribute_sum(:height)
67
65
  end
68
-
66
+
69
67
  # Get the full width of offsets of a component.
70
68
  #
71
69
  # @return [Integer]
@@ -73,19 +71,17 @@ module Cura
73
71
  # left + right
74
72
  attribute_sum(:width)
75
73
  end
76
-
74
+
77
75
  protected
78
-
76
+
79
77
  def attribute_sum(method)
80
78
  @component.padding.send(method) + @component.border.send(method) + @component.margin.send(method)
81
79
  end
82
-
80
+
83
81
  def validate_component(value)
84
82
  raise TypeError, "value must be a Cura::Component::Base" unless value.is_a?(Cura::Component::Base)
85
-
83
+
86
84
  value
87
85
  end
88
-
89
86
  end
90
-
91
87
  end
@@ -4,13 +4,9 @@ if Kernel.respond_to?(:require)
4
4
  end
5
5
 
6
6
  module Cura
7
-
8
7
  # The padding side attributes of a component.
9
8
  class Padding
10
-
11
9
  include Attributes::HasInitialize
12
10
  include Attributes::HasSideAttributes
13
-
14
11
  end
15
-
16
12
  end
@@ -1,29 +1,25 @@
1
1
  module Cura
2
-
3
2
  # The tool used for drawing on a surface.
4
3
  class Pencil
5
-
6
4
  # Draw a point.
7
5
  def draw_point(x, y, color=Cura::Color.black)
8
6
  super
9
7
  end
10
-
8
+
11
9
  # Draw a rectangle.
12
10
  # TODO: filled argument
13
11
  def draw_rectangle(x, y, width, height, color=Cura::Color.black)
14
12
  super
15
13
  end
16
-
14
+
17
15
  # Draw a single character.
18
16
  def draw_character(x, y, character, foreground=Cura::Color.black, background=Cura::Color.white, bold=false, underline=false)
19
17
  super
20
18
  end
21
-
19
+
22
20
  # Draw text.
23
21
  def draw_text(x, y, text, foreground=Cura::Color.black, background=Cura::Color.white, bold=false, underline=false)
24
22
  super
25
23
  end
26
-
27
24
  end
28
-
29
25
  end
@@ -1,6 +1,4 @@
1
1
  # An adaptable component library for creating graphical and text-based user interfaces.
2
2
  module Cura
3
-
4
- VERSION = "0.0.1"
5
-
3
+ VERSION = "0.0.2"
6
4
  end
@@ -6,41 +6,38 @@ if Kernel.respond_to?(:require)
6
6
  require "cura/attributes/has_dimensions"
7
7
  require "cura/attributes/has_events"
8
8
  require "cura/attributes/has_root"
9
-
10
9
  require "cura/focus_controller"
11
10
  end
12
11
 
13
12
  module Cura
14
-
15
13
  # A window containing a drawing area.
16
14
  class Window
17
-
18
15
  include Attributes::HasInitialize
19
16
  include Attributes::HasApplication
20
17
  include Attributes::HasCoordinates
21
18
  include Attributes::HasDimensions
22
19
  include Attributes::HasEvents
23
20
  include Attributes::HasRoot
24
-
21
+
25
22
  on_event(:key_down) do |event|
26
23
  @focus_controller.index += 1 if event.name == :tab
27
24
  end
28
-
25
+
29
26
  def initialize(attributes={})
30
27
  super
31
-
28
+
32
29
  @focus_controller = FocusController.new(window: self)
33
30
  end
34
-
31
+
35
32
  # Update this window's components.
36
33
  #
37
34
  # @return [Window]
38
35
  def update
39
36
  @root.update
40
-
37
+
41
38
  self
42
39
  end
43
-
40
+
44
41
  # Draw this window's children.
45
42
  #
46
43
  # @return [Window]
@@ -48,38 +45,36 @@ module Cura
48
45
  application.adapter.clear
49
46
  @root.draw
50
47
  application.adapter.present
51
-
48
+
52
49
  self
53
50
  end
54
-
51
+
55
52
  # Show this window.
56
53
  #
57
54
  # @return [Window]
58
55
  def show
59
56
  self # TODO
60
57
  end
61
-
58
+
62
59
  # Hide this window.
63
60
  #
64
61
  # @return [Window]
65
62
  def hide
66
63
  self # TODO
67
64
  end
68
-
65
+
69
66
  # Return this window's parent.
70
67
  #
71
68
  # @return [Window]
72
69
  def parent # TODO: Needed?
73
70
  @application
74
71
  end
75
-
72
+
76
73
  # Instance inspection.
77
74
  #
78
75
  # @return [String]
79
76
  def inspect
80
77
  "#<#{self.class}:0x#{__id__.to_s(16)} application=#{@application.class}:0x#{@application.__id__.to_s(16)}>"
81
78
  end
82
-
83
79
  end
84
-
85
80
  end
@@ -4,105 +4,105 @@ require "cura/attributes/has_initialize"
4
4
  require "cura/attributes/has_ancestry"
5
5
 
6
6
  describe Cura::Attributes::HasAncestry do
7
-
7
+
8
8
  let(:instance_class) do
9
9
  instance_class = Class.new { attr_accessor :name }
10
10
  instance_class.include(Cura::Attributes::HasInitialize)
11
11
  instance_class.include(Cura::Attributes::HasAncestry)
12
-
12
+
13
13
  instance_class
14
14
  end
15
-
15
+
16
16
  let(:instance) { instance_class.new }
17
-
17
+
18
18
  describe "#parent" do
19
-
19
+
20
20
  it "should be initialized with the correct value" do
21
21
  expect(instance.parent).to eq(nil)
22
22
  end
23
-
23
+
24
24
  end
25
-
25
+
26
26
  describe "#parent=" do
27
-
27
+
28
28
  let(:parent) { Object.new }
29
-
29
+
30
30
  before { instance.parent = parent }
31
-
31
+
32
32
  it "should set the attribute correctly" do
33
33
  expect(instance.parent).to eq(parent)
34
34
  end
35
-
35
+
36
36
  end
37
-
37
+
38
38
  describe "#parent?" do
39
-
39
+
40
40
  context "when the parent is unset" do
41
-
41
+
42
42
  it "should return the correct value" do
43
43
  expect(instance.parent?).to eq(false)
44
44
  end
45
-
45
+
46
46
  end
47
-
47
+
48
48
  context "when the parent is set" do
49
-
49
+
50
50
  before { instance.parent = Object.new }
51
-
51
+
52
52
  it "should return the correct value" do
53
53
  expect(instance.parent?).to eq(true)
54
54
  end
55
-
55
+
56
56
  end
57
-
57
+
58
58
  end
59
-
59
+
60
60
  describe "#ancestors" do
61
-
61
+
62
62
  it "should be initialized with the correct value" do
63
63
  expect(instance.ancestors).to eq([])
64
64
  end
65
-
65
+
66
66
  context "when the parent is unset" do
67
-
67
+
68
68
  let(:parent) { Object.new }
69
-
69
+
70
70
  before { instance.parent = nil }
71
-
71
+
72
72
  it "should return the correct value" do
73
73
  expect(instance.ancestors).to eq([])
74
74
  end
75
-
75
+
76
76
  end
77
-
77
+
78
78
  context "when the parent is set" do
79
-
79
+
80
80
  let(:parent) { Object.new }
81
-
81
+
82
82
  before { instance.parent = parent }
83
-
83
+
84
84
  it "should return the correct value" do
85
85
  expect(instance.ancestors).to eq([parent])
86
86
  end
87
-
87
+
88
88
  context "and the parent has a parent" do
89
-
89
+
90
90
  let(:parent) { instance_class.new }
91
91
  let(:grandparent) { Object.new }
92
-
92
+
93
93
  before do
94
94
  parent.parent = grandparent
95
95
  instance.parent = parent
96
96
  end
97
-
97
+
98
98
  it "should return the correct value" do
99
99
  expect(instance.ancestors).to eq([parent, grandparent])
100
100
  end
101
-
101
+
102
102
  end
103
-
103
+
104
104
  end
105
-
105
+
106
106
  end
107
-
107
+
108
108
  end
@@ -6,54 +6,54 @@ require "cura/adapter"
6
6
  require "cura/attributes/has_application"
7
7
 
8
8
  describe Cura::Attributes::HasApplication do
9
-
9
+
10
10
  let(:instance) do
11
11
  instance_class = Class.new { attr_accessor :name }
12
12
  instance_class.include(Cura::Attributes::HasApplication)
13
-
13
+
14
14
  instance_class.new
15
15
  end
16
-
16
+
17
17
  describe "#application" do
18
-
18
+
19
19
  it "should be initialized with the correct value" do
20
20
  expect(instance.application).to eq(nil)
21
21
  end
22
-
22
+
23
23
  end
24
-
24
+
25
25
  describe "#application=" do
26
-
26
+
27
27
  context "when a Cura::Application is passed" do
28
-
28
+
29
29
  let(:application) { Cura::Application.new(adapter: Cura::Adapter.new) }
30
-
30
+
31
31
  before { instance.application = application }
32
-
32
+
33
33
  it "should set the attribute correctly" do
34
34
  expect(instance.application).to eq(application)
35
35
  end
36
-
36
+
37
37
  end
38
-
38
+
39
39
  context "when nil is passed" do
40
-
40
+
41
41
  before { instance.application = nil }
42
-
42
+
43
43
  it "should set the attribute correctly" do
44
44
  expect(instance.application).to eq(nil)
45
45
  end
46
-
46
+
47
47
  end
48
-
48
+
49
49
  context "when an invalid object is passed" do
50
-
50
+
51
51
  it "should raise an error" do
52
52
  expect { instance.application = "invalid thing" }.to raise_error(Cura::Error::InvalidApplication)
53
53
  end
54
-
54
+
55
55
  end
56
-
56
+
57
57
  end
58
-
58
+
59
59
  end