wxruby3 0.9.7 → 1.0.0

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 (184) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +183 -42
  3. data/README.md +40 -48
  4. data/ext/mkrf_conf_ext.rb +72 -0
  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/core/secret_store.rb +38 -0
  15. data/lib/wx/doc/app.rb +97 -41
  16. data/lib/wx/doc/bitmap.rb +4 -0
  17. data/lib/wx/doc/client_dc.rb +2 -2
  18. data/lib/wx/doc/clipboard.rb +1 -1
  19. data/lib/wx/doc/colour.rb +12 -0
  20. data/lib/wx/doc/const.rb +16 -0
  21. data/lib/wx/doc/cursor.rb +4 -0
  22. data/lib/wx/doc/dc_overlay.rb +34 -0
  23. data/lib/wx/doc/enum.rb +7 -1
  24. data/lib/wx/doc/event_blocker.rb +1 -1
  25. data/lib/wx/doc/evthandler.rb +25 -3
  26. data/lib/wx/doc/functions.rb +3 -6
  27. data/lib/wx/doc/gc_dc.rb +13 -4
  28. data/lib/wx/doc/geometry.rb +136 -0
  29. data/lib/wx/doc/graphics_context.rb +25 -7
  30. data/lib/wx/doc/icon.rb +4 -0
  31. data/lib/wx/doc/image.rb +56 -0
  32. data/lib/wx/doc/list_ctrl.rb +6 -6
  33. data/lib/wx/doc/memory_dc.rb +2 -11
  34. data/lib/wx/doc/mirror_dc.rb +1 -1
  35. data/lib/wx/doc/pen.rb +26 -0
  36. data/lib/wx/doc/persistence_manager.rb +1 -1
  37. data/lib/wx/doc/persistent_object.rb +1 -1
  38. data/lib/wx/doc/pg/property_grid_interface.rb +3 -3
  39. data/lib/wx/doc/prt/printer_dc.rb +2 -2
  40. data/lib/wx/doc/region_iterator.rb +1 -1
  41. data/lib/wx/doc/scaled_dc.rb +1 -1
  42. data/lib/wx/doc/screen_dc.rb +1 -1
  43. data/lib/wx/doc/secret_store.rb +55 -0
  44. data/lib/wx/doc/svg_file_dc.rb +1 -1
  45. data/lib/wx/doc/textctrl.rb +1 -1
  46. data/lib/wx/doc/tree_ctrl.rb +2 -2
  47. data/lib/wx/doc/validator.rb +6 -6
  48. data/lib/wx/doc/variant.rb +2 -2
  49. data/lib/wx/doc/window.rb +5 -4
  50. data/lib/wx/grid/keyword_defs.rb +1 -1
  51. data/lib/wx/html/keyword_defs.rb +3 -3
  52. data/lib/wx/keyword_defs.rb +76 -71
  53. data/lib/wx/pg/keyword_defs.rb +2 -2
  54. data/lib/wx/pg/pg_property.rb +12 -0
  55. data/lib/wx/rbn/keyword_defs.rb +1 -1
  56. data/lib/wx/rtc/keyword_defs.rb +1 -1
  57. data/lib/wx/stc/keyword_defs.rb +1 -1
  58. data/lib/wx/version.rb +1 -1
  59. data/lib/wx/wxruby/base.rb +3 -5
  60. data/lib/wx/wxruby/cmd/check.rb +182 -0
  61. data/lib/wx/wxruby/cmd/sampler.rb +1 -1
  62. data/lib/wx/wxruby/cmd/setup.rb +9 -3
  63. data/lib/wx/wxruby/cmd/test.rb +1 -1
  64. data/rakelib/configure.rb +67 -52
  65. data/rakelib/gem.rake +97 -66
  66. data/rakelib/gem.rb +294 -41
  67. data/rakelib/install.rb +3 -3
  68. data/rakelib/lib/config/{cygwin.rb → freebsd.rb} +1 -1
  69. data/rakelib/lib/config/linux.rb +4 -2
  70. data/rakelib/lib/config/macosx.rb +42 -11
  71. data/rakelib/lib/config/mingw.rb +2 -2
  72. data/rakelib/lib/config/pkgman/{base.rb → linux.rb} +36 -61
  73. data/rakelib/lib/config/pkgman/macosx.rb +17 -78
  74. data/rakelib/lib/config/unixish.rb +17 -8
  75. data/rakelib/lib/config/{netbsd.rb → unknown.rb} +3 -2
  76. data/rakelib/lib/config.rb +74 -33
  77. data/rakelib/lib/core/include/enum.inc +31 -1
  78. data/rakelib/lib/director/affine_matrix.rb +51 -0
  79. data/rakelib/lib/director/app.rb +29 -13
  80. data/rakelib/lib/director/art_provider.rb +4 -0
  81. data/rakelib/lib/director/aui_manager.rb +1 -1
  82. data/rakelib/lib/director/cursor.rb +6 -2
  83. data/rakelib/lib/director/dc.rb +1 -6
  84. data/rakelib/lib/director/derived_dc.rb +88 -31
  85. data/rakelib/lib/director/geometry.rb +142 -0
  86. data/rakelib/lib/director/graphics_context.rb +3 -2
  87. data/rakelib/lib/director/graphics_object.rb +18 -25
  88. data/rakelib/lib/director/grid_ctrl.rb +2 -2
  89. data/rakelib/lib/director/image.rb +59 -0
  90. data/rakelib/lib/director/menu.rb +2 -3
  91. data/rakelib/lib/director/menu_bar.rb +0 -3
  92. data/rakelib/lib/director/pen.rb +1 -1
  93. data/rakelib/lib/director/richtext_composite_object.rb +2 -4
  94. data/rakelib/lib/director/richtext_ctrl.rb +1 -1
  95. data/rakelib/lib/director/secret_store.rb +117 -0
  96. data/rakelib/lib/director/system_settings.rb +1 -1
  97. data/rakelib/lib/director/tree_event.rb +2 -2
  98. data/rakelib/lib/director/window.rb +4 -3
  99. data/rakelib/lib/extractor/function.rb +1 -1
  100. data/rakelib/lib/generate/doc/animation_ctrl.yaml +10 -0
  101. data/rakelib/lib/generate/doc/banner_window.yaml +35 -0
  102. data/rakelib/lib/generate/doc/graphics_context.yaml +12 -0
  103. data/rakelib/lib/generate/doc/graphics_object.yaml +12 -0
  104. data/rakelib/lib/generate/doc/grid_ctrl.yaml +25 -0
  105. data/rakelib/lib/generate/doc/header_ctrl.yaml +91 -0
  106. data/rakelib/lib/generate/doc/icon.yaml +10 -0
  107. data/rakelib/lib/generate/doc/info_bar.yaml +27 -0
  108. data/rakelib/lib/generate/doc/log.yaml +1 -1
  109. data/rakelib/lib/generate/doc/media_ctrl.yaml +27 -0
  110. data/rakelib/lib/generate/doc/persistent_window.yaml +22 -0
  111. data/rakelib/lib/generate/doc/pg_editor.yaml +1 -1
  112. data/rakelib/lib/generate/doc/pg_property.yaml +4 -4
  113. data/rakelib/lib/generate/doc/rearrange_list.yaml +14 -0
  114. data/rakelib/lib/generate/doc/ribbon_panel.yaml +15 -0
  115. data/rakelib/lib/generate/doc/rich_text_formatting_dialog.yaml +26 -0
  116. data/rakelib/lib/generate/doc/secret_store.yaml +55 -0
  117. data/rakelib/lib/generate/doc/text_ctrl.yaml +1 -1
  118. data/rakelib/lib/generate/doc/wizard.yaml +27 -0
  119. data/rakelib/lib/generate/doc.rb +5 -5
  120. data/rakelib/lib/generate/interface.rb +1 -1
  121. data/rakelib/lib/specs/interfaces.rb +4 -0
  122. data/rakelib/lib/swig_runner.rb +24 -3
  123. data/rakelib/lib/typemap/common.rb +10 -0
  124. data/rakelib/lib/typemap/points_list.rb +8 -2
  125. data/rakelib/lib/typemap/richtext.rb +17 -0
  126. data/rakelib/prepost.rake +8 -1
  127. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +4 -0
  128. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +3 -3
  129. data/samples/dialogs/wizard.rb +20 -19
  130. data/samples/drawing/art/drawing/image.bmp +0 -0
  131. data/samples/drawing/art/drawing/mask.bmp +0 -0
  132. data/samples/drawing/art/drawing/pat35.bmp +0 -0
  133. data/samples/drawing/art/drawing/pat36.bmp +0 -0
  134. data/samples/drawing/art/drawing/pat4.bmp +0 -0
  135. data/samples/drawing/art/drawing/smile.xpm +42 -0
  136. data/samples/drawing/drawing.rb +2276 -0
  137. data/samples/drawing/tn_drawing.png +0 -0
  138. data/samples/html/html.rb +1 -1
  139. data/samples/propgrid/propgrid.rb +1 -1
  140. data/samples/propgrid/propgrid_minimal.rb +1 -1
  141. data/samples/propgrid/sample_props.rb +1 -1
  142. data/samples/sampler/editor.rb +13 -11
  143. data/samples/sampler/sample.rb +2 -0
  144. data/samples/sampler.rb +14 -10
  145. data/samples/text/richtext.rb +53 -0
  146. data/samples/text/scintilla.rb +1 -1
  147. data/samples/text/unicode.rb +4 -4
  148. data/tests/lib/wxapp_runner.rb +1 -1
  149. data/tests/test_config.rb +7 -4
  150. data/tests/test_ext_controls.rb +12 -5
  151. data/tests/test_secret_store.rb +83 -0
  152. data/tests/test_std_controls.rb +12 -12
  153. metadata +66 -47
  154. data/lib/wx/doc/extra/00_starting.md +0 -154
  155. data/lib/wx/doc/extra/01_packages.md +0 -180
  156. data/lib/wx/doc/extra/02_lifecycles.md +0 -166
  157. data/lib/wx/doc/extra/03_dialogs.md +0 -57
  158. data/lib/wx/doc/extra/04_enums.md +0 -143
  159. data/lib/wx/doc/extra/05_event-handling.md +0 -191
  160. data/lib/wx/doc/extra/06_geometry.md +0 -62
  161. data/lib/wx/doc/extra/07_colour_and_font.md +0 -52
  162. data/lib/wx/doc/extra/08_extensions.md +0 -144
  163. data/lib/wx/doc/extra/09_exceptions.md +0 -54
  164. data/lib/wx/doc/extra/10_art.md +0 -111
  165. data/lib/wx/doc/extra/11_drawing_and_dc.md +0 -62
  166. data/lib/wx/doc/extra/12_client_data.md +0 -89
  167. data/lib/wx/doc/extra/13_validators.md +0 -139
  168. data/lib/wx/doc/extra/14_config.md +0 -101
  169. data/lib/wx/doc/extra/15_persistence.md +0 -148
  170. data/rakefile +0 -14
  171. data/rakelib/lib/config/pkgman/arch.rb +0 -53
  172. data/rakelib/lib/config/pkgman/debian.rb +0 -66
  173. data/rakelib/lib/config/pkgman/rhel.rb +0 -54
  174. data/rakelib/lib/config/pkgman/suse.rb +0 -54
  175. data/samples/sampler/back.xpm +0 -21
  176. data/samples/sampler/copy.xpm +0 -44
  177. data/samples/sampler/cut.xpm +0 -46
  178. data/samples/sampler/filesave.xpm +0 -42
  179. data/samples/sampler/find.xpm +0 -62
  180. data/samples/sampler/findrepl.xpm +0 -63
  181. data/samples/sampler/forward.xpm +0 -21
  182. data/samples/sampler/paste.xpm +0 -46
  183. data/samples/sampler/redo.xpm +0 -58
  184. data/samples/sampler/undo.xpm +0 -58
@@ -18,7 +18,7 @@ module WXRuby3
18
18
 
19
19
  def install(pkgs)
20
20
  # do we need to install anything?
21
- if !pkgs.empty?
21
+ unless pkgs.empty?
22
22
  # can we install XCode commandline tools?
23
23
  unless no_autoinstall? || !pkgs.include?('xcode') || has_sudo? || is_root?
24
24
  STDERR.puts 'ERROR: Cannot check for or install required packages. Please install sudo or run as root and try again.'
@@ -50,18 +50,20 @@ module WXRuby3
50
50
 
51
51
  private
52
52
 
53
+ def pkgman
54
+ @pkgman ||= WXRuby3.config.sysinfo.os.pkgman
55
+ end
56
+
53
57
  def do_install(pkgs)
54
58
  rc = true
55
59
  # first see if we need to install XCode commandline tools
56
60
  if pkgs.include?('xcode')
57
61
  pkgs.delete('xcode')
58
- rc = run('xcode-select --install')
62
+ rc = auth_run('xcode-select --install')
59
63
  end
60
- # now check if we need any other packages (which need Homebrew or MacPorts)
64
+ # now check if we need any other packages
61
65
  if rc && !pkgs.empty?
62
- # Has Ruby been installed through MacPorts?
63
- if has_macports? &&
64
- (ruby_info = expand('port -q installed installed').strip.split("\n").find { |ln| ln.strip =~ /\Aruby\d+\s/ })
66
+ if pkgman.macports?
65
67
 
66
68
  # this is really crap; with MacPorts we need to install swig-ruby instead of simply swig
67
69
  # which for whatever nonsensical reason will pull in another (older) Ruby version (probably 2.3 or such)
@@ -70,59 +72,15 @@ module WXRuby3
70
72
  pkgs.delete('swig')
71
73
  pkgs << 'swig-ruby'
72
74
  end
73
- # in case MacPorts was installed with root privileges this install would also have to be run
74
- # with root privileges (otherwise it would fail early on with access problems) so we can
75
- # just run without sudo as we either have root privileges for root-installed MacPorts or
76
- # we're running without root privileges for user-installed MacPorts
77
- pkgs.each { |pkg| rc &&= sh("port install #{pkg}") }
78
-
79
- # or are we running without root privileges and have Homebrew installed?
80
- # (Ruby may be installed using Homebrew itself or using a Ruby version manager like RVM)
81
- elsif !is_root? && has_homebrew?
82
75
 
83
- pkgs.each { |pkg| rc &&= sh("brew install #{pkg}") }
84
-
85
- # or do we have MacPorts (running either privileged or not) and
86
- # a Ruby installed using a Ruby version manager.
87
- elsif has_macports?
88
-
89
- # same crap as above
90
- if pkgs.include?('swig')
91
- pkgs.delete('swig')
92
- pkgs << 'swig-ruby'
93
- end
94
- # in case MacPorts was installed with root privileges this install would also have to be run
95
- # with root privileges (otherwise it would fail early on with access problems) so we can
96
- # just run without sudo as we either have root privileges for root-installed MacPorts or
97
- # we're running without root privileges for user-installed MacPorts
98
- pkgs.each { |pkg| rc &&= sh("port install #{pkg}") }
99
-
100
- else
101
- if has_homebrew? || is_root?
102
- $stderr.puts <<~__ERROR_TXT
103
- ERROR: Unsupported Ruby installation. wxRuby3 can only be installed for Ruby with root privileges
104
- in case Ruby was installed with MacPorts. Homebrew should not be run with root privileges.
105
-
106
- Re-install a supported Ruby setup and try again.
107
- __ERROR_TXT
108
- else
109
- $stderr.puts <<~__ERROR_TXT
110
- ERROR: Unsupported Ruby installation. wxRuby3 requires either a MacPorts installed Ruby version
111
- or a non-privileged Ruby installation and have Homebrew installed.
112
-
113
- Install either Homebrew or MacPorts and try again.
114
- __ERROR_TXT
115
- end
116
- exit(1)
117
76
  end
77
+
78
+ # actually install packages
79
+ pkgs.each { |pkg| rc &&= run(pkgman.make_install_command(pkg)); break unless rc }
118
80
  end
119
81
  rc
120
82
  end
121
83
 
122
- def builds_wxwidgets?
123
- Config.get_config('with-wxwin') && Config.get_cfg_string('wxwin').empty?
124
- end
125
-
126
84
  def no_autoinstall?
127
85
  Config.get_config('autoinstall') == false
128
86
  end
@@ -132,46 +90,27 @@ module WXRuby3
132
90
  end
133
91
 
134
92
  def has_sudo?
135
- system('command -v sudo > /dev/null')
93
+ WXRuby3.config.sysinfo.os.has_sudo?
136
94
  end
137
95
 
138
96
  def is_root?
139
- if @is_root.nil?
140
- @is_root = (`id -u 2>/dev/null`.chomp == '0')
141
- end
142
- @is_root
143
- end
144
-
145
- def has_macports?
146
- if @has_macports.nil?
147
- @has_macports = system('command -v port>/dev/null')
148
- end
97
+ WXRuby3.config.sysinfo.os.is_root?
149
98
  end
150
99
 
151
- def has_homebrew?
152
- if @has_homebrew.nil?
153
- @has_homebrew = system('command -v brew>/dev/null')
154
- end
155
- end
156
-
157
- def run(cmd)
100
+ def auth_run(cmd)
158
101
  $stdout.print "Running #{cmd}..."
159
102
  rc = WXRuby3.config.sh("#{is_root? ? '' : 'sudo '}#{cmd}")
160
- $stderr.puts (rc ? 'done!' : 'FAILED!')
103
+ $stderr.puts(rc ? 'done!' : 'FAILED!')
161
104
  rc
162
105
  end
163
106
 
164
- def sh(*cmd, title: nil)
107
+ def run(*cmd, title: nil)
165
108
  $stdout.print(title ? title : "Running #{cmd}...")
166
109
  rc = WXRuby3.config.sh(*cmd)
167
- $stderr.puts (rc ? 'done!' : 'FAILED!')
110
+ $stderr.puts(rc ? 'done!' : 'FAILED!')
168
111
  rc
169
112
  end
170
113
 
171
- def expand(cmd)
172
- WXRuby3.config.expand(cmd)
173
- end
174
-
175
114
  end
176
115
 
177
116
  end
@@ -66,6 +66,12 @@ module WXRuby3
66
66
  def get_rpath_origin
67
67
  "$ORIGIN"
68
68
  end
69
+ protected :get_rpath_origin
70
+
71
+ # add deployment lookup paths for wxruby shared libraries
72
+ def update_shlib_loadpaths(shlib)
73
+ WXRuby3.config.patch_rpath(shlib, WXRuby3.config.get_rpath_origin, "#{WXRuby3.config.get_rpath_origin}/../ext")
74
+ end
69
75
 
70
76
  def expand(cmd)
71
77
  STDERR.puts "> sh: #{cmd}" if verbose?
@@ -74,6 +80,10 @@ module WXRuby3
74
80
  s
75
81
  end
76
82
 
83
+ def download_file(url, dest)
84
+ sh("curl -L #{url} --output #{dest}")
85
+ end
86
+
77
87
  private
78
88
 
79
89
  def wx_checkout
@@ -82,11 +92,10 @@ module WXRuby3
82
92
  chdir(ext_path) do
83
93
  if (rc = sh("#{get_cfg_string('git')} clone https://github.com/wxWidgets/wxWidgets.git"))
84
94
  chdir('wxWidgets') do
85
- tag = if @wx_version
86
- "v#{@wx_version}"
87
- else
88
- expand("#{get_cfg_string('git')} tag").split("\n").select { |t| (/\Av3\.(\d+)/ =~ t) && $1.to_i >= 2 }.max
89
- end
95
+ tag = wx_gitref ||
96
+ expand("#{get_cfg_string('git')} tag").split("\n").select do |t|
97
+ (/\Av(\d+)\.(\d+)\.\d+\Z/ =~ t) && (($1.to_i == 3 && $2.to_i >= 2) || $1.to_i > 3)
98
+ end.max
90
99
  # checkout the version we are building against
91
100
  rc = sh("#{get_cfg_string('git')} checkout #{tag}")
92
101
  end
@@ -101,7 +110,7 @@ module WXRuby3
101
110
  end
102
111
 
103
112
  def wx_configure
104
- bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --disable-debug_info')
113
+ bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --without-regex --disable-debug_info')
105
114
  end
106
115
 
107
116
  def wx_make
@@ -210,8 +219,8 @@ module WXRuby3
210
219
  # add ruby defined shared ruby lib(s); not any other flags
211
220
  @ruby_libs.concat RB_CONFIG['LIBRUBYARG_SHARED'].split(' ').select { |s| s.start_with?('-l')}
212
221
 
213
- # maintain minimum compatibility with ABI 3.0.0
214
- @wx_abi_version = [ @wx_version, "3.0.0" ].min
222
+ # maintain minimum compatibility with ABI 3.0.1
223
+ @wx_abi_version = [ @wx_version, "3.0.1" ].min
215
224
  @wx_cppflags << "-DwxABI_VERSION=%s" % @wx_abi_version.tr(".", "0")
216
225
  end
217
226
  end
@@ -3,7 +3,8 @@
3
3
  # This software is released under the MIT license.
4
4
 
5
5
  ###
6
- # wxRuby3 buildtools configuration
6
+ # wxRuby3 buildtools configuration fallback
7
7
  ###
8
8
 
9
- raise "NETBSD platform is unsupported as yet."
9
+ $stderr.puts 'ERROR: Unsupported Ruby platform!'
10
+ exit(1)
@@ -11,6 +11,7 @@ require 'fileutils'
11
11
  require 'json'
12
12
  require 'open3'
13
13
  require 'monitor'
14
+ require 'plat4m'
14
15
 
15
16
  module FileUtils
16
17
  # add convenience methods
@@ -67,7 +68,8 @@ module WXRuby3
67
68
  'sodir' => '$siterubyverarch',
68
69
  }
69
70
 
70
- CFG_KEYS.concat(%w{wxwin wxxml wxwininstdir with-wxwin with-debug swig doxygen})
71
+ CFG_KEYS.concat(%w{wxwin wxxml wxwininstdir with-wxwin with-debug swig doxygen git})
72
+ WXW_SYS_KEY = 'with-system-wxwin'
71
73
  CONFIG.merge!({
72
74
  'wxwin' => ENV['WXWIN'] || '',
73
75
  'wxxml' => ENV['WXXML'] || '',
@@ -280,7 +282,7 @@ module WXRuby3
280
282
  end
281
283
  begin
282
284
  # setup ENV for child execution
283
- ENV.merge!(Config.instance.exec_env)
285
+ ENV.update(Config.instance.exec_env)
284
286
  output = `#{cmd.join(' ')}`
285
287
  ensure
286
288
  # restore ENV
@@ -311,7 +313,7 @@ module WXRuby3
311
313
  private :make_ruby_cmd
312
314
 
313
315
  def execute(*cmd)
314
- do_run(*cmd.flatten)
316
+ sh(exec_env.merge({'RUBYLIB'=>rb_lib_path}), cmd.flatten.join(' '), fail_on_error: true)
315
317
  end
316
318
 
317
319
  def run(*cmd, capture: nil, verbose: true)
@@ -350,7 +352,7 @@ module WXRuby3
350
352
 
351
353
  def test(*tests, **options)
352
354
  errors = 0
353
- excludes = (ENV['WXRUBY_TEST_EXCLUDE'] || '').split(';')
355
+ excludes = (ENV['WXRUBY_TEST_EXCLUDE'] || '').split(':')
354
356
  tests = Dir.glob(File.join(Config.instance.test_dir, '*.rb')) if tests.empty?
355
357
  tests.each do |test|
356
358
  unless excludes.include?(File.basename(test, '.*'))
@@ -381,6 +383,10 @@ module WXRuby3
381
383
  []
382
384
  end
383
385
 
386
+ def download_file(_url, _dest)
387
+ raise NoMethodError
388
+ end
389
+
384
390
  def install_prerequisites
385
391
  pkg_deps = check_tool_pkgs
386
392
  if get_config('autoinstall') == false
@@ -443,16 +449,22 @@ module WXRuby3
443
449
  def get_rpath_origin
444
450
  ''
445
451
  end
452
+ protected :get_rpath_origin
446
453
 
447
- def check_rpath_patch
454
+ def patch_rpath(_shlib, *)
448
455
  true
449
456
  end
457
+ protected :patch_rpath
450
458
 
451
- def patch_rpath(_shlib, *)
459
+ def update_shlib_loadpaths(_shlib)
452
460
  true
453
461
  end
454
462
 
455
- def update_shlib_loadpaths(_shlib, _deplibs)
463
+ def update_shlib_ruby_libpath(_shlib)
464
+ true
465
+ end
466
+
467
+ def update_shlib_wxwin_libpaths(_shlib, _deplibs)
456
468
  true
457
469
  end
458
470
 
@@ -494,15 +506,23 @@ module WXRuby3
494
506
  end
495
507
 
496
508
  def save
509
+ cfg = WXRuby3::CONFIG.dup
510
+ wxw_system = !!cfg.delete(WXW_SYS_KEY)
511
+ cfg['wxwin'] = '@system' if wxw_system
497
512
  File.open(build_cfg, 'w') do |f|
498
- f << JSON.pretty_generate(WXRuby3::CONFIG)
513
+ f << JSON.pretty_generate(cfg)
499
514
  end
500
515
  end
501
516
 
502
517
  def load
503
518
  if File.file?(build_cfg)
504
519
  File.open(build_cfg, 'r') do |f|
505
- WXRuby3::CONFIG.merge!(JSON.load(f.read))
520
+ cfg = JSON.load(f.read)
521
+ if cfg['wxwin'] == '@system'
522
+ cfg[WXW_SYS_KEY] = true
523
+ cfg.delete('wxwin')
524
+ end
525
+ WXRuby3::CONFIG.merge!(cfg)
506
526
  end
507
527
  end
508
528
  end
@@ -515,10 +535,8 @@ module WXRuby3
515
535
  case RUBY_PLATFORM
516
536
  when /mingw/
517
537
  :mingw
518
- when /cygwin/
519
- :cygwin
520
- when /netbsd/
521
- :netbsd
538
+ when /freebsd/
539
+ :freebsd
522
540
  when /darwin/
523
541
  :macosx
524
542
  when /linux/
@@ -538,15 +556,26 @@ module WXRuby3
538
556
  def initialize
539
557
  @ruby_exe = RB_CONFIG["ruby_install_name"]
540
558
 
541
- @extmk = /extmk\.rb/ =~ $0
542
- @platform = Config.platform
543
- require File.join(File.dirname(__FILE__), 'config', @platform.to_s)
559
+ @sysinfo = Plat4m.current rescue nil
560
+ @platform = if @sysinfo
561
+ case @sysinfo.os.id
562
+ when :darwin
563
+ :macosx
564
+ when :windows
565
+ RUBY_PLATFORM =~ /mingw/ ? :mingw : :unknown
566
+ else
567
+ @sysinfo.os.id
568
+ end
569
+ else
570
+ :unknown
571
+ end
572
+ require_relative File.join('config', @platform.to_s)
544
573
  self.class.include(WXRuby3::Config::Platform)
545
574
 
546
575
  init # initialize settings
547
576
  end
548
577
 
549
- attr_reader :ruby_exe, :extmk, :platform, :helper_modules, :helper_inits, :include_modules, :verbosity
578
+ attr_reader :ruby_exe, :sysinfo, :platform, :helper_modules, :helper_inits, :include_modules, :verbosity
550
579
  attr_reader :release_build, :debug_build, :verbose_debug, :no_deprecate
551
580
  attr_reader :ruby_cppflags, :ruby_ldflags, :ruby_libs, :extra_cflags, :extra_cppflags, :extra_ldflags,
552
581
  :extra_libs, :cpp_out_flag, :link_output_flag, :obj_ext, :dll_ext,
@@ -593,11 +622,6 @@ module WXRuby3
593
622
 
594
623
  # Extra swig helper files to be built
595
624
  @helper_modules = %w|RubyStockObjects|
596
- # if macosx?
597
- # %w|RubyStockObjects Mac|
598
- # else
599
- # %w|RubyStockObjects|
600
- # end
601
625
  # helper to initialize on startup (stock objects can only be initialized after App creation)
602
626
  @helper_inits = @helper_modules - %w|RubyStockObjects|
603
627
 
@@ -640,7 +664,7 @@ module WXRuby3
640
664
  @obj_ext = RB_CONFIG["OBJEXT"]
641
665
  @dll_ext = RB_CONFIG['DLEXT']
642
666
 
643
- # Exclude certian classes from being built, even if they are present
667
+ # Exclude certain classes from being built, even if they are present
644
668
  # in the configuration of wxWidgets.
645
669
  if ENV['WXRUBY_EXCLUDED']
646
670
  ENV['WXRUBY_EXCLUDED'].split(",").each { |classname| exclude_module(classname) }
@@ -696,6 +720,10 @@ module WXRuby3
696
720
  get_config('with-wxwin')
697
721
  end
698
722
 
723
+ def with_wxhead?
724
+ get_config('with-wxhead')
725
+ end
726
+
699
727
  def wx_version
700
728
  @wx_version || ''
701
729
  end
@@ -704,16 +732,12 @@ module WXRuby3
704
732
  @wx_abi_version || ''
705
733
  end
706
734
 
707
- def cygwin?
708
- @platform == :cygwin
709
- end
710
-
711
735
  def mingw?
712
736
  @platform == :mingw
713
737
  end
714
738
 
715
- def netbsd?
716
- @platform == :netbsd
739
+ def freebsd?
740
+ @platform == :freebsd
717
741
  end
718
742
 
719
743
  def macosx?
@@ -725,7 +749,7 @@ module WXRuby3
725
749
  end
726
750
 
727
751
  def windows?
728
- mingw? || cygwin?
752
+ mingw?
729
753
  end
730
754
 
731
755
  def ldflags(_target)
@@ -740,6 +764,17 @@ module WXRuby3
740
764
  [ rake_deps_path, src_path, src_gen_path, obj_path, classes_path, common_path, interface_path ]
741
765
  end
742
766
 
767
+ def wx_gitref
768
+ if @wx_version
769
+ "v#{@wx_version}"
770
+ elsif get_config('with-wxhead')
771
+ 'master'
772
+ else
773
+ nil
774
+ end
775
+ end
776
+ private :wx_gitref
777
+
743
778
  def do_bootstrap
744
779
  install_prerequisites
745
780
  # do we have a local wxWidgets tree already?
@@ -812,9 +847,15 @@ module WXRuby3
812
847
  features = {}
813
848
 
814
849
  if is_configured? && wxwidgets_setup_h
815
- File.read(wxwidgets_setup_h).scan(/^\s*#define\s+(wx\w+|__\w+__)\s+([01])/) do | define |
816
- feat_val = $2.to_i.zero? ? false : true
817
- feat_id = $1.sub(/\Awx/i, '').gsub(/\A__|__\Z/, '')
850
+ File.read(wxwidgets_setup_h).scan(/^\s*#define\s+(wx\w+|__\w+__)\s+([01]|wx\w+)/) do | define |
851
+ val_str = $2
852
+ feat_str = $1
853
+ if val_str.start_with?('wx')
854
+ feat_val = !!features[val_str.sub(/\Awx/i, '')]
855
+ else
856
+ feat_val = val_str.to_i.zero? ? false : true
857
+ end
858
+ feat_id = feat_str.sub(/\Awx/i, '').gsub(/\A__|__\Z/, '')
818
859
  features[feat_id] = feat_val
819
860
  end
820
861
  # make sure correct platform defines are included as well which will not be the case always
@@ -177,6 +177,7 @@ static VALUE wx_Enum_sc_create_enum_class(int argc, VALUE *argv, VALUE self)
177
177
  ID id_to_i = rb_intern("to_i");
178
178
  ID id_const_set = rb_intern("const_set");
179
179
  VALUE enum_klass = rb_funcall(rb_cClass, id_new, 1, cWxEnum, 0);
180
+ VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
180
181
  VALUE enum_values = rb_funcall(argv[1], rb_intern("keys"), 0, 0);
181
182
  for (int i=0; i<RARRAY_LEN(enum_values) ;++i)
182
183
  {
@@ -184,6 +185,8 @@ static VALUE wx_Enum_sc_create_enum_class(int argc, VALUE *argv, VALUE self)
184
185
  VALUE enum_value_num = rb_funcall(rb_hash_aref(argv[1], enum_value_name), id_to_i, 0, 0);
185
186
  VALUE enum_value = rb_funcall(enum_klass, id_new, 1, enum_value_num, 0);
186
187
  rb_funcall(enum_klass, id_const_set, 2, enum_value_name, enum_value, 0);
188
+ rb_hash_aset(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values), enum_value_num, enum_value);
189
+ rb_hash_aset(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_to_symbol(enum_value_name), enum_value);
187
190
  }
188
191
  rb_hash_aset(rb_iv_get(cEnum_Singleton, __iv_Enum_sc_enums), enum_name, enum_klass);
189
192
  return enum_klass;
@@ -230,10 +233,31 @@ static VALUE wx_Enum_sc_get_enum_value(int argc, VALUE *argv, VALUE self)
230
233
  return rb_hash_aref(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_to_symbol(argv[0]));
231
234
  }
232
235
 
236
+ static VALUE wx_Enum_sc_get_enum_values(VALUE self)
237
+ {
238
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
239
+ return rb_iv_get(enum_singleton_klass, __iv_enum_klass_values);
240
+ }
241
+
242
+ static VALUE wx_Enum_sc_get_enum_values_by_name(VALUE self)
243
+ {
244
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
245
+ return rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name);
246
+ }
247
+
248
+ static VALUE wx_Enum_sc_get_enum_names_by_value(VALUE self)
249
+ {
250
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
251
+ return rb_funcall(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_intern("invert"), 0);
252
+ }
253
+
233
254
  WXRB_EXPORT_FLAG VALUE wxRuby_CreateEnumClass(const char* enum_class_name_cstr)
234
255
  {
235
256
  VALUE enum_klass = rb_funcall(rb_cClass, rb_intern("new"), 1, cWxEnum, 0);
236
257
  rb_define_singleton_method(enum_klass, "[]", VALUEFUNC(wx_Enum_sc_get_enum_value), -1);
258
+ rb_define_singleton_method(enum_klass, "values", VALUEFUNC(wx_Enum_sc_get_enum_values), 0);
259
+ rb_define_singleton_method(enum_klass, "values_by_name", VALUEFUNC(wx_Enum_sc_get_enum_values_by_name), 0);
260
+ rb_define_singleton_method(enum_klass, "names_by_value", VALUEFUNC(wx_Enum_sc_get_enum_names_by_value), 0);
237
261
  VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
238
262
  rb_iv_set(enum_singleton_klass, __iv_enum_klass_values, rb_hash_new());
239
263
  rb_iv_set(enum_singleton_klass, __iv_enum_klass_values_by_name, rb_hash_new());
@@ -266,7 +290,13 @@ WXRB_EXPORT_FLAG VALUE wxRuby_GetEnumValueObject(const char* enum_wx_class_name_
266
290
  VALUE enum_klass = rb_hash_aref(enum_hash, ID2SYM(rb_intern(enum_class_name)));
267
291
  VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
268
292
  VALUE enum_values_hash = rb_iv_get(enum_singleton_klass, __iv_enum_klass_values);
269
- return rb_hash_aref(enum_values_hash, INT2NUM(enum_val));
293
+ VALUE rc = rb_hash_aref(enum_values_hash, INT2NUM(enum_val));
294
+ if (NIL_P(rc))
295
+ {
296
+ VALUE args[1] = { INT2NUM(enum_val) };
297
+ rc = rb_class_new_instance(1, args, enum_klass);
298
+ }
299
+ return rc;
270
300
  }
271
301
  return Qnil;
272
302
  }
@@ -0,0 +1,51 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ module WXRuby3
10
+
11
+ class Director
12
+
13
+ class AffineMatrix2D < Director
14
+
15
+ def setup
16
+ spec.items.unshift('wxAffineMatrix2DBase') << 'wxMatrix2D'
17
+
18
+ spec.make_abstract 'wxAffineMatrix2DBase'
19
+ spec.disable_proxies
20
+
21
+ spec.map_apply 'int * OUTPUT' => ['wxDouble *']
22
+ spec.map 'wxPoint2DDouble *' => 'Wx::Point2DDouble' do
23
+ map_in ignore: true, temp: 'wxPoint2DDouble tmp', code: '$1 = &tmp;'
24
+
25
+ map_argout code: <<~__CODE
26
+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(new wxPoint2DDouble(tmp$argnum), SWIGTYPE_p_wxPoint2DDouble, SWIG_POINTER_OWN));
27
+ __CODE
28
+ end
29
+ spec.map 'wxMatrix2D *' => 'Wx::Matrix2D' do
30
+ map_in ignore: true, temp: 'wxMatrix2D tmp', code: '$1 = &tmp;'
31
+
32
+ map_argout code: <<~__CODE
33
+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(new wxMatrix2D(tmp$argnum), SWIGTYPE_p_wxPoint2DDouble, SWIG_POINTER_OWN));
34
+ __CODE
35
+ end
36
+
37
+ spec.ignore 'wxAffineMatrix2D::Mirror',
38
+ 'wxAffineMatrix2D::TransformPoint',
39
+ 'wxAffineMatrix2D::TransformDistance',
40
+ 'wxAffineMatrix2D::IsEqual'
41
+
42
+ spec.regard 'wxMatrix2D::m_11', 'wxMatrix2D::m_12',
43
+ 'wxMatrix2D::m_21', 'wxMatrix2D::m_22'
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -87,31 +87,47 @@ module WXRuby3
87
87
  }
88
88
  __HEREDOC
89
89
  if Config.platform == :macosx
90
- # add accessor methods for the standard OSX menu items
90
+ # add static accessor methods for the standard OSX menu items
91
91
  spec.add_extend_code 'wxApp', <<~__HEREDOC
92
- void set_mac_about_menu_itemid(long menu_itemid)
92
+ static void set_mac_about_menu_itemid(long menu_itemid)
93
93
  {
94
- $self->s_macAboutMenuItemId = menu_itemid;
94
+ wxApp::s_macAboutMenuItemId = menu_itemid;
95
95
  }
96
- long get_mac_about_menu_itemid(long menu_itemid)
96
+ static long get_mac_about_menu_itemid(long menu_itemid)
97
97
  {
98
- return $self->s_macAboutMenuItemId;
98
+ return wxApp::s_macAboutMenuItemId;
99
99
  }
100
- void set_mac_preferences_menu_itemid(long menu_itemid)
100
+ static void set_mac_preferences_menu_itemid(long menu_itemid)
101
101
  {
102
- $self->s_macPreferencesMenuItemId = menu_itemid;
102
+ wxApp::s_macPreferencesMenuItemId = menu_itemid;
103
103
  }
104
- long get_mac_preferences_menu_itemid(long menu_itemid)
104
+ static long get_mac_preferences_menu_itemid(long menu_itemid)
105
105
  {
106
- return $self->s_macPreferencesMenuItemId;
106
+ return wxApp::s_macPreferencesMenuItemId;
107
107
  }
108
- void set_mac_exit_menu_itemid(long menu_itemid)
108
+ static void set_mac_exit_menu_itemid(long menu_itemid)
109
109
  {
110
- $self->s_macExitMenuItemId = menu_itemid;
110
+ wxApp::s_macExitMenuItemId = menu_itemid;
111
111
  }
112
- long get_mac_exit_menu_itemid(long menu_itemid)
112
+ static long get_mac_exit_menu_itemid(long menu_itemid)
113
113
  {
114
- return $self->s_macExitMenuItemId;
114
+ return wxApp::s_macExitMenuItemId;
115
+ }
116
+ static void set_mac_help_menu_title(const wxString& title)
117
+ {
118
+ wxApp::s_macHelpMenuTitleName = title;
119
+ }
120
+ static const wxString& get_mac_help_menu_title()
121
+ {
122
+ return wxApp::s_macHelpMenuTitleName;
123
+ }
124
+ static void set_mac_window_menu_title(const wxString& title)
125
+ {
126
+ wxApp::s_macWindowMenuTitleName = title;
127
+ }
128
+ static const wxString& get_mac_window_menu_title()
129
+ {
130
+ return wxApp::s_macWindowMenuTitleName;
115
131
  }
116
132
  __HEREDOC
117
133
  end
@@ -28,6 +28,10 @@ module WXRuby3
28
28
  // ArtId and ArtClient are basically just strings ...
29
29
  typedef wxString wxArtID;
30
30
  typedef wxString wxArtClient;
31
+
32
+ // Missing from docs
33
+ %constant const char* wxART_STOP = wxART_STOP;
34
+ %constant const char* wxART_REFRESH = wxART_REFRESH;
31
35
  __HEREDOC
32
36
  spec.map *%w[wxArtID wxArtClient], as: 'String', swig: false do
33
37
  map_in
@@ -53,7 +53,7 @@ module WXRuby3
53
53
  m_actionWindow = NULL;
54
54
  m_hoverButton = NULL;
55
55
  m_art = new wxAuiDefaultDockArt;
56
- m_hintWnd = NULL;
56
+ #{Config.instance.wx_version < '3.3.0' ? 'm_hintWnd = NULL;' : ''}
57
57
  m_flags = wxAUI_MGR_DEFAULT;
58
58
  m_hasMaximized = false;
59
59
  m_dockConstraintX = 0.3;
@@ -20,8 +20,12 @@ module WXRuby3
20
20
  'wxCursor::wxCursor(const wxImage &)',
21
21
  'wxCursor::wxCursor(const char *const *)',
22
22
  'wxCursor::wxCursor(const wxCursor &)'
23
- spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[])',
24
- 'wxCursor::wxCursor(const char *const *)'
23
+ spec.ignore 'wxCursor::wxCursor(const char *const *)'
24
+ if Config.instance.wx_version >= '3.3.0'
25
+ spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[], const wxColour*, const wxColour*)'
26
+ else
27
+ spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[])'
28
+ end
25
29
  # ignore stock object (see RubyStockObjects.i)
26
30
  spec.ignore %w[wxSTANDARD_CURSOR wxHOURGLASS_CURSOR wxCROSS_CURSOR]
27
31
  super