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

Sign up to get free protection for your applications and to get access to all the features.
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