wxruby3-shapes 0.9.0.pre.beta.3

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 (112) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +12 -0
  3. data/CREDITS.md +18 -0
  4. data/INSTALL.md +39 -0
  5. data/LICENSE +21 -0
  6. data/README.md +118 -0
  7. data/assets/screenshot.png +0 -0
  8. data/bin/wx-shapes +9 -0
  9. data/lib/wx/shapes/arrow_base.rb +86 -0
  10. data/lib/wx/shapes/arrows/circle_arrow.rb +39 -0
  11. data/lib/wx/shapes/arrows/diamond_arrow.rb +33 -0
  12. data/lib/wx/shapes/arrows/open_arrow.rb +56 -0
  13. data/lib/wx/shapes/arrows/solid_arrow.rb +69 -0
  14. data/lib/wx/shapes/art/shape_canvas/page.xpm +73 -0
  15. data/lib/wx/shapes/auto_layout.rb +358 -0
  16. data/lib/wx/shapes/base.rb +33 -0
  17. data/lib/wx/shapes/canvas_history.rb +84 -0
  18. data/lib/wx/shapes/connection_point.rb +238 -0
  19. data/lib/wx/shapes/core.rb +19 -0
  20. data/lib/wx/shapes/diagram.rb +659 -0
  21. data/lib/wx/shapes/events.rb +389 -0
  22. data/lib/wx/shapes/printout.rb +136 -0
  23. data/lib/wx/shapes/serializable.rb +440 -0
  24. data/lib/wx/shapes/serialize/core.rb +40 -0
  25. data/lib/wx/shapes/serialize/id.rb +82 -0
  26. data/lib/wx/shapes/serialize/wx.rb +104 -0
  27. data/lib/wx/shapes/serializer/json.rb +258 -0
  28. data/lib/wx/shapes/serializer/yaml.rb +125 -0
  29. data/lib/wx/shapes/shape.rb +2129 -0
  30. data/lib/wx/shapes/shape_canvas.rb +3285 -0
  31. data/lib/wx/shapes/shape_data_object.rb +43 -0
  32. data/lib/wx/shapes/shape_handle.rb +287 -0
  33. data/lib/wx/shapes/shape_list.rb +161 -0
  34. data/lib/wx/shapes/shapes/bitmap_shape.rb +257 -0
  35. data/lib/wx/shapes/shapes/circle_shape.rb +136 -0
  36. data/lib/wx/shapes/shapes/control_shape.rb +483 -0
  37. data/lib/wx/shapes/shapes/curve_shape.rb +231 -0
  38. data/lib/wx/shapes/shapes/diamond_shape.rb +62 -0
  39. data/lib/wx/shapes/shapes/edit_text_shape.rb +317 -0
  40. data/lib/wx/shapes/shapes/ellipse_shape.rb +106 -0
  41. data/lib/wx/shapes/shapes/flex_grid_shape.rb +78 -0
  42. data/lib/wx/shapes/shapes/grid_shape.rb +404 -0
  43. data/lib/wx/shapes/shapes/line_shape.rb +907 -0
  44. data/lib/wx/shapes/shapes/multi_sel_rect.rb +214 -0
  45. data/lib/wx/shapes/shapes/ortho_shape.rb +357 -0
  46. data/lib/wx/shapes/shapes/polygon_shape.rb +294 -0
  47. data/lib/wx/shapes/shapes/rect_shape.rb +378 -0
  48. data/lib/wx/shapes/shapes/round_ortho_shape.rb +131 -0
  49. data/lib/wx/shapes/shapes/round_rect_shape.rb +142 -0
  50. data/lib/wx/shapes/shapes/square_shape.rb +119 -0
  51. data/lib/wx/shapes/shapes/text_shape.rb +324 -0
  52. data/lib/wx/shapes/thumbnail.rb +234 -0
  53. data/lib/wx/shapes/version.rb +12 -0
  54. data/lib/wx/shapes/wx.rb +29 -0
  55. data/lib/wx/shapes.rb +18 -0
  56. data/lib/wx/wx-shapes/base.rb +87 -0
  57. data/lib/wx/wx-shapes/cmd/sampler.rb +58 -0
  58. data/lib/wx/wx-shapes/cmd/test.rb +27 -0
  59. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +7 -0
  60. data/rakelib/yard/templates/default/layout/html/setup.rb +5 -0
  61. data/rakelib/yard/yard/relative_markdown_links/version.rb +8 -0
  62. data/rakelib/yard/yard/relative_markdown_links.rb +39 -0
  63. data/rakelib/yard/yard-custom-templates.rb +2 -0
  64. data/rakelib/yard/yard-relative_markdown_links.rb +4 -0
  65. data/samples/demo/art/AlignBottom.xpm +35 -0
  66. data/samples/demo/art/AlignCenter.xpm +35 -0
  67. data/samples/demo/art/AlignLeft.xpm +35 -0
  68. data/samples/demo/art/AlignMiddle.xpm +35 -0
  69. data/samples/demo/art/AlignRight.xpm +35 -0
  70. data/samples/demo/art/AlignTop.xpm +35 -0
  71. data/samples/demo/art/Bitmap.xpm +25 -0
  72. data/samples/demo/art/Circle.xpm +22 -0
  73. data/samples/demo/art/Curve.xpm +21 -0
  74. data/samples/demo/art/Diamond.xpm +22 -0
  75. data/samples/demo/art/EditText.xpm +21 -0
  76. data/samples/demo/art/Ellipse.xpm +22 -0
  77. data/samples/demo/art/FixedRect.xpm +22 -0
  78. data/samples/demo/art/FlexGrid.xpm +22 -0
  79. data/samples/demo/art/GC.xpm +23 -0
  80. data/samples/demo/art/Grid.xpm +22 -0
  81. data/samples/demo/art/Line.xpm +21 -0
  82. data/samples/demo/art/NoSource.xpm +69 -0
  83. data/samples/demo/art/OrthoLine.xpm +21 -0
  84. data/samples/demo/art/Rect.xpm +22 -0
  85. data/samples/demo/art/RoundOrthoLine.xpm +21 -0
  86. data/samples/demo/art/RoundRect.xpm +22 -0
  87. data/samples/demo/art/Shadow.xpm +23 -0
  88. data/samples/demo/art/StandAloneLine.xpm +22 -0
  89. data/samples/demo/art/Text.xpm +21 -0
  90. data/samples/demo/art/Tool.xpm +23 -0
  91. data/samples/demo/art/sample.xpm +251 -0
  92. data/samples/demo/demo.rb +658 -0
  93. data/samples/demo/frame_canvas.rb +422 -0
  94. data/samples/demo/images/motyl.bmp +0 -0
  95. data/samples/demo/images/motyl2.bmp +0 -0
  96. data/samples/sample1/art/sample.xpm +251 -0
  97. data/samples/sample1/sample.rb +263 -0
  98. data/samples/sample2/art/sample.xpm +251 -0
  99. data/samples/sample2/sample.rb +133 -0
  100. data/samples/sample2/sample_canvas.rb +35 -0
  101. data/samples/sample2/sample_shape.rb +108 -0
  102. data/samples/sample3/art/sample.xpm +251 -0
  103. data/samples/sample3/sample.rb +281 -0
  104. data/samples/sample4/art/sample.xpm +251 -0
  105. data/samples/sample4/sample.rb +180 -0
  106. data/tests/art/motyl.bmp +0 -0
  107. data/tests/lib/wxapp_runner.rb +64 -0
  108. data/tests/serializer_tests.rb +521 -0
  109. data/tests/test_grid_shapes.rb +42 -0
  110. data/tests/test_serialize.rb +7 -0
  111. data/tests/test_serialize_yaml.rb +17 -0
  112. metadata +242 -0
@@ -0,0 +1,389 @@
1
+ # Wx::SF event classes
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ module Wx::SF
5
+
6
+ # Class encapsulates generic Wx::SF shape's event.
7
+ class ShapeEvent < Wx::Event
8
+ # Constructor
9
+ # @param [Integer] evt_type
10
+ # @param [Wx::SF::Serializable::ID, Integer] id
11
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
12
+ super(evt_type, id.to_i)
13
+ @shape = nil
14
+ @vetoed = false
15
+ end
16
+
17
+ # Insert a shape object to the event object.
18
+ # @param [Wx::SF::Shape] shape shape object
19
+ def set_shape(shape)
20
+ @shape = shape
21
+ end
22
+ alias :shape= :set_shape
23
+
24
+ # Get a shape object from the event object.
25
+ # @return [Wx::SF::Shape,nil] shape object.
26
+ def get_shape
27
+ @shape
28
+ end
29
+ alias :shape :get_shape
30
+
31
+ # Check if the event has been vetoed or not.
32
+ # @return [Boolean] true if the event has been vetoed.
33
+ def is_vetoed
34
+ @vetoed
35
+ end
36
+ alias :vetoed? :is_vetoed
37
+
38
+ # Set the veto flag to true.
39
+ def veto
40
+ @vetoed = true
41
+ end
42
+ end
43
+
44
+ # Class encapsulates Wx::SF shape's key down event.
45
+ class ShapeKeyEvent < Wx::Event
46
+ # Constructor
47
+ # @param [Integer] evt_type
48
+ # @param [Wx::SF::Serializable::ID, Integer] id
49
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
50
+ super(evt_type, id.to_i)
51
+ @shape = nil
52
+ @key_code = 0
53
+ end
54
+
55
+ # Insert a shape object to the event object.
56
+ # @param [Wx::SF::Shape] shape shape object
57
+ def set_shape(shape)
58
+ @shape = shape
59
+ end
60
+ alias :shape= :set_shape
61
+
62
+ # Get a shape object from the event object.
63
+ # @return [Wx::SF::Shape,nil] shape object.
64
+ def get_shape
65
+ @shape
66
+ end
67
+ alias :shape :get_shape
68
+
69
+ # Set key code.
70
+ # @param [Integer] key_code Code of pressed key
71
+ def set_key_code(key_code)
72
+ @key_code = key_code
73
+ end
74
+ alias :key_code= :set_key_code
75
+
76
+ # Get key code.
77
+ # @return Code of pressed key
78
+ def get_key_code
79
+ @key_code
80
+ end
81
+ alias :key_code :get_key_code
82
+ end
83
+
84
+ # Class encapsulates Wx::SF shape's mouse event.
85
+ class ShapeMouseEvent < Wx::Event
86
+ # Constructor
87
+ # @param [Integer] evt_type
88
+ # @param [Wx::SF::Serializable::ID, Integer] id
89
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
90
+ super(evt_type, id.to_i)
91
+ @shape = nil
92
+ @mouse_pos = Wx::DEFAULT_POSITION
93
+ end
94
+
95
+ # Insert a shape object to the event object.
96
+ # @param [Wx::SF::Shape] shape shape object
97
+ def set_shape(shape)
98
+ @shape = shape
99
+ end
100
+ alias :shape= :set_shape
101
+
102
+ # Get a shape object from the event object.
103
+ # @return [Wx::SF::Shape,nil] shape object.
104
+ def get_shape
105
+ @shape
106
+ end
107
+ alias :shape :get_shape
108
+
109
+ # Set absolute position of mouse cursor.
110
+ # @param [Wx::Point] mouse_position Mouse cursor's absolute position
111
+ def set_mouse_position(mouse_position)
112
+ @mouse_position = mouse_position.to_point
113
+ end
114
+ alias :mouse_position= :set_mouse_position
115
+
116
+ # Get absolute position of mouse cursor
117
+ # @return [Wx::Point] Mouse cursor's absolute position
118
+ def get_mouse_position
119
+ @mouse_position
120
+ end
121
+ alias :mouse_position :get_mouse_position
122
+ end
123
+
124
+ # Class encapsulates Wx::SF shape text change event.
125
+ class ShapeTextEvent < Wx::Event
126
+ # Constructor
127
+ # @param [Integer] evt_type
128
+ # @param [Wx::SF::Serializable::ID, Integer] id
129
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
130
+ super(evt_type, id.to_i)
131
+ @shape = nil
132
+ @text = ''
133
+ end
134
+
135
+ # Insert a shape object to the event object.
136
+ # @param [Wx::SF::Shape] shape shape object
137
+ def set_shape(shape)
138
+ @shape = shape
139
+ end
140
+ alias :shape= :set_shape
141
+
142
+ # Get a shape object from the event object.
143
+ # @return [Wx::SF::Shape,nil] shape object.
144
+ def get_shape
145
+ @shape
146
+ end
147
+ alias :shape :get_shape
148
+
149
+ # Set new shape text
150
+ # @param [String] text new text
151
+ def set_text(text)
152
+ @text = text
153
+ end
154
+ alias :text= :set_text
155
+
156
+ # Get shape text
157
+ # @return [String] shape text
158
+ def get_text
159
+ @text
160
+ end
161
+ alias :text :get_text
162
+ end
163
+
164
+ # Class encapsulates Wx::SF shape handle related event.
165
+ class ShapeHandleEvent < Wx::Event
166
+ # Constructor
167
+ # @param [Integer] evt_type
168
+ # @param [Wx::SF::Serializable::ID, Integer] id
169
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
170
+ super(evt_type, id.to_i)
171
+ @shape = nil
172
+ @handle = nil
173
+ end
174
+
175
+ # Insert a shape object to the event object.
176
+ # @param [Wx::SF::Shape] shape shape object
177
+ def set_shape(shape)
178
+ @shape = shape
179
+ end
180
+ alias :shape= :set_shape
181
+
182
+ # Get a shape object from the event object.
183
+ # @return [Wx::SF::Shape,nil] shape object.
184
+ def get_shape
185
+ @shape
186
+ end
187
+ alias :shape :get_shape
188
+
189
+ # Set dragged shape handle
190
+ # @param [Wx::Shape::Handle] handle shape handle
191
+ def set_handle(handle)
192
+ @handle = handle
193
+ end
194
+ alias :handle= :set_handle
195
+
196
+ # Get shape handle
197
+ # @return [Wx::SF::Shape::Handle] shape handle
198
+ def get_handle
199
+ @handle
200
+ end
201
+ alias :handle :get_handle
202
+ end
203
+
204
+ if Wx.has_feature?(:USE_DRAG_AND_DROP)
205
+
206
+ # Class encapsulates Wx::SF shape on drop event.
207
+ class ShapeDropEvent < Wx::Event
208
+ # Constructor
209
+ # @param [Integer] evt_type
210
+ # @param [Integer] x
211
+ # @param [Integer] y
212
+ # @param [Wx::SF::ShapeCanvas] target
213
+ # @param [Wx::DragResult] def_result
214
+ # @param [Wx::SF::Serializable::ID, Integer] id
215
+ def initialize(evt_type = Wx::EVT_NULL, x = 0, y = 0, target = nil, def_result = Wx::DragResult::DragNone, id = 0)
216
+ super(evt_type, id.to_i)
217
+ @dropped_shapes = []
218
+ @drop_position = Wx::Point.new(x, y)
219
+ @drop_target = target
220
+ @drag_result = def_result
221
+ end
222
+
223
+ # Add given shapes to dropped shapes list.
224
+ # @param [Array<Wx::SF::Shape>] shapes shape list
225
+ def set_dropped_shapes(shapes)
226
+ @dropped_shapes.concat(shapes)
227
+ end
228
+ alias :dropped_shapes= :set_dropped_shapes
229
+
230
+ # Get list of dropped shapes
231
+ # @return [Array<Wx::SF::Shape>] shape list
232
+ def get_dropped_shapes
233
+ @dropped_shapes
234
+ end
235
+ alias :dropped_shapes :get_dropped_shapes
236
+
237
+ # Set position where shapes were dropped
238
+ # @param [Wx::Point] pos drop position
239
+ def set_drop_position(pos)
240
+ @drop_position = pos.to_point
241
+ end
242
+ alias :drop_position= :set_drop_position
243
+
244
+ # Get drop position
245
+ # @return [Wx::Point] drop position
246
+ def get_drop_position
247
+ @drop_position
248
+ end
249
+ alias :drop_position :get_drop_position
250
+
251
+ # Set target (shape canvas) where shapes were dropped
252
+ # @param [Wx::SF::ShapeCanvas] trg drop target
253
+ def set_drop_target(trg)
254
+ @drop_target = trg
255
+ end
256
+ alias :drop_target= :set_drop_target
257
+
258
+ # Get drop target
259
+ # @return [Wx::SF::ShapeCanvas] drop target
260
+ def get_drop_target
261
+ @drop_target
262
+ end
263
+ alias :drop_target :get_drop_target
264
+
265
+ # Set drag result
266
+ # @param [Wx::DragResult] dr drag result
267
+ def set_drag_result(dr)
268
+ @drag_result = dr
269
+ end
270
+ alias :drag_result= :set_drag_result
271
+
272
+ # Get drag result
273
+ # @return [Wx::DragResult] drag result
274
+ def get_drag_result
275
+ @drag_result
276
+ end
277
+ alias :drag_result :get_drag_result
278
+ end
279
+
280
+ end
281
+
282
+ # Class encapsulates Wx::SF shape paste event.
283
+ class ShapePasteEvent < Wx::Event
284
+ # Constructor
285
+ # @param [Integer] evt_type
286
+ # @param [Wx::SF::ShapeCanvas] target
287
+ # @param [Wx::SF::Serializable::ID, Integer] id
288
+ def initialize(evt_type = Wx::EVT_NULL, target = nil, id = 0)
289
+ super(evt_type, id.to_i)
290
+ @pasted_shapes = []
291
+ @drop_target = target
292
+ end
293
+
294
+ # Add given shapes to pasted shapes list.
295
+ # @param [Array<Wx::SF::Shape>] shapes shape list
296
+ def set_pasted_shapes(shapes)
297
+ @pasted_shapes.concat(shapes)
298
+ end
299
+ alias :pasted_shapes= :set_pasted_shapes
300
+
301
+ # Get list of pasted shapes
302
+ # @return [Array<Wx::SF::Shape>] shape list
303
+ def get_pasted_shapes
304
+ @pasted_shapes
305
+ end
306
+ alias :pasted_shapes :get_pasted_shapes
307
+
308
+ # Set target (shape canvas) where shapes are pasted
309
+ # @param [Wx::SF::ShapeCanvas] trg drop target
310
+ def set_drop_target(trg)
311
+ @drop_target = trg
312
+ end
313
+ alias :drop_target= :set_drop_target
314
+
315
+ # Get drop target
316
+ # @return [Wx::SF::ShapeCanvas] drop target
317
+ def get_drop_target
318
+ @drop_target
319
+ end
320
+ alias :drop_target :get_drop_target
321
+ end
322
+
323
+ # Class encapsulates Wx::SF shape child drop event.
324
+ class ShapeChildDropEvent < Wx::Event
325
+ # Constructor
326
+ # @param [Integer] evt_type
327
+ # @param [Wx::SF::Serializable::ID, Integer] id
328
+ def initialize(evt_type = Wx::EVT_NULL, id = 0)
329
+ super(evt_type, id.to_i)
330
+ @shape = nil
331
+ @child = nil
332
+ end
333
+
334
+ # Insert a shape object to the event object.
335
+ # @param [Wx::SF::Shape] shape shape object
336
+ def set_shape(shape)
337
+ @shape = shape
338
+ end
339
+ alias :shape= :set_shape
340
+
341
+ # Get a shape object from the event object.
342
+ # @return [Wx::SF::Shape,nil] shape object.
343
+ def get_shape
344
+ @shape
345
+ end
346
+ alias :shape :get_shape
347
+
348
+ # Set dropped child shape
349
+ # @param [Wx::SF::Shape] child child shape object
350
+ def set_child_shape(child)
351
+ @child = child
352
+ end
353
+ alias :child_shape= :set_child_shape
354
+
355
+ # Get child shape object from the event object.
356
+ # @return [Wx::SF::Shape,nil] child shape object.
357
+ def get_child_shape
358
+ @child
359
+ end
360
+ alias :child_shape :get_child_shape
361
+ end
362
+
363
+ EVT_SF_LINE_DONE = Wx::EvtHandler.register_class(ShapeEvent, nil, 'evt_sf_line_done', 0)
364
+ EVT_SF_TEXT_CHANGE = Wx::EvtHandler.register_class(ShapeTextEvent, nil, 'evt_sf_text_change', 0)
365
+ if Wx.has_feature?(:USE_DRAG_AND_DROP)
366
+ EVT_SF_ON_DROP = Wx::EvtHandler.register_class(ShapeDropEvent, nil, 'evt_sf_on_drop', 0)
367
+ end
368
+ EVT_SF_ON_PASTE = Wx::EvtHandler.register_class(ShapePasteEvent, nil, 'evt_sf_on_paste', 0)
369
+ EVT_SF_SHAPE_LEFT_DOWN = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_left_down', 0)
370
+ EVT_SF_SHAPE_LEFT_DCLICK = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_left_dclick', 0)
371
+ EVT_SF_SHAPE_RIGHT_DOWN = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_right_down', 0)
372
+ EVT_SF_SHAPE_RIGHT_DCLICK = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_right_dclick', 0)
373
+ EVT_SF_SHAPE_DRAG_BEGIN = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_drag_begin', 0)
374
+ EVT_SF_SHAPE_DRAG = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_drag', 0)
375
+ EVT_SF_SHAPE_DRAG_END = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_drag_end', 0)
376
+ EVT_SF_SHAPE_HANDLE_BEGIN = Wx::EvtHandler.register_class(ShapeHandleEvent, nil, 'evt_sf_shape_handle_begin', 0)
377
+ EVT_SF_SHAPE_HANDLE = Wx::EvtHandler.register_class(ShapeHandleEvent, nil, 'evt_sf_shape_handle', 0)
378
+ EVT_SF_SHAPE_HANDLE_END = Wx::EvtHandler.register_class(ShapeHandleEvent, nil, 'evt_sf_shape_handle_end', 0)
379
+ EVT_SF_SHAPE_KEYDOWN = Wx::EvtHandler.register_class(ShapeKeyEvent, nil, 'evt_sf_shape_keydown', 0)
380
+ EVT_SF_SHAPE_MOUSE_ENTER = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_mouse_enter', 0)
381
+ EVT_SF_SHAPE_MOUSE_OVER = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_mouse_over', 0)
382
+ EVT_SF_SHAPE_MOUSE_LEAVE = Wx::EvtHandler.register_class(ShapeMouseEvent, nil, 'evt_sf_shape_mouse_leave', 0)
383
+ EVT_SF_SHAPE_CHILD_DROP = Wx::EvtHandler.register_class(ShapeChildDropEvent, nil, 'evt_sf_shape_child_drop', 0)
384
+ EVT_SF_LINE_BEFORE_DONE = Wx::EvtHandler.register_class(ShapeEvent, nil, 'evt_sf_line_before_done', 0)
385
+ EVT_SF_LINE_HANDLE_ADD = Wx::EvtHandler.register_class(ShapeHandleEvent, nil, 'evt_sf_line_handle_add', 0)
386
+ EVT_SF_LINE_HANDLE_REMOVE = Wx::EvtHandler.register_class(ShapeHandleEvent, nil, 'evt_sf_line_handle_remove', 0)
387
+ EVT_SF_SHAPE_SIZE_CHANGED = Wx::EvtHandler.register_class(ShapeEvent, nil, 'evt_sf_shape_size_changed', 0)
388
+
389
+ end
@@ -0,0 +1,136 @@
1
+ # Wx::SF::Printout - printout class
2
+ # Copyright (c) M.J.N. Corino, The Netherlands
3
+
4
+ module Wx::SF
5
+
6
+ class Printout < Wx::PRT::Printout
7
+
8
+ # Constructor.
9
+ # @param [String] title
10
+ # @param [ShapeCanvas] canvas canvas to print
11
+ def initialize(title, canvas)
12
+ super(title)
13
+ @canvas = canvas
14
+ end
15
+
16
+ # Access (set/get) canvas (to be) printed.
17
+ attr_accessor :canvas
18
+
19
+ # Called by printing framework. Functions TRUE if a page of given index already exists in printed document.
20
+ # This function can be overridden if necessary.
21
+ def has_page(page)
22
+ page == 1
23
+ end
24
+
25
+ # Called by printing framework. Initialize print job. This function can be overridden if necessary.
26
+ def on_begin_document(start_page, end_page)
27
+ # HINT: perform custom actions...
28
+ super
29
+ end
30
+
31
+ # Called by printing framework. Deinitialize the print job. This function can be overridden if necessary.
32
+ def on_end_document
33
+ # HINT: perform custom actions...
34
+ super
35
+ end
36
+
37
+ # Called by printing framework. It does the print job. This function can be overridden if necessary.
38
+ def on_print_page(page)
39
+ dc = get_dc
40
+ if dc && @canvas
41
+ # get drawing size
42
+ total_bb = @canvas.get_total_bounding_box
43
+ max_x = total_bb.right
44
+ max_y = total_bb.bottom
45
+
46
+ # set printing mode
47
+ case @canvas.get_print_mode
48
+ when ShapeCanvas::PRINTMODE::FIT_TO_PAGE
49
+ fit_this_size_to_page([max_x, max_y])
50
+ fit_rect = get_logical_page_rect
51
+
52
+ when ShapeCanvas::PRINTMODE::FIT_TO_PAPER
53
+ fit_this_size_to_paper([max_x, max_y])
54
+ fit_rect = get_logical_paper_rect
55
+
56
+ when ShapeCanvas::PRINTMODE::FIT_TO_MARGINS
57
+ fit_this_size_to_page_margins([max_x, max_y], ShapeCanvas.page_setup_data)
58
+ fit_rect = get_logical_page_margins_rect(ShapeCanvas.page_setup_data)
59
+
60
+ when ShapeCanvas::PRINTMODE::MAP_TO_PAGE
61
+ map_screen_size_to_page
62
+ fit_rect = get_logical_page_rect
63
+
64
+ when ShapeCanvas::PRINTMODE::MAP_TO_PAPER
65
+ map_screen_size_to_paper
66
+ fit_rect = get_logical_paper_rect
67
+
68
+ when ShapeCanvas::PRINTMODE::MAP_TO_MARGINS
69
+ map_screen_size_to_page
70
+ fit_rect = get_logical_page_margins_rect(ShapeCanvas.page_setup_data)
71
+
72
+ when ShapeCanvas::PRINTMODE::MAP_TO_DEVICE
73
+ map_screen_size_to_device
74
+ fit_rect = get_logical_page_rect
75
+
76
+ else
77
+ fit_rect = Wx::Rect.new
78
+ end
79
+
80
+ # This offsets the image so that it is centered within the reference
81
+ # rectangle defined above.
82
+ xoff = ((fit_rect.width - max_x - total_bb.left) / 2) - fit_rect.x
83
+ yoff = ((fit_rect.height - max_y - total_bb.top) / 2) - fit_rect.y
84
+
85
+ case @canvas.get_print_h_align
86
+ when ShapeCanvas::HALIGN::LEFT
87
+ xoff = 0
88
+ when ShapeCanvas::HALIGN::RIGHT
89
+ xoff = fit_rect.width - total_bb.width
90
+ end
91
+
92
+ case @canvas.get_print_v_align
93
+ when ShapeCanvas::VALIGN::TOP
94
+ yoff = 0
95
+ when ShapeCanvas::VALIGN::BOTTOM
96
+ yoff = fit_rect.height - total_bb.height
97
+ end
98
+
99
+ offset_logical_origin(xoff, yoff)
100
+
101
+ # store current canvas properties
102
+ prev_scale = @canvas.get_scale
103
+ prev_style = @canvas.get_style
104
+ prev_colour = @canvas.get_canvas_colour
105
+
106
+ # disable canvas background drawing if required
107
+ unless @canvas.has_style?(ShapeCanvas::STYLE::PRINT_BACKGROUND)
108
+ @canvas.remove_style(ShapeCanvas::STYLE::GRADIENT_BACKGROUND)
109
+ @canvas.remove_style(ShapeCanvas::STYLE::GRID_SHOW)
110
+ @canvas.set_canvas_colour(Wx::WHITE)
111
+ end
112
+
113
+ # draw the canvas content without any scale (dc is scaled by the printing framework)
114
+ @canvas.set_scale(1.0)
115
+ @canvas.draw_content(dc, NOT_FROM_PAINT)
116
+ @canvas.set_scale(prev_scale)
117
+
118
+ # restore previous canvas properties if needed
119
+ unless @canvas.has_style?(ShapeCanvas::STYLE::PRINT_BACKGROUND)
120
+ @canvas.set_style(prev_style)
121
+ @canvas.set_canvas_colour(prev_colour)
122
+ end
123
+
124
+ return true
125
+ end
126
+ false
127
+ end
128
+
129
+ # Called by printing framework. Supply information about printed pages. This function can be overridden if necessary.
130
+ def get_page_info
131
+ [1,1,1,1]
132
+ end
133
+
134
+ end
135
+
136
+ end