wxruby3-shapes 0.9.0.pre.beta.3 → 0.9.6

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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +5 -7
  3. data/README.md +38 -6
  4. data/assets/logo.svg +339 -0
  5. data/assets/logo.xpm +60 -0
  6. data/assets/screenshot.png +0 -0
  7. data/assets/social.png +0 -0
  8. data/bin/wx-shapes +1 -1
  9. data/lib/wx/shapes/arrow_base.rb +4 -11
  10. data/lib/wx/shapes/arrows/circle_arrow.rb +22 -11
  11. data/lib/wx/shapes/arrows/circle_prong_arrow.rb +48 -0
  12. data/lib/wx/shapes/arrows/cross_bar_arrow.rb +57 -0
  13. data/lib/wx/shapes/arrows/cross_bar_circle_arrow.rb +56 -0
  14. data/lib/wx/shapes/arrows/cross_bar_prong_arrow.rb +49 -0
  15. data/lib/wx/shapes/arrows/crossed_circle.rb +46 -0
  16. data/lib/wx/shapes/arrows/cup_arrow.rb +65 -0
  17. data/lib/wx/shapes/arrows/diamond_arrow.rb +8 -13
  18. data/lib/wx/shapes/arrows/double_cross_bar_arrow.rb +27 -0
  19. data/lib/wx/shapes/arrows/filled_arrow.rb +60 -0
  20. data/lib/wx/shapes/arrows/line_arrow.rb +67 -0
  21. data/lib/wx/shapes/arrows/open_arrow.rb +22 -23
  22. data/lib/wx/shapes/arrows/prong_arrow.rb +42 -0
  23. data/lib/wx/shapes/arrows/solid_arrow.rb +21 -35
  24. data/lib/wx/shapes/arrows/square_arrow.rb +37 -0
  25. data/lib/wx/shapes/auto_layout.rb +2 -2
  26. data/lib/wx/shapes/base.rb +1 -1
  27. data/lib/wx/shapes/canvas_history.rb +20 -0
  28. data/lib/wx/shapes/connection_point.rb +10 -6
  29. data/lib/wx/shapes/diagram.rb +98 -78
  30. data/lib/wx/shapes/events.rb +8 -8
  31. data/lib/wx/shapes/printout.rb +3 -16
  32. data/lib/wx/shapes/serializable.rb +2 -436
  33. data/lib/wx/shapes/serialize/wx.rb +30 -18
  34. data/lib/wx/shapes/shape.rb +211 -168
  35. data/lib/wx/shapes/shape_canvas.rb +728 -267
  36. data/lib/wx/shapes/shape_data_object.rb +99 -18
  37. data/lib/wx/shapes/shape_handle.rb +18 -11
  38. data/lib/wx/shapes/shape_list.rb +34 -67
  39. data/lib/wx/shapes/shapes/bitmap_shape.rb +23 -24
  40. data/lib/wx/shapes/shapes/box_shape.rb +389 -0
  41. data/lib/wx/shapes/shapes/circle_shape.rb +19 -22
  42. data/lib/wx/shapes/shapes/control_shape.rb +77 -41
  43. data/lib/wx/shapes/shapes/curve_shape.rb +38 -31
  44. data/lib/wx/shapes/shapes/diamond_shape.rb +7 -17
  45. data/lib/wx/shapes/shapes/edit_text_shape.rb +6 -9
  46. data/lib/wx/shapes/shapes/ellipse_shape.rb +12 -15
  47. data/lib/wx/shapes/shapes/flex_grid_shape.rb +58 -33
  48. data/lib/wx/shapes/shapes/grid_shape.rb +259 -161
  49. data/lib/wx/shapes/shapes/line_shape.rb +155 -161
  50. data/lib/wx/shapes/shapes/manager_shape.rb +77 -0
  51. data/lib/wx/shapes/shapes/multi_sel_rect.rb +8 -8
  52. data/lib/wx/shapes/shapes/ortho_shape.rb +31 -36
  53. data/lib/wx/shapes/shapes/polygon_shape.rb +23 -29
  54. data/lib/wx/shapes/shapes/rect_shape.rb +95 -53
  55. data/lib/wx/shapes/shapes/round_ortho_shape.rb +6 -8
  56. data/lib/wx/shapes/shapes/round_rect_shape.rb +20 -24
  57. data/lib/wx/shapes/shapes/square_shape.rb +14 -17
  58. data/lib/wx/shapes/shapes/text_shape.rb +95 -53
  59. data/lib/wx/shapes/version.rb +1 -1
  60. data/lib/wx/shapes/wx.rb +16 -7
  61. data/lib/wx/wx-shapes/cmd/test.rb +1 -1
  62. data/samples/demo/arrows.json +1 -0
  63. data/samples/demo/arrows.yaml +793 -0
  64. data/samples/demo/art/HBox.xpm +22 -0
  65. data/samples/demo/art/VBox.xpm +22 -0
  66. data/samples/demo/art/logo.xpm +60 -0
  67. data/samples/demo/class.json +1 -0
  68. data/samples/demo/class.yaml +5631 -0
  69. data/samples/demo/demo.rb +301 -91
  70. data/samples/demo/dialogs.rb +1405 -0
  71. data/samples/demo/erd.json +1 -0
  72. data/samples/demo/erd.yaml +4072 -0
  73. data/samples/demo/frame_canvas.rb +409 -33
  74. data/samples/sample1/art/logo.xpm +60 -0
  75. data/samples/sample1/sample.rb +11 -11
  76. data/samples/sample2/art/logo.xpm +60 -0
  77. data/samples/sample2/sample.rb +2 -2
  78. data/samples/sample2/sample_shape.rb +15 -15
  79. data/samples/sample3/art/logo.xpm +60 -0
  80. data/samples/sample3/sample.rb +3 -3
  81. data/samples/sample4/art/logo.xpm +60 -0
  82. data/samples/sample4/sample.rb +2 -2
  83. data/tests/lib/wxapp_runner.rb +4 -0
  84. data/tests/serializer_tests.rb +8 -441
  85. data/tests/test_grid_shapes.rb +2 -2
  86. data/tests/test_serialize_xml.rb +17 -0
  87. data/tests/test_serialize_yaml.rb +2 -2
  88. metadata +78 -28
  89. data/lib/wx/shapes/serialize/core.rb +0 -40
  90. data/lib/wx/shapes/serialize/id.rb +0 -82
  91. data/lib/wx/shapes/serializer/json.rb +0 -258
  92. data/lib/wx/shapes/serializer/yaml.rb +0 -125
  93. data/samples/demo/art/sample.xpm +0 -251
  94. data/samples/sample1/art/sample.xpm +0 -251
  95. data/samples/sample2/art/sample.xpm +0 -251
  96. data/samples/sample3/art/sample.xpm +0 -251
  97. data/samples/sample4/art/sample.xpm +0 -251
@@ -0,0 +1,57 @@
1
+ # Wx::SF::CrossBarArrow - crossbar arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/line_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::LineArrow class and encapsulates
9
+ # arrow shape consisting of single crossbar before the end of the
10
+ # parent line shape.
11
+ class CrossBarArrow < LineArrow
12
+
13
+ class << self
14
+ def arrow(ratio)
15
+ x = ratio*6; y = ratio*6
16
+ [[Wx::RealPoint.new(x,y), Wx::RealPoint.new(x, -y), Wx::RealPoint.new(x, 0)]]
17
+ end
18
+ end
19
+
20
+ # Constructor
21
+ # @param [Wx::SF::Shape] parent parent shape
22
+ def initialize(parent=nil)
23
+ super(parent)
24
+ scale
25
+ end
26
+
27
+ def lines
28
+ @lines ||= CrossBarArrow.arrow(@ratio)
29
+ end
30
+ private :lines
31
+
32
+ def scale
33
+ @lines = nil
34
+ @ratio = 1 + (pen_width / 2) * 0.5
35
+ end
36
+ protected :scale
37
+
38
+ # Draw arrow shape at the end of a virtual line.
39
+ # @param [Wx::RealPoint] from Start of the virtual line
40
+ # @param [Wx::RealPoint] to End of the virtual line
41
+ # @param [Wx::DC] dc Device context for drawing
42
+ # @return [Wx::Point] translated connection point for arrow
43
+ def draw(from, to, dc)
44
+ bar_cp = nil
45
+ dc.with_pen(pen) do |dc|
46
+ lines.each do |line|
47
+ bar_from, bar_to, bar_cp = translate_arrow(line, from, to)
48
+ dc.draw_line(bar_from, bar_to)
49
+ end
50
+ dc.draw_line(bar_cp, to.to_point)
51
+ end
52
+ bar_cp
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,56 @@
1
+ # Wx::SF::CrossBarCircleArrow - crossbar with circle arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/circle_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::CircleArrow class and encapsulates
9
+ # circle arrow shapes with a crossbar.
10
+ class CrossBarCircleArrow < CircleArrow
11
+
12
+ class << self
13
+ def arrow(ratio)
14
+ x = ratio*6; y = ratio*6
15
+ [Wx::RealPoint.new(x,y), Wx::RealPoint.new(x, -y), Wx::RealPoint.new(x, 0)]
16
+ end
17
+ end
18
+
19
+ # Default circle radius.
20
+ RADIUS = 4
21
+
22
+ # Constructor
23
+ # @param [Wx::SF::Shape] parent parent shape
24
+ def initialize(parent=nil)
25
+ super
26
+ scale
27
+ end
28
+
29
+ def line
30
+ @line ||= CrossBarCircleArrow.arrow(@ratio)
31
+ end
32
+ private :line
33
+
34
+ def scale
35
+ @line = nil
36
+ super
37
+ end
38
+ protected :scale
39
+
40
+ # Draw arrow shape at the end of a virtual line.
41
+ # @param [Wx::RealPoint] from Start of the virtual line
42
+ # @param [Wx::RealPoint] to End of the virtual line
43
+ # @param [Wx::DC] dc Device context for drawing
44
+ def draw(from, to, dc)
45
+ dc.with_pen(pen) do |dc|
46
+ bar_from, bar_to, bar_mid = translate_arrow(line, from, to)
47
+ dc.draw_line(bar_from, bar_to)
48
+ dc.draw_line(bar_mid, to.to_point)
49
+ to = bar_mid
50
+ end
51
+ super(from, to, dc)
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,49 @@
1
+ # Wx::SF::CrossBarProngArrow - crossbar with prong arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/prong_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::ProngArrow class and encapsulates
9
+ # arrow shape consisting of single two lines bisecting before the end of the
10
+ # parent line shape with a crossbar at the intersection point.
11
+ class CrossBarProngArrow < ProngArrow
12
+
13
+ class << self
14
+ def arrow(ratio)
15
+ x = ratio*6; y = ratio*6
16
+ [Wx::RealPoint.new(0,y), Wx::RealPoint.new(0, -y), Wx::RealPoint.new(0, 0)]
17
+ end
18
+ end
19
+
20
+ def line
21
+ @line ||= CrossBarProngArrow.arrow(@ratio)
22
+ end
23
+ private :line
24
+
25
+ def scale
26
+ @line = nil
27
+ super
28
+ end
29
+ protected :scale
30
+
31
+ # Draw arrow shape at the end of a virtual line.
32
+ # @param [Wx::RealPoint] from Start of the virtual line
33
+ # @param [Wx::RealPoint] to End of the virtual line
34
+ # @param [Wx::DC] dc Device context for drawing
35
+ # @return [Wx::Point] translated connection point for arrow
36
+ def draw(from, to, dc)
37
+ to = super
38
+ dc.with_pen(pen) do |dc|
39
+ bar_from, bar_to, bar_mid = translate_arrow(line, from, to)
40
+ dc.draw_line(bar_from, bar_to)
41
+ dc.draw_line(bar_mid, to.to_point)
42
+ to = bar_mid
43
+ end
44
+ to
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,46 @@
1
+ # Wx::SF::CrossedCircleArrow - circle with cross arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/circle_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::CircleArrow class and encapsulates
9
+ # arrow shape consisting a crossed circle.
10
+ class CrossedCircleArrow < CircleArrow
11
+
12
+ class << self
13
+ def crossbar(radius)
14
+ [Wx::RealPoint.new(radius,radius), Wx::RealPoint.new(radius, -radius)]
15
+ end
16
+ end
17
+
18
+ def crossbar
19
+ @crossbar ||= CrossedCircleArrow.crossbar(radius)
20
+ end
21
+ private :crossbar
22
+
23
+ def scale
24
+ @crossbar = nil
25
+ super
26
+ end
27
+ protected :scale
28
+
29
+ # Draw arrow shape at the end of a virtual line.
30
+ # @param [Wx::RealPoint] from Start of the virtual line
31
+ # @param [Wx::RealPoint] to End of the virtual line
32
+ # @param [Wx::DC] dc Device context for drawing
33
+ # @return [Wx::Point] translated connection point for arrow
34
+ def draw(from, to, dc)
35
+ cp = super
36
+ cb = translate_arrow(crossbar, from, to)
37
+ dc.with_pen(pen) do |dc|
38
+ dc.draw_line(cb[0], cb[1])
39
+ dc.draw_line(cp, to.to_point)
40
+ end
41
+ cp
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,65 @@
1
+ # Wx::SF::SquareArrow - square arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/line_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::SolidArrow class and encapsulates
9
+ # cup arrow shapes.
10
+ class CupArrow < LineArrow
11
+
12
+ # Default arc radius size
13
+ RADIUS = 7
14
+
15
+ class << self
16
+
17
+ def arrow(radius)
18
+ [Wx::RealPoint.new(0, radius), Wx::RealPoint.new(0, -radius), Wx::RealPoint.new(0, 0), Wx::RealPoint.new(radius, 0)]
19
+ end
20
+
21
+ end
22
+
23
+ # Constructor
24
+ # @param [Wx::SF::Shape] parent parent shape
25
+ def initialize(parent=nil)
26
+ super
27
+ scale
28
+ end
29
+
30
+ # Get the circle radius
31
+ def get_radius
32
+ (RADIUS * @ratio).to_i
33
+ end
34
+ alias :radius :get_radius
35
+
36
+ def coords
37
+ @coords ||= CupArrow.arrow(get_radius)
38
+ end
39
+ protected :coords
40
+
41
+ def scale
42
+ @coords = nil
43
+ @ratio = 1 + (pen_width / 2) * 0.5
44
+ end
45
+ protected :scale
46
+
47
+ # Draw arrow shape at the end of a virtual line.
48
+ # @param [Wx::RealPoint] from Start of the virtual line
49
+ # @param [Wx::RealPoint] to End of the virtual line
50
+ # @param [Wx::DC] dc Device context for drawing
51
+ # @return [Wx::Point] translated connection point for arrow
52
+ def draw(from, to, dc)
53
+ rarrow = translate_arrow(coords, from, to)
54
+ cp = rarrow.pop
55
+ dc.with_pen(pen) do |dc|
56
+ dc.with_brush(Wx::TRANSPARENT_BRUSH) do |dc|
57
+ dc.draw_arc(*rarrow)
58
+ end
59
+ end
60
+ cp
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -5,28 +5,23 @@ require 'wx/shapes/arrows/solid_arrow'
5
5
 
6
6
  module Wx::SF
7
7
 
8
+ # Class extends the Wx::SolidArrow class and encapsulates
9
+ # solid diamond arrow shapes.
8
10
  class DiamondArrow < SolidArrow
9
11
 
10
12
  class << self
11
13
 
12
- def diamond_arrow
13
- @diamond_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(20,0), Wx::RealPoint.new(10,-4)]
14
+ def arrow(ratio)
15
+ x = ratio*10; y = ratio*5
16
+ [Wx::RealPoint.new(0,0), Wx::RealPoint.new(x, y), Wx::RealPoint.new(2*x,0), Wx::RealPoint.new(x,-y), Wx::RealPoint.new(2*x,0)]
14
17
  end
15
18
 
16
19
  end
17
20
 
18
- # Draw arrow shape at the end of a virtual line.
19
- # @param [Wx::RealPoint] from Start of the virtual line
20
- # @param [Wx::RealPoint] to End of the virtual line
21
- # @param [Wx::DC] dc Device context for drawing
22
- def draw(from, to, dc)
23
- rarrow = translate_arrow(DiamondArrow.diamond_arrow, from, to)
24
- dc.with_pen(@pen) do |dc|
25
- dc.with_brush(@fill) do |dc|
26
- dc.draw_polygon(rarrow)
27
- end
28
- end
21
+ def vertices
22
+ @vertices ||= DiamondArrow.arrow(@ratio)
29
23
  end
24
+ protected :vertices
30
25
 
31
26
  end
32
27
 
@@ -0,0 +1,27 @@
1
+ # Wx::SF::DoubleCrossBarArrow - double crossbar arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/cross_bar_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::CrossBarArrow class and encapsulates
9
+ # arrow shape consisting of double crossbar before the end of the
10
+ # parent line shape.
11
+ class DoubleCrossBarArrow < CrossBarArrow
12
+
13
+ class << self
14
+ def arrow(ratio)
15
+ x = ratio*7; y = ratio*6
16
+ [[Wx::RealPoint.new(2+x/2,y), Wx::RealPoint.new(2+x/2, -y)],[Wx::RealPoint.new(2+x,y), Wx::RealPoint.new(2+x, -y), Wx::RealPoint.new(2+x, 0)]]
17
+ end
18
+ end
19
+
20
+ def lines
21
+ @lines ||= DoubleCrossBarArrow.arrow(@ratio)
22
+ end
23
+ private :lines
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,60 @@
1
+ # Wx::SF::FilledArrow - closed line drawn arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/line_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::LineArrow class and encapsulates
9
+ # enclosed and filled arrow shapes.
10
+ class FilledArrow < LineArrow
11
+
12
+ module DEFAULT
13
+ class << self
14
+ def fill; @fill ||= Wx::WHITE_BRUSH.dup; end
15
+ end
16
+ end
17
+
18
+ property fill: :serialize_arrow_fill
19
+
20
+ # Constructor
21
+ # @param [Wx::SF::Shape] parent parent shape
22
+ def initialize(parent=nil)
23
+ super
24
+ @fill = DEFAULT.fill
25
+ end
26
+
27
+ # Get arrow fill brush
28
+ # @return [Wx::Brush]
29
+ def get_fill
30
+ @fill || (@diagram&.shape_canvas ? @diagram.shape_canvas.arrow_fill : DEFAULT.fill)
31
+ end
32
+ alias :fill :get_fill
33
+
34
+ # Set arrow fill brush
35
+ # @overload set_fill(brush)
36
+ # @param [Wx::Brush] brush
37
+ # @overload set_fill(color, style=Wx::BrushStyle::BRUSHSTYLE_SOLID)
38
+ # @param [Wx::Colour,Symbol,String] color brush color
39
+ # @param [Wx::BrushStyle] style
40
+ # @overload set_fill(stipple_bitmap)
41
+ # @param [Wx::Bitmap] stipple_bitmap
42
+ def set_fill(brush)
43
+ @fill = if args.size == 1 && Wx::Brush === args.first
44
+ args.first
45
+ else
46
+ Wx::Brush.new(*args)
47
+ end
48
+ end
49
+ alias :fill= :set_fill
50
+
51
+ # (de-)serialize only
52
+ def serialize_arrow_fill(*val)
53
+ @fill = val.first unless val.empty?
54
+ @fill
55
+ end
56
+ private :serialize_arrow_fill
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,67 @@
1
+ # Wx::SF::LineArrow - line drawn arrow base class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrow_base'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::ArrowBase class and encapsulates
9
+ # line drawn arrow shapes.
10
+ # The shapes are automatically scaled based on the line width used.
11
+ class LineArrow < ArrowBase
12
+
13
+ property pen: :serialize_pen
14
+
15
+ # Constructor
16
+ # @param [Wx::SF::Shape] parent parent shape
17
+ def initialize(parent=nil)
18
+ super
19
+ @pen = nil
20
+ end
21
+
22
+ # Get arrow border pen
23
+ # @return [Wx::Pen,nil]
24
+ def get_pen
25
+ @pen || @parent_shape&.line_pen
26
+ end
27
+ alias :pen :get_pen
28
+
29
+ # Set arrow border pen (when nil restore the default).
30
+ # @param [Wx::Pen,nil] pen
31
+ def set_pen(pen)
32
+ @pen = pen
33
+ scale
34
+ end
35
+ alias :pen= :set_pen
36
+
37
+ # Return current pen width.
38
+ # @return [Integer]
39
+ def get_pen_width
40
+ get_pen&.width || 1
41
+ end
42
+ alias :pen_width :get_pen_width
43
+
44
+ # Set a parent of the arrow shape.
45
+ # @param [Wx::SF::Shape] parent parent shape
46
+ def set_parent_shape(parent)
47
+ super
48
+ scale
49
+ end
50
+ alias :parent_shape= :set_parent_shape
51
+
52
+ # Scale the arrow.
53
+ # Does nothing by default.
54
+ def scale
55
+ # noop
56
+ end
57
+ protected :scale
58
+
59
+ def serialize_pen(*arg)
60
+ @pen = arg.shift unless arg.empty?
61
+ @pen
62
+ end
63
+ private :serialize_pen
64
+
65
+ end
66
+
67
+ end
@@ -1,54 +1,53 @@
1
1
  # Wx::SF::OpenArrow - open arrow class
2
2
  # Copyright (c) M.J.N. Corino, The Netherlands
3
3
 
4
- require 'wx/shapes/arrow_base'
4
+ require 'wx/shapes/arrows/line_arrow'
5
5
 
6
6
  module Wx::SF
7
7
 
8
- # Class extends the wxSFArrowBase class and encapsulates
8
+ # Class extends the Wx::LineArrow class and encapsulates
9
9
  # arrow shape consisting of single two lines leading from the end of the
10
10
  # parent line shape.
11
- class OpenArrow < ArrowBase
11
+ class OpenArrow < LineArrow
12
12
 
13
13
  class << self
14
- def open_arrow
15
- @open_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(10,-4)]
14
+ def arrow(ratio)
15
+ x = ratio*11; y = ratio*5
16
+ [Wx::RealPoint.new(0,0), Wx::RealPoint.new(x, y), Wx::RealPoint.new(x,-y), Wx::RealPoint.new(x, 0)]
16
17
  end
17
18
  end
18
19
 
19
- property :arrow_pen
20
-
21
20
  # Constructor
22
21
  # @param [Wx::SF::Shape] parent parent shape
23
22
  def initialize(parent=nil)
24
- super
25
- @pen = DEFAULT::BORDER
23
+ super(parent)
24
+ scale
26
25
  end
27
26
 
28
- # Get arrow border pen
29
- # @return [Wx::Pen]
30
- def get_arrow_pen
31
- @pen
27
+ def vertices
28
+ @vertices ||= OpenArrow.arrow(@ratio)
32
29
  end
33
- alias :arrow_pen :get_arrow_pen
30
+ private :vertices
34
31
 
35
- # Set arrow border pen
36
- # @param [Wx::Pen] pen
37
- def set_arrow_pen(pen)
38
- @pen = pen
32
+ def scale
33
+ @vertices = nil
34
+ @ratio = 1 + (pen_width / 2) * 0.5
39
35
  end
40
- alias :arrow_pen= :set_arrow_pen
36
+ protected :scale
41
37
 
42
38
  # Draw arrow shape at the end of a virtual line.
43
39
  # @param [Wx::RealPoint] from Start of the virtual line
44
40
  # @param [Wx::RealPoint] to End of the virtual line
45
41
  # @param [Wx::DC] dc Device context for drawing
42
+ # @return [Wx::Point] translated connection point for arrow
46
43
  def draw(from, to, dc)
47
- rarrow = translate_arrow(OpenArrow.open_arrow, from, to)
48
- dc.with_pen(@pen) do |dc|
49
- dc.draw_line(rarrow[0], rarrow[1])
50
- dc.draw_line(rarrow[0], rarrow[2])
44
+ tip, wing1, wing2, cp = translate_arrow(vertices, from, to)
45
+ dc.with_pen(pen) do |dc|
46
+ dc.draw_line(tip, wing1)
47
+ dc.draw_line(tip, wing2)
48
+ dc.draw_line(tip, cp)
51
49
  end
50
+ cp
52
51
  end
53
52
 
54
53
  end
@@ -0,0 +1,42 @@
1
+ # Wx::SF::ProngArrow - prong arrow class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ require 'wx/shapes/arrows/open_arrow'
5
+
6
+ module Wx::SF
7
+
8
+ # Class extends the Wx::OpenArrow class and encapsulates
9
+ # arrow shape consisting of single two lines bisecting before the end of the
10
+ # parent line shape.
11
+ class ProngArrow < OpenArrow
12
+
13
+ class << self
14
+ def arrow(ratio)
15
+ x = ratio*11; y = ratio*5
16
+ [Wx::RealPoint.new(x,0), Wx::RealPoint.new(0, y), Wx::RealPoint.new(0,-y), Wx::RealPoint.new(0, 0)]
17
+ end
18
+ end
19
+
20
+ def vertices
21
+ @vertices ||= ProngArrow.arrow(@ratio)
22
+ end
23
+ private :vertices
24
+
25
+ # Draw arrow shape at the end of a virtual line.
26
+ # @param [Wx::RealPoint] from Start of the virtual line
27
+ # @param [Wx::RealPoint] to End of the virtual line
28
+ # @param [Wx::DC] dc Device context for drawing
29
+ # @return [Wx::Point] translated connection point for arrow
30
+ def draw(from, to, dc)
31
+ cp, wing1, wing2, tip = translate_arrow(vertices, from, to)
32
+ dc.with_pen(pen) do |dc|
33
+ dc.draw_line(cp, wing1)
34
+ dc.draw_line(cp, wing2)
35
+ dc.draw_line(cp, tip)
36
+ end
37
+ cp
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -1,67 +1,53 @@
1
1
  # Wx::SF::SolidArrow - solid arrow class
2
2
  # Copyright (c) M.J.N. Corino, The Netherlands
3
3
 
4
- require 'wx/shapes/arrow_base'
4
+ require 'wx/shapes/arrows/filled_arrow'
5
5
 
6
6
  module Wx::SF
7
7
 
8
- class SolidArrow < ArrowBase
8
+ # Class extends the Wx::FilledArrow class and encapsulates
9
+ # solid arrow shapes.
10
+ class SolidArrow < FilledArrow
9
11
 
10
12
  class << self
11
- def solid_arrow
12
- @solid_arrow ||= [Wx::RealPoint.new(0,0), Wx::RealPoint.new(10,4), Wx::RealPoint.new(10,-4)]
13
+ def arrow(ratio)
14
+ x = ratio*11; y = ratio*5
15
+ [Wx::RealPoint.new(0,0), Wx::RealPoint.new(x, y), Wx::RealPoint.new(x,-y), Wx::RealPoint.new(x,0)]
13
16
  end
14
17
  end
15
18
 
16
- property :arrow_fill, :arrow_pen
17
-
18
19
  # Constructor
19
20
  # @param [Wx::SF::Shape] parent parent shape
20
21
  def initialize(parent=nil)
21
22
  super
22
- @fill = DEFAULT::FILL
23
- @pen = DEFAULT::BORDER
24
- end
25
-
26
- # Get arrow fill brush
27
- # @return [Wx::Brush]
28
- def get_arrow_fill
29
- @fill
30
- end
31
- alias :arrow_fill :get_arrow_fill
32
-
33
- # Set arrow fill brush
34
- # @param [Wx::Brush] brush
35
- def set_arrow_fill(brush)
36
- @fill = brush
23
+ scale
37
24
  end
38
- alias :arrow_fill= :set_arrow_fill
39
25
 
40
- # Get arrow border pen
41
- # @return [Wx::Pen]
42
- def get_arrow_pen
43
- @pen
26
+ def vertices
27
+ @vertices ||= SolidArrow.arrow(@ratio)
44
28
  end
45
- alias :arrow_pen :get_arrow_pen
29
+ protected :vertices
46
30
 
47
- # Set arrow border pen
48
- # @param [Wx::Pen] pen
49
- def set_arrow_pen(pen)
50
- @pen = pen
31
+ def scale
32
+ @vertices = nil
33
+ @ratio = 1 + (pen_width / 2) * 0.5
51
34
  end
52
- alias :arrow_pen= :set_arrow_pen
35
+ protected :scale
53
36
 
54
37
  # Draw arrow shape at the end of a virtual line.
55
38
  # @param [Wx::RealPoint] from Start of the virtual line
56
39
  # @param [Wx::RealPoint] to End of the virtual line
57
40
  # @param [Wx::DC] dc Device context for drawing
41
+ # @return [Wx::Point] translated connection point for arrow
58
42
  def draw(from, to, dc)
59
- rarrow = translate_arrow(SolidArrow.solid_arrow, from, to)
60
- dc.with_pen(@pen) do |dc|
61
- dc.with_brush(@fill) do |dc|
43
+ rarrow = translate_arrow(vertices, from, to)
44
+ cp = rarrow.pop # get connection point
45
+ dc.with_pen(pen) do |dc|
46
+ dc.with_brush(fill) do |dc|
62
47
  dc.draw_polygon(rarrow)
63
48
  end
64
49
  end
50
+ cp
65
51
  end
66
52
 
67
53
  end