wxruby3 0.9.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +23 -1
  3. data/README.md +12 -26
  4. data/ext/mkrf_conf_ext.rb +11 -7
  5. data/lib/wx/core/app.rb +16 -0
  6. data/lib/wx/core/colour.rb +36 -28
  7. data/lib/wx/core/const.rb +19 -0
  8. data/lib/wx/core/enum.rb +17 -1
  9. data/lib/wx/core/geometry.rb +121 -0
  10. data/lib/wx/core/graphics_pen_info.rb +18 -0
  11. data/lib/wx/core/image.rb +49 -0
  12. data/lib/wx/core/menu_bar.rb +11 -0
  13. data/lib/wx/core/paintdc.rb +9 -3
  14. data/lib/wx/doc/app.rb +97 -41
  15. data/lib/wx/doc/bitmap.rb +4 -0
  16. data/lib/wx/doc/client_dc.rb +2 -2
  17. data/lib/wx/doc/clipboard.rb +1 -1
  18. data/lib/wx/doc/colour.rb +12 -0
  19. data/lib/wx/doc/const.rb +16 -0
  20. data/lib/wx/doc/cursor.rb +4 -0
  21. data/lib/wx/doc/dc_overlay.rb +34 -0
  22. data/lib/wx/doc/enum.rb +7 -1
  23. data/lib/wx/doc/event_blocker.rb +1 -1
  24. data/lib/wx/doc/evthandler.rb +25 -3
  25. data/lib/wx/doc/functions.rb +3 -6
  26. data/lib/wx/doc/gc_dc.rb +13 -4
  27. data/lib/wx/doc/geometry.rb +136 -0
  28. data/lib/wx/doc/graphics_context.rb +25 -7
  29. data/lib/wx/doc/icon.rb +4 -0
  30. data/lib/wx/doc/image.rb +56 -0
  31. data/lib/wx/doc/list_ctrl.rb +6 -6
  32. data/lib/wx/doc/memory_dc.rb +2 -11
  33. data/lib/wx/doc/mirror_dc.rb +1 -1
  34. data/lib/wx/doc/pen.rb +26 -0
  35. data/lib/wx/doc/persistence_manager.rb +1 -1
  36. data/lib/wx/doc/persistent_object.rb +1 -1
  37. data/lib/wx/doc/pg/property_grid_interface.rb +3 -3
  38. data/lib/wx/doc/prt/printer_dc.rb +2 -2
  39. data/lib/wx/doc/region_iterator.rb +1 -1
  40. data/lib/wx/doc/scaled_dc.rb +1 -1
  41. data/lib/wx/doc/screen_dc.rb +1 -1
  42. data/lib/wx/doc/svg_file_dc.rb +1 -1
  43. data/lib/wx/doc/textctrl.rb +1 -1
  44. data/lib/wx/doc/tree_ctrl.rb +2 -2
  45. data/lib/wx/doc/validator.rb +6 -6
  46. data/lib/wx/doc/variant.rb +2 -2
  47. data/lib/wx/doc/window.rb +5 -4
  48. data/lib/wx/grid/keyword_defs.rb +1 -1
  49. data/lib/wx/html/keyword_defs.rb +3 -3
  50. data/lib/wx/keyword_defs.rb +76 -71
  51. data/lib/wx/pg/keyword_defs.rb +2 -2
  52. data/lib/wx/pg/pg_property.rb +12 -0
  53. data/lib/wx/rbn/keyword_defs.rb +1 -1
  54. data/lib/wx/rtc/keyword_defs.rb +1 -1
  55. data/lib/wx/stc/keyword_defs.rb +1 -1
  56. data/lib/wx/version.rb +1 -1
  57. data/lib/wx/wxruby/cmd/setup.rb +3 -0
  58. data/rakelib/configure.rb +7 -0
  59. data/rakelib/gem.rake +2 -1
  60. data/rakelib/gem.rb +3 -2
  61. data/rakelib/lib/config/linux.rb +1 -1
  62. data/rakelib/lib/config/unixish.rb +6 -7
  63. data/rakelib/lib/config.rb +25 -4
  64. data/rakelib/lib/core/include/enum.inc +31 -1
  65. data/rakelib/lib/director/affine_matrix.rb +51 -0
  66. data/rakelib/lib/director/app.rb +29 -13
  67. data/rakelib/lib/director/art_provider.rb +4 -0
  68. data/rakelib/lib/director/cursor.rb +6 -2
  69. data/rakelib/lib/director/dc.rb +1 -6
  70. data/rakelib/lib/director/derived_dc.rb +88 -31
  71. data/rakelib/lib/director/dialog.rb +0 -8
  72. data/rakelib/lib/director/geometry.rb +142 -0
  73. data/rakelib/lib/director/graphics_context.rb +3 -2
  74. data/rakelib/lib/director/graphics_object.rb +18 -25
  75. data/rakelib/lib/director/image.rb +59 -0
  76. data/rakelib/lib/director/menu.rb +2 -3
  77. data/rakelib/lib/director/menu_bar.rb +0 -3
  78. data/rakelib/lib/director/pen.rb +1 -1
  79. data/rakelib/lib/director/richtext_ctrl.rb +1 -1
  80. data/rakelib/lib/director/system_settings.rb +1 -1
  81. data/rakelib/lib/director/window.rb +4 -3
  82. data/rakelib/lib/extractor/function.rb +1 -1
  83. data/rakelib/lib/generate/doc/animation_ctrl.yaml +10 -0
  84. data/rakelib/lib/generate/doc/banner_window.yaml +35 -0
  85. data/rakelib/lib/generate/doc/graphics_context.yaml +12 -0
  86. data/rakelib/lib/generate/doc/graphics_object.yaml +12 -0
  87. data/rakelib/lib/generate/doc/grid_ctrl.yaml +25 -0
  88. data/rakelib/lib/generate/doc/header_ctrl.yaml +91 -0
  89. data/rakelib/lib/generate/doc/icon.yaml +10 -0
  90. data/rakelib/lib/generate/doc/info_bar.yaml +27 -0
  91. data/rakelib/lib/generate/doc/log.yaml +1 -1
  92. data/rakelib/lib/generate/doc/media_ctrl.yaml +27 -0
  93. data/rakelib/lib/generate/doc/persistent_window.yaml +22 -0
  94. data/rakelib/lib/generate/doc/pg_editor.yaml +1 -1
  95. data/rakelib/lib/generate/doc/pg_property.yaml +4 -4
  96. data/rakelib/lib/generate/doc/rearrange_list.yaml +14 -0
  97. data/rakelib/lib/generate/doc/ribbon_panel.yaml +15 -0
  98. data/rakelib/lib/generate/doc/rich_text_formatting_dialog.yaml +26 -0
  99. data/rakelib/lib/generate/doc/text_ctrl.yaml +1 -1
  100. data/rakelib/lib/generate/doc/wizard.yaml +27 -0
  101. data/rakelib/lib/generate/doc.rb +4 -4
  102. data/rakelib/lib/generate/interface.rb +1 -1
  103. data/rakelib/lib/specs/interfaces.rb +3 -0
  104. data/rakelib/lib/swig_runner.rb +24 -3
  105. data/rakelib/lib/typemap/points_list.rb +8 -2
  106. data/rakelib/lib/typemap/richtext.rb +17 -0
  107. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +3 -3
  108. data/samples/dialogs/wizard.rb +20 -19
  109. data/samples/drawing/art/drawing/image.bmp +0 -0
  110. data/samples/drawing/art/drawing/mask.bmp +0 -0
  111. data/samples/drawing/art/drawing/pat35.bmp +0 -0
  112. data/samples/drawing/art/drawing/pat36.bmp +0 -0
  113. data/samples/drawing/art/drawing/pat4.bmp +0 -0
  114. data/samples/drawing/art/drawing/smile.xpm +42 -0
  115. data/samples/drawing/drawing.rb +2276 -0
  116. data/samples/drawing/tn_drawing.png +0 -0
  117. data/samples/html/html.rb +1 -1
  118. data/samples/propgrid/propgrid.rb +1 -1
  119. data/samples/propgrid/propgrid_minimal.rb +1 -1
  120. data/samples/propgrid/sample_props.rb +1 -1
  121. data/samples/sampler/editor.rb +13 -11
  122. data/samples/sampler.rb +14 -10
  123. data/samples/text/richtext.rb +53 -0
  124. data/samples/text/scintilla.rb +1 -1
  125. data/samples/text/unicode.rb +4 -4
  126. data/tests/test_ext_controls.rb +12 -5
  127. data/tests/test_std_controls.rb +12 -12
  128. metadata +30 -30
  129. data/lib/wx/doc/extra/00_starting.md +0 -154
  130. data/lib/wx/doc/extra/01_packages.md +0 -180
  131. data/lib/wx/doc/extra/02_lifecycles.md +0 -166
  132. data/lib/wx/doc/extra/03_dialogs.md +0 -57
  133. data/lib/wx/doc/extra/04_enums.md +0 -143
  134. data/lib/wx/doc/extra/05_event-handling.md +0 -191
  135. data/lib/wx/doc/extra/06_geometry.md +0 -62
  136. data/lib/wx/doc/extra/07_colour_and_font.md +0 -52
  137. data/lib/wx/doc/extra/08_extensions.md +0 -144
  138. data/lib/wx/doc/extra/09_exceptions.md +0 -54
  139. data/lib/wx/doc/extra/10_art.md +0 -111
  140. data/lib/wx/doc/extra/11_drawing_and_dc.md +0 -62
  141. data/lib/wx/doc/extra/12_client_data.md +0 -89
  142. data/lib/wx/doc/extra/13_validators.md +0 -139
  143. data/lib/wx/doc/extra/14_config.md +0 -101
  144. data/lib/wx/doc/extra/15_persistence.md +0 -148
  145. data/samples/sampler/back.xpm +0 -21
  146. data/samples/sampler/copy.xpm +0 -44
  147. data/samples/sampler/cut.xpm +0 -46
  148. data/samples/sampler/filesave.xpm +0 -42
  149. data/samples/sampler/find.xpm +0 -62
  150. data/samples/sampler/findrepl.xpm +0 -63
  151. data/samples/sampler/forward.xpm +0 -21
  152. data/samples/sampler/paste.xpm +0 -46
  153. data/samples/sampler/redo.xpm +0 -58
  154. data/samples/sampler/undo.xpm +0 -58
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c45580184f8f7ee466f9ec158bcb9f28702f6674ab42abc735f7235cc3482bd
4
- data.tar.gz: f22f78e25c135b2583bfd60a7712c1084b8be8b3550d695e1acf65eac19b2223
3
+ metadata.gz: 22f63fb730a7c17f84eac51d892cad2f35ef33211d88fafde508fe7c222712e6
4
+ data.tar.gz: 2cf9e0b4026e8c00b24873e77af5f4d5676e5af3181e6459104b5c6fef0675d1
5
5
  SHA512:
6
- metadata.gz: 401ff95651f766ac947eba8a1a58a77be718182a473549f49eeee5b361a019051da88f529aec58bfe88dd46b5104dbae64a96eba5fa14d6a3e446fcece35c6f0
7
- data.tar.gz: fe9f01627e61ddc1ff5c18936dbf71f1cf09fd7d6ce372b6cc25062051a3807b3e6a0fe59179753ce0a1f9577f856eefca58c0564d0860a6e607d14bba428606
6
+ metadata.gz: 48cce7a08e4f4bd15380178cab3ab38b53af6942d5054af617806d5b01bea0aabc26887ec26fc07a6bb6c2d9802ec512d59396a2361c88a12635ebf80b066d91
7
+ data.tar.gz: eba7856af27dcfe0e4eb50662bae9bb00af12f29258e0eb4b2d446c3351446651926e2e5c0eec017038fef2545671e8ac47faea0f75c1bb3efd54c751585ae08
data/INSTALL.md CHANGED
@@ -334,6 +334,21 @@ wxruby setup --with-wxwin
334
334
 
335
335
  This will force the setup procedure to build and install an embedded wxWidgets version for wxRuby3.
336
336
 
337
+ #### Force embedded wxWidgets head installation
338
+
339
+ To force the setup procedure to build and install an embedded wxWidgets head (master) version the setup procedure can
340
+ be started with the `--with-wxhead` option like this:
341
+
342
+ ```shell
343
+ wxruby setup --with-wxhead
344
+ ```
345
+
346
+ > **NOTE**<br>
347
+ > Although wxRuby3 endeavors to keep up to date with the wxWidgets master branch your mileage may vary depending on
348
+ > the development state of the wxWidgets master branch. You can check the latest results of the wxRuby3 CI master build
349
+ > workflows of the [wxRuby3 Github Actions](https://github.com/mcorino/wxRuby3/actions) to get a feel of the current
350
+ > integration state.
351
+
337
352
  #### Setup with user installed wxWidgets
338
353
 
339
354
  In case of a (custom) user installation of wxWidgets the `--wxwin` (and optionally `--wxxml`) option(s) can be used to
@@ -357,6 +372,13 @@ wxruby setup --wxwin=/my/custom/wxWidgets --wxxml=/my/alternate/wxWidgets/xml
357
372
  > responsible for making sure the wxRuby3 extension library can find the wxWidgets libraries at runtime (normally this
358
373
  > requires updating the standard shared library search path for the platform).
359
374
 
375
+ > **NOTE 2**<br>
376
+ > Please be aware that when building a user installation of wxWidgets on Windows this has to be done using the exact
377
+ > same compiler suite as used for building Ruby (and it's standard native extensions) itself.<br>
378
+ > Currently only RubyInstaller versions are supported which use the MingW64 compiler.
379
+ > Do **NOT** install a separate MSYS2/MingW64 release but rather use a RubyInstaller version with integrated DevKit
380
+ > installation (which includes MSYS2 and the right MingW64 compiler suite).
381
+
360
382
  #### Setup with customized tool paths
361
383
 
362
384
  If for whatever reason the required development tools `doxygen`, `swig` and/or `git` have been installed in a location
@@ -493,6 +515,6 @@ commands are executed using parallel task execution by default.
493
515
  When the build has finished without errors the regression tests can be run by calling `rake test`.
494
516
 
495
517
  After successfully building the wxRuby3 extension libraries (and possibly embedded wxWidgets libraries) a binary package
496
- can be created by call `rake binpkg`.
518
+ can be created by calling `rake binpkg`.
497
519
 
498
520
  For more details concerning the wxRuby3 development strategy and build options see [here](TODO).
data/README.md CHANGED
@@ -41,7 +41,8 @@ end
41
41
 
42
42
  Anyone who is familiar with wxWidgets should feel right at home since the API may be Ruby-fied, it is still easily
43
43
  recognizable (but being Ruby-fied allowing for elegant and compact coding). And for those that do not have previous
44
- experience, do not fear, wxRuby3 comes with detailed [documentation](https://mcorino.github.io/wxRuby3/file.00_starting.html) and lots of examples and tests.
44
+ experience, do not fear, wxRuby3 comes with an extensive [User Guide](https://github.com/mcorino/wxRuby3/wiki/User-Guide-%3A-Introduction)
45
+ and detailed [reference documentation](https://mcorino.github.io/wxRuby3) and lots of examples and tests.
45
46
 
46
47
  ```ruby
47
48
  require 'wx'
@@ -90,7 +91,9 @@ README and license files for details.
90
91
  See [here](CREDITS.md) for more details on and acknowledgement of the developers
91
92
  of these products.
92
93
 
93
- ## FAQ
94
+ ## (Some of the) Most Frequently Asked Questions
95
+
96
+ (see the extended [FAQ](https://github.com/mcorino/wxRuby3/wiki/Frequently-Asked-Questions) in the [Wiki](https://github.com/mcorino/wxRuby3/wiki) for more information)
94
97
 
95
98
  ### What platforms and operating systems are supported in wxRuby3?
96
99
 
@@ -158,10 +161,10 @@ Use GitHUb Issues.
158
161
 
159
162
  When asking a question, if something is not working as you expect,
160
163
  please provide a *minimal*, *runnable* sample of code that demonstrates
161
- the problem, and say what you expected to happen, and what actually
164
+ the problem, and describe clearly what you expected to happen and what actually
162
165
  happened. Please also provide basic details of your platform, Ruby,
163
166
  wxRuby and wxWidgets version, and make a reasonable effort to find answers
164
- in the archive and documentation before posting. People are mostly happy
167
+ in the archive, wiki and/or documentation before posting. People are mostly happy
165
168
  to help, but it's too much to expect them to guess what you're trying to
166
169
  do, or try and debug 1,000 lines of your application.
167
170
  Very important also; do not use offensive language and be **polite**.
@@ -177,13 +180,17 @@ some use a more modern coding style than others. Use the bundled `wxruby`
177
180
  CLI to access the samples (see the section **Bundled CLI** in
178
181
  the [INSTALL](INSTALL.md) document for more details).
179
182
 
183
+ An extensive [User Guide](https://github.com/mcorino/wxRuby3/wiki/User-Guide-%3A-Introduction)
184
+ is available at the [wxRuby3 Wiki](https://github.com/mcorino/wxRuby3/wiki) providing detailed
185
+ information about how to build desktop applications with wxRuby3.
186
+
180
187
  Complete (more or less) wxRuby API documentation should be part of any
181
188
  complete wxRuby3 build. This tends to focus on providing a reference
182
189
  of all available modules, classes and methods and how to use specific
183
190
  classes and methods, rather than on how to construct an application
184
191
  overall.
185
192
  This documentation (for the latest release) is also available online
186
- [here](https://mcorino.github.io/wxRuby3/file.00_starting.html).
193
+ [here](https://mcorino.github.io/wxRuby3).
187
194
 
188
195
  One of the advantages of wxRuby3 is the much larger ecosystem of
189
196
  wxWidgets and wxPython resources out there. There is a book for
@@ -199,18 +206,6 @@ example, if you wanted answers about the "Grid" class, try searching for
199
206
  "wxGrid" as this will turn up results relating to wxWidgets and wxPython
200
207
  which may be relevant.
201
208
 
202
- ### What wxWidgets features are supported by wxRuby3?
203
-
204
- wxRuby supports almost all of the wxWidgets 3.2+ GUI API, providing over
205
- 600 classes in total. wxWidgets classes that provide general and/or non-GUI
206
- programming support features, such as strings, networking, threading, database
207
- access and such are not and will never be ported, as it's assumed that
208
- in all these cases it's preferable to use pure Ruby features.
209
-
210
- If you know of a feature in wxWidgets that you would like to see
211
- supported in wxRuby3 you are free to ask but do not **EXPECT** unconditional
212
- agreement or immediate response.
213
-
214
209
  ### How does wxRuby3 relate to the wxRuby 2.0 (and even older 0.6.0) release?
215
210
 
216
211
  wxRuby 0.6.0 was the last in a series of releases developed using a
@@ -231,12 +226,3 @@ maintainable solution.
231
226
 
232
227
  Please double-check the instructions above and in the [INSTALL](INSTALL.md) document and search issue archives. If
233
228
  this doesn't help, please post your question using GitHub Issues.
234
-
235
- ### Is there another, more declarative way, for writing wxRuby3 desktop GUI applications?
236
-
237
- Yes. [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) enables software engineers to build GUI
238
- using wxruby3 following the Ruby way with the least amount of code possible. That is by offering a minimalistic
239
- declarative high-level DSL that maps visually to the way software engineers think about the GUI hierarchy in addition
240
- to adopting Rails' strategy of Convention over Configuration via smart defaults and automation of wxruby3 low-level
241
- details. You can check out the [Glimmer DSL for WX README "Coming From wxruby3" section](https://github.com/AndyObtiva/glimmer-dsl-wx#coming-from-wxruby3) for more information on
242
- how to translate wxruby3 apps to [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) syntax.
data/ext/mkrf_conf_ext.rb CHANGED
@@ -12,8 +12,8 @@ OPTIONS = {
12
12
  until ARGV.empty?
13
13
  switch = ARGV.shift
14
14
  case switch
15
- when /^prebuilt=(none|only)$/
16
- OPTIONS[:prebuilt] = $1 == 'only'
15
+ when /^prebuilt=(none|only|head)$/
16
+ OPTIONS[:prebuilt] = $1.to_sym
17
17
  when /^package=(.+)$/
18
18
  OPTIONS[:package] = $1
19
19
  when 'help'
@@ -41,14 +41,18 @@ until ARGV.empty?
41
41
  end
42
42
  end
43
43
 
44
- task_args = ''
44
+ task_args = []
45
45
  unless OPTIONS[:prebuilt].nil?
46
- task_args << "'#{(OPTIONS[:prebuilt] ? '--prebuilt' : '--no-prebuilt')}'"
46
+ case OPTIONS[:prebuilt]
47
+ when :only
48
+ task_args << "'--prebuilt'"
49
+ when :none
50
+ task_args << "'--no-prebuilt'"
51
+ end
47
52
  end
48
53
  if OPTIONS[:package]
49
- task_args << ', ' unless task_args.empty?
50
54
  pkg = RUBY_PLATFORM =~ /mingw/ ? OPTIONS[:package].gsub('\\', '/') : OPTIONS[:package] # make sure the path is URI compatible
51
- task_args << "'--package', " << "'#{pkg}'"
55
+ task_args << "'--package'" << "'#{pkg}'"
52
56
  end
53
57
 
54
58
  # generate new rakefile with appropriate default task (calls actual task in rakelib)
@@ -61,7 +65,7 @@ File.open('../Rakefile', 'w') do |f|
61
65
 
62
66
  unless File.file?(File.join('lib', 'wx', 'wxruby_core.so'))
63
67
  task :default do
64
- Rake::Task['wxruby:gem:install'].invoke(#{task_args})
68
+ Rake::Task['wxruby:gem:install'].invoke(#{task_args.join(', ')})
65
69
  end
66
70
  end
67
71
  EOF__
data/lib/wx/core/app.rb CHANGED
@@ -14,6 +14,22 @@ require_relative './ext'
14
14
  # Controller class which creates and manages all windows.
15
15
  class Wx::App
16
16
 
17
+ if Wx::PLATFORM == 'WXOSX'
18
+ class << self
19
+ # provide aliases for macosx specials
20
+ alias :mac_about_menu_itemid= :set_mac_about_menu_itemid
21
+ alias :mac_about_menu_itemid :get_mac_about_menu_itemid
22
+ alias :mac_preferences_menu_itemid= :set_mac_preferences_menu_itemid
23
+ alias :mac_preferences_menu_itemid :get_mac_preferences_menu_itemid
24
+ alias :mac_exit_menu_itemid= :set_mac_exit_menu_itemid
25
+ alias :mac_exit_menu_itemid :get_mac_exit_menu_itemid
26
+ alias :mac_help_menu_title= :set_mac_help_menu_title
27
+ alias :mac_help_menu_title :get_mac_help_menu_title
28
+ alias :mac_window_menu_title= :set_mac_window_menu_title
29
+ alias :mac_window_menu_title :get_mac_window_menu_title
30
+ end
31
+ end
32
+
17
33
  # convenience method to retrieve global Wx::App instance
18
34
  def self.the_app
19
35
  if Wx::const_defined?(:THE_APP) and Wx::THE_APP.is_running
@@ -6,37 +6,45 @@
6
6
  # Copyright 2004-2007, wxRuby development team
7
7
  # released under the MIT-like wxRuby2 license
8
8
 
9
- class Wx::Colour
10
- # Redefine the initialize method so it raises an exception if an
11
- # invalid colour value is given. This might be an unknown colour
12
- # string (eg 'dark blue') or out-of-bounds integer values (<0 or >255)
13
- wx_init = self.instance_method(:initialize)
14
- define_method(:initialize) do | *args |
15
- begin
16
- wx_init.bind(self).call(*args)
17
- # Invalid integer values raise SWIG 'no matching func'
18
- rescue ArgumentError, TypeError
19
- Kernel.raise ArgumentError, "Invalid colour values #{args.inspect}"
9
+ require_relative 'ext'
10
+
11
+ module Wx
12
+
13
+ Wx.add_delayed_constant(self, :TRANSPARENT_COLOUR, 'Wx::Colour.new(0, 0, 0, Wx::ALPHA_TRANSPARENT)') { Wx::Colour.new(0, 0, 0, Wx::ALPHA_TRANSPARENT) }
14
+
15
+ class Colour
16
+ # Redefine the initialize method so it raises an exception if an
17
+ # invalid colour value is given. This might be an unknown colour
18
+ # string (eg 'dark blue') or out-of-bounds integer values (<0 or >255)
19
+ wx_init = self.instance_method(:initialize)
20
+ define_method(:initialize) do | *args |
21
+ begin
22
+ wx_init.bind(self).call(*args)
23
+ # Invalid integer values raise SWIG 'no matching func'
24
+ rescue ArgumentError, TypeError
25
+ Kernel.raise ArgumentError, "Invalid colour values #{args.inspect}"
26
+ end
20
27
  end
21
- end
22
28
 
23
- # Missing Standard colour
24
- Wx::MAGENTA = new(255, 0, 255)
25
-
26
- # Colours are equal to one another if they have the same red, green
27
- # and blue intensity, and the same alpha
28
- def ==(other)
29
- case other
30
- when Wx::Colour
31
- [ self.red, self.green, self.blue, self.alpha ] ==
32
- [ other.red, other.green, other.blue, other.alpha ]
33
- else
34
- false
29
+ # Missing Standard colour
30
+ Wx::MAGENTA = new(255, 0, 255)
31
+
32
+ # Colours are equal to one another if they have the same red, green
33
+ # and blue intensity, and the same alpha
34
+ def ==(other)
35
+ case other
36
+ when Wx::Colour
37
+ [ self.red, self.green, self.blue, self.alpha ] ==
38
+ [ other.red, other.green, other.blue, other.alpha ]
39
+ else
40
+ false
41
+ end
35
42
  end
36
- end
37
43
 
38
- # More informative output for inspect etc
39
- def to_s
40
- "#<Wx::Colour: (#{red}, #{green}, #{blue} *#{alpha})>"
44
+ # More informative output for inspect etc
45
+ def to_s
46
+ "#<Wx::Colour: (#{red}, #{green}, #{blue} *#{alpha})>"
47
+ end
41
48
  end
49
+
42
50
  end
data/lib/wx/core/const.rb CHANGED
@@ -68,8 +68,14 @@ module Wx
68
68
  TREE_LIST_CTRL_NAME_STR = 'wxTreeListCtrl'
69
69
  HTML_LIST_BOX_NAME_STR = 'htmlListBox'
70
70
  SIMPLE_HTML_LIST_BOX_NAME_STR = 'simpleHtmlListBox'
71
+ HTML_WINDOW_NAME_STR = 'htmlWindow'
71
72
  EDITABLE_LIST_BOX_NAME_STR = 'editableListBox'
72
73
  V_LIST_BOX_NAME_STR = 'wxVListBox'
74
+ ACTIVITY_INDICATOR_NAME_STR = 'activityindicator'
75
+ TIME_PICKER_CTRL_NAME_STR = 'timectrl'
76
+ DATE_PICKER_CTRL_NAME_STR = 'datectrl'
77
+ CALENDAR_NAME_STR = 'CalendarCtrl'
78
+ SPIN_BUTTON_NAME_STR = 'wxSpinButton'
73
79
 
74
80
  if Wx::PLATFORM == 'WXMSW'
75
81
  # wxMSW only
@@ -80,4 +86,17 @@ module Wx
80
86
  PROPERTY_GRID_NAME_STR = 'wxPropertyGrid'
81
87
  STC_NAME_STR = 'stcwindow'
82
88
 
89
+ # custom wxRuby addition
90
+ MEDIA_CTRL_NAME_STR = 'mediaCtrl'
91
+ SPIN_CTRL_NAME_STR = 'wxSpinCtrl'
92
+ SPIN_CTRL_DOUBLE_NAME_STR = 'wxSpinCtrlDouble'
93
+ SPLITTER_WINDOW_NAME_STR = 'splitter'
94
+ CHOICEBOOK_NAME_STR = 'choicebook'
95
+ LISTBOOK_NAME_STR = 'listbook'
96
+ TOOLBOOK_NAME_STR = 'toolbook'
97
+ TREEBOOK_NAME_STR = 'treebook'
98
+ SASH_WINDOW_NAME_STR = 'sashWindow'
99
+ SASH_LAYOUT_WINDOW_NAME_STR = 'layoutWindow'
100
+ SCROLLED_NAME_STR = 'SCROLLED_WINDOW'
101
+
83
102
  end
data/lib/wx/core/enum.rb CHANGED
@@ -48,8 +48,24 @@ class Wx::Enum
48
48
  @value.hash
49
49
  end
50
50
 
51
+ def bitmask_to_s
52
+ return '' if to_i == 0
53
+ enums = []
54
+ mask = to_i
55
+ self.class.values.each_value do |enum|
56
+ if enum != 0 && mask.allbits?(enum)
57
+ enums << enum.to_s
58
+ mask &= ~enum
59
+ break if mask == 0
60
+ end
61
+ end
62
+ enums << mask.to_s if mask != 0
63
+ enums.join('|')
64
+ end
65
+ private :bitmask_to_s
66
+
51
67
  def to_s
52
- to_i.to_s
68
+ self.class.values.has_key?(to_i) ? "#{self.class.name}::#{self.class.names_by_value[self]}" : bitmask_to_s
53
69
  end
54
70
 
55
71
  end
@@ -0,0 +1,121 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ module Wx
6
+
7
+ def self.deg_to_rad(deg)
8
+ (deg * Math::PI) / 180.0
9
+ end
10
+
11
+ def self.rad_to_deg(rad)
12
+ (rad * 180.0) / Math::PI
13
+ end
14
+
15
+ class Point2DInt
16
+
17
+ alias :x :get_x
18
+ alias :x= :set_x
19
+ alias :y :get_y
20
+ alias :y= :set_y
21
+
22
+ # make wrappers private
23
+ private :add, :sub, :mul, :div
24
+
25
+ wx_assign = instance_method :assign
26
+ define_method :assign do |pt|
27
+ wx_assign.bind(self).call(pt)
28
+ self
29
+ end
30
+
31
+ def add!(pt)
32
+ add(pt)
33
+ self
34
+ end
35
+
36
+ def sub!(pt)
37
+ sub(pt)
38
+ self
39
+ end
40
+
41
+ def mul!(v)
42
+ mul(v)
43
+ self
44
+ end
45
+
46
+ def div!(v)
47
+ div(v)
48
+ self
49
+ end
50
+
51
+ def +(pt)
52
+ Point2DInt.new(self).add!(pt)
53
+ end
54
+
55
+ def -(pt)
56
+ Point2DInt.new(self).sub!(pt)
57
+ end
58
+
59
+ def *(v)
60
+ Point2DInt.new(self).mul!(v)
61
+ end
62
+
63
+ def /(v)
64
+ Point2DInt.new(self).div!(v)
65
+ end
66
+
67
+ end
68
+ class Point2DDouble
69
+
70
+ alias :x :get_x
71
+ alias :x= :set_x
72
+ alias :y :get_y
73
+ alias :y= :set_y
74
+
75
+ # make wrappers private
76
+ private :add, :sub, :mul, :div
77
+
78
+ wx_assign = instance_method :assign
79
+ define_method :assign do |pt|
80
+ wx_assign.bind(self).call(pt)
81
+ self
82
+ end
83
+
84
+ def add!(pt)
85
+ add(pt)
86
+ self
87
+ end
88
+
89
+ def sub!(pt)
90
+ sub(pt)
91
+ self
92
+ end
93
+
94
+ def mul!(v)
95
+ mul(v)
96
+ self
97
+ end
98
+
99
+ def div!(v)
100
+ div(v)
101
+ self
102
+ end
103
+
104
+ def +(pt)
105
+ Point2DDouble.new(self).add!(pt)
106
+ end
107
+
108
+ def -(pt)
109
+ Point2DDouble.new(self).sub!(pt)
110
+ end
111
+
112
+ def *(v)
113
+ Point2DDouble.new(self).mul!(v)
114
+ end
115
+
116
+ def /(v)
117
+ Point2DDouble.new(self).div!(v)
118
+ end
119
+
120
+ end
121
+ end
@@ -0,0 +1,18 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+ #
5
+ # Some parts are
6
+ # Copyright 2004-2007, wxRuby development team
7
+ # released under the MIT-like wxRuby2 license
8
+
9
+ class Wx::GraphicsPenInfo
10
+
11
+ # make Wx::GraphicsPenInfo#dashes return self
12
+ wx_dashes = instance_method :dashes
13
+ define_method :dashes do |*args|
14
+ wx_dashes.bind(self).call(*args)
15
+ self
16
+ end
17
+
18
+ end
data/lib/wx/core/image.rb CHANGED
@@ -108,6 +108,55 @@ module Wx
108
108
  hist_hash.extend Histogram
109
109
  hist_hash
110
110
  end
111
+
112
+ # import flattened nested classes
113
+ HSVValue = Wx::HSVValue
114
+ RGBValue = Wx::RGBValue
115
+
116
+ end
117
+
118
+ class HSVValue
119
+
120
+ # More informative output when converted to string
121
+ def to_s
122
+ "#<Wx::Image::HSVValue: (#{self.hue}, #{self.saturation}, #{self.value})>"
123
+ end
124
+
125
+ def inspect
126
+ to_s
127
+ end
128
+
129
+ # make HSVValue usable for parallel assignments like `x, y = pt`
130
+ def to_ary
131
+ [self.hue, self.saturation, self.value]
132
+ end
133
+
134
+ def to_rgb
135
+ Image::hsv_to_rgb(self)
136
+ end
137
+
138
+ end
139
+
140
+ class RGBValue
141
+
142
+ # More informative output when converted to string
143
+ def to_s
144
+ "#<Wx::Image::RGBValue: (#{self.red}, #{self.green}, #{self.blue})>"
145
+ end
146
+
147
+ def inspect
148
+ to_s
149
+ end
150
+
151
+ # make RGBValue usable for parallel assignments like `x, y = pt`
152
+ def to_ary
153
+ [self.red, self.green, self.blue]
154
+ end
155
+
156
+ def to_hsv
157
+ Image::rgb_to_hsv(self)
158
+ end
159
+
111
160
  end
112
161
 
113
162
  def self.Image(name, bmp_type = nil, *rest, art_path: nil, art_section: nil)
@@ -12,6 +12,17 @@ class Wx::MenuBar
12
12
 
13
13
  def initialize(*args, &block)
14
14
  wx_initialize(*args)
15
+ if Wx::PLATFORM == 'WXOSX'
16
+ # OSX's standard Apple/Application menu gets titled with the executables name by default
17
+ # which is 'ruby' for wxRuby and this title is near impossible to reliably change.
18
+ # Therefor we implemented (a little stunted) workaround here to deal with Apple's crap.
19
+ # We insert a disabled item at the start of this menu with the AppDisplayName and follow
20
+ # it up with a nice separator. This way at least we will always be able to see which wxRuby
21
+ # app the visible menu belongs to.
22
+ apple_menu = osx_get_apple_menu
23
+ apple_menu.insert(0, Wx::ID_NONE, Wx.get_app.get_app_display_name).enable(false)
24
+ apple_menu.insert_separator(1)
25
+ end
15
26
  if block
16
27
  if block.arity == -1 or block.arity == 0
17
28
  self.instance_eval(&block)
@@ -6,10 +6,16 @@
6
6
  # Copyright 2004-2007, wxRuby development team
7
7
  # released under the MIT-like wxRuby2 license
8
8
 
9
- class Wx::PaintDC
9
+ module Wx
10
+
11
+ class PaintDC
12
+
13
+ def self.draw_on(win, &block)
14
+ win.paint(&block) if block
15
+ end
10
16
 
11
- def self.draw_on(win, &block)
12
- win.paint(&block) if block
13
17
  end
14
18
 
19
+ AutoBufferedPaintDC = PaintDC.has_native_double_buffer ? Wx::PaintDC : Wx::BufferedPaintDC
20
+
15
21
  end