wxruby3 1.0.0 → 1.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22f63fb730a7c17f84eac51d892cad2f35ef33211d88fafde508fe7c222712e6
4
- data.tar.gz: 2cf9e0b4026e8c00b24873e77af5f4d5676e5af3181e6459104b5c6fef0675d1
3
+ metadata.gz: '079f38ae02dfcba5a96738f73c678e0d9a5396920739cb370c47d79b6bb81adf'
4
+ data.tar.gz: 510b7637e541b981deb048d4b0aa3898ea8152900b570ead984dcb9c6daee534
5
5
  SHA512:
6
- metadata.gz: 48cce7a08e4f4bd15380178cab3ab38b53af6942d5054af617806d5b01bea0aabc26887ec26fc07a6bb6c2d9802ec512d59396a2361c88a12635ebf80b066d91
7
- data.tar.gz: eba7856af27dcfe0e4eb50662bae9bb00af12f29258e0eb4b2d446c3351446651926e2e5c0eec017038fef2545671e8ac47faea0f75c1bb3efd54c751585ae08
6
+ metadata.gz: 4b3c4ad6e1c31636d658cd9f0d986c57caf6bc6f72af19af449b7d371c3b9af45b229533f1ae3593b7c23b2b29bf74dfaac8e88740fcca0699dc093f40b29d8f
7
+ data.tar.gz: 827044bb4256d7afc741e77209096cd527f2c77688c0b619fd72cf1ad0bf03992de4e3c60ec93e17795835345b15932ae2773381de85177d941d8b205ab120f7
data/README.md CHANGED
@@ -101,7 +101,7 @@ Currently the following are fully supported:
101
101
 
102
102
  | Platform | Ruby version(s) | wxWidgets version(s) |
103
103
  |------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|----------------------|
104
- | Windows 10 (tested)<br>(most likely also Windows 11) | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2 |
104
+ | Windows >= 10 | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2 |
105
105
  | Linux (tested; all major AMD64 and ARM64 distributions: Ubuntu, Debian, Fedora, OpenSuSE and ArchLinux)<br>(most likely also i686) | Ruby >= 2.5 | wxWidgets >= 3.2 |
106
106
  | MacOS >= 10.10 using Cocoa (tested on AMD64 and ARM64 M1/M2 Chip) | Ruby >= 2.5 (MacPorts, Homebrew, ruby-install, RVM) | wxWidgets >= 3.2 |
107
107
 
@@ -42,6 +42,14 @@
42
42
  * wxWidgets we define our own.
43
43
  */
44
44
 
45
+ #if defined(__GNUC__)
46
+ # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
47
+ # ifndef GCC_HASCLASSVISIBILITY
48
+ # define GCC_HASCLASSVISIBILITY
49
+ # endif
50
+ # endif
51
+ #endif
52
+
45
53
  #ifndef WXRB_EXPORT_FLAG
46
54
  # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
47
55
  # if defined(WXRUBY_STATIC_BUILD)
data/lib/wx/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  # This software is released under the MIT license.
4
4
 
5
5
  module Wx
6
- WXRUBY_VERSION = '1.0.0'
6
+ WXRUBY_VERSION = '1.1.1'
7
7
  end
data/rakelib/build.rb CHANGED
@@ -55,8 +55,18 @@ if WXRuby3.is_bootstrapped?
55
55
  pkg.generate_initializer
56
56
  end
57
57
 
58
- # Target to run the linker to create a final .so/.dll wxruby3 package library
59
- file pkg.lib_target => [*pkg.all_obj_files, *pkg.dep_libs] do | t |
58
+ # only for MacOSX
59
+ file pkg.initializer_loader_src => pkg.initializer_src do
60
+ pkg.generate_initializer_loader
61
+ end
62
+
63
+ # Target to run the linker to create a final wxruby package shared library (MacOSX only)
64
+ file pkg.shlib_target => [*pkg.all_obj_files, *pkg.dep_libs] do |t|
65
+ WXRuby3.config.do_shlib_link(pkg)
66
+ end
67
+
68
+ # Target to run the linker to create a final .so/.dll/.bundle wxruby3 package library
69
+ file pkg.lib_target => pkg.lib_target_deps do | t |
60
70
  WXRuby3.config.do_link(pkg)
61
71
  end
62
72
 
data/rakelib/gem.rake CHANGED
@@ -79,7 +79,7 @@ file WXRuby3::Gem.gem_file => WXRuby3::Gem.manifest do
79
79
  gem.add_dependency 'rake'
80
80
  gem.add_dependency 'minitest', '~> 5.15'
81
81
  gem.add_dependency 'test-unit', '~> 3.5'
82
- gem.add_dependency 'plat4m', '~> 1.0'
82
+ gem.add_dependency 'plat4m', '~> 1.1'
83
83
  gem.rdoc_options <<
84
84
  '--exclude=\\.dll' <<
85
85
  '--exclude=\\.so' <<
data/rakelib/install.rb CHANGED
@@ -152,7 +152,10 @@ module WXRuby3
152
152
  [File.join(WXRuby3.config.get_cfg_string('siterubyver'), 'wx'), ['lib/wx'], 0644],
153
153
  ]
154
154
  # add wxRuby shared libraries
155
- WXRuby3::Director.each_package { |pkg| specs << [WXRuby3.config.get_cfg_string('siterubyverarch'), [pkg.lib_target], 0555] }
155
+ WXRuby3::Director.each_package do |pkg|
156
+ specs << [WXRuby3.config.get_cfg_string('siterubyverarch'), [pkg.lib_target], 0555]
157
+ specs << [WXRuby3.config.get_cfg_string('siterubyverarch'), [pkg.lib_target.sub(/\.#{WXRuby3.config.dll_ext}\Z/, '.dylib')], 0555] if WXRuby3.config.macosx?
158
+ end
156
159
  if WXRuby3.config.get_config('with-wxwin')
157
160
  specs << [WXRuby3.config.get_cfg_string('siterubyverarch'), Install.wxwin_shlibs, 0555]
158
161
  end
@@ -46,6 +46,19 @@ module WXRuby3
46
46
  end
47
47
  protected :patch_rpath
48
48
 
49
+ # add deployment lookup paths for wxruby shared libraries
50
+ # and make loadpath for initializer dylibs relative
51
+ def update_shlib_loadpaths(shlib)
52
+ # in case of a .bundle library
53
+ if /\.bundle\Z/ =~ shlib
54
+ # change the full path of the complementary initializer .dylib to a path relative to any rpath-s
55
+ dylib = "lib#{File.basename(shlib, '.bundle')}.dylib"
56
+ dylib_path = File.expand_path(File.join(Config.instance.dest_dir, dylib))
57
+ sh("install_name_tool -change #{dylib_path} '@rpath/#{dylib}' #{shlib}")
58
+ end
59
+ super
60
+ end
61
+
49
62
  # add Ruby library path for wxruby shared libraries
50
63
  def update_shlib_ruby_libpath(shlib)
51
64
  # fix lookup for the Ruby shared library
@@ -123,10 +136,23 @@ module WXRuby3
123
136
  wx_libset.collect { |s| s.dup }
124
137
  end
125
138
 
126
- def do_link(pkg)
139
+ def do_shlib_link(pkg)
127
140
  objs = pkg.all_obj_files.collect { |o| File.join('..', o) }.join(' ') + ' '
128
- sh "cd lib && #{WXRuby3.config.ld} #{WXRuby3.config.ldflags(pkg.lib_target)} #{objs} " +
129
- "#{WXRuby3.config.libs} #{WXRuby3.config.link_output_flag}#{pkg.lib_target}"
141
+ depsh = pkg.dep_libs.join(' ')
142
+ ldsh = WXRuby3.config.ld.sub(/-bundle/, '')
143
+ ldsh.sub!(/-dynamic/, '-dynamiclib')
144
+ sh "cd lib && " +
145
+ "#{ldsh} #{WXRuby3.config.ldflags(pkg.lib_target)} #{objs} #{depsh} " +
146
+ "#{WXRuby3.config.libs} #{WXRuby3.config.link_output_flag}#{pkg.shlib_target}",
147
+ fail_on_error: true
148
+ end
149
+
150
+ def do_link(pkg)
151
+ sh "cd lib && " +
152
+ "#{WXRuby3.config.ld} #{WXRuby3.config.ldflags(pkg.lib_target)} #{File.join('..', pkg.init_obj_file)} " +
153
+ "-L. -l#{pkg.libname} " +
154
+ "#{WXRuby3.config.libs} #{WXRuby3.config.link_output_flag}#{pkg.lib_target}",
155
+ fail_on_error: true
130
156
  end
131
157
 
132
158
  private
@@ -151,15 +177,14 @@ module WXRuby3
151
177
 
152
178
  if @wx_version
153
179
  @cpp.sub!(/-std=gnu\+\+11/, '-std=gnu++14')
154
- @ld.sub!(/-o\s*\Z/, '')
180
+ # on Mac OSX this differs from the wxWidgets linking setup
181
+ @ld = RB_CONFIG['LDSHAREDXX'] || 'g++ -std=gnu++14 -dynamic -bundle'
182
+ @ld.sub!(/-std=gnu\+\+11/, '-std=gnu++14')
155
183
 
156
184
  @extra_cflags.concat %w[-Wno-unused-function -Wno-conversion-null -Wno-sometimes-uninitialized
157
185
  -Wno-overloaded-virtual -Wno-deprecated-copy]
158
186
  @extra_cflags << ' -Wno-deprecated-declarations' unless @no_deprecated
159
187
 
160
- # create a .dylib binary
161
- @extra_ldflags << '-dynamic -bundle'
162
-
163
188
  unless @wx_path.empty?
164
189
  libdirs = @wx_libs.select {|s| s.start_with?('-L')}.collect {|s| s.sub(/^-L/,'')}
165
190
  @exec_env['DYLD_LIBRARY_PATH'] = "#{ENV['DYLD_LIBRARY_PATH']}:#{dest_dir}:#{libdirs.join(':')}"
@@ -7,6 +7,7 @@
7
7
  ###
8
8
 
9
9
  require_relative './unixish'
10
+ require_relative 'pkgman/mingw'
10
11
 
11
12
  require 'uri'
12
13
 
@@ -26,13 +27,6 @@ module WXRuby3
26
27
 
27
28
  module Platform
28
29
 
29
- SWIG_URL = 'https://sourceforge.net/projects/swig/files/swigwin/swigwin-4.2.0/swigwin-4.2.0.zip/download'
30
- SWIG_ZIP = 'swigwin-4.2.0.zip'
31
-
32
- DOXYGEN_URL = 'https://www.doxygen.nl/files/doxygen-1.10.0.windows.x64.bin.zip'
33
-
34
- GIT_URL = 'https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/MinGit-2.43.0-64-bit.zip'
35
-
36
30
  def self.included(base)
37
31
  base.class_eval do
38
32
  include Config::UnixLike
@@ -85,71 +79,10 @@ module WXRuby3
85
79
 
86
80
  def install_prerequisites
87
81
  pkg_deps = super
88
- unless pkg_deps.empty?
89
- # autoinstall or not?
90
- unless wants_autoinstall?
91
- STDERR.puts <<~__ERROR_TXT
92
- ERROR: This system lacks installed versions of the following required software packages:
93
- #{pkg_deps.join(', ')}
94
-
95
- Install these packages and try again.
96
- __ERROR_TXT
97
- exit(1)
98
- end
99
- # if SWIG was not found in the PATH
100
- if pkg_deps.include?('swig')
101
- $stdout.print 'Installing SWIG...' if run_silent?
102
- # download and install SWIG
103
- fname = download_and_install(SWIG_URL, SWIG_ZIP, 'swig.exe')
104
- $stdout.puts 'done!' if run_silent?
105
- Config.instance.log_progress("Installed #{fname}")
106
- set_config('swig', fname)
107
- Config.save
108
- end
109
- # if doxygen was not found in the PATH
110
- if pkg_deps.include?('doxygen')
111
- $stdout.print 'Installing Doxygen...' if run_silent?
112
- # download and install doxygen
113
- fname = download_and_install(DOXYGEN_URL, File.basename(URI(DOXYGEN_URL).path), 'doxygen.exe', 'doxygen')
114
- $stdout.puts 'done!' if run_silent?
115
- Config.instance.log_progress("Installed #{fname}")
116
- set_config('doxygen', fname)
117
- Config.save
118
- end
119
- # if git was not found in the PATH
120
- if pkg_deps.include?('git')
121
- $stdout.print 'Installing Git...' if run_silent?
122
- # download and install doxygen
123
- fname = download_and_install(GIT_URL, File.basename(URI(GIT_URL).path), 'git.exe', 'git')
124
- $stdout.puts 'done!' if run_silent?
125
- Config.instance.log_progress("Installed #{fname}")
126
- set_config('git', fname)
127
- Config.save
128
- end
129
- end
82
+ PkgManager.install(pkg_deps)
130
83
  []
131
84
  end
132
85
 
133
- # only called after src gem build
134
- def cleanup_prerequisites
135
- tmp_tool_root = File.join(ENV['HOME'].gsub("\\", '/'), '.wxruby3')
136
- path = get_cfg_string('swig')
137
- unless path.empty? || !path.start_with?(tmp_tool_root)
138
- path = File.dirname(path) while File.dirname(path) != tmp_tool_root
139
- rm_rf(path)
140
- end
141
- path = get_cfg_string('doxygen')
142
- unless path.empty? || !path.start_with?(tmp_tool_root)
143
- path = File.dirname(path) while File.dirname(path) != tmp_tool_root
144
- rm_rf(path)
145
- end
146
- path = get_cfg_string('git')
147
- unless path.empty? || !path.start_with?(tmp_tool_root)
148
- path = File.dirname(path) while File.dirname(path) != tmp_tool_root
149
- rm_rf(path)
150
- end
151
- end
152
-
153
86
  def expand(cmd)
154
87
  super("bash -c \"#{cmd}\"")
155
88
  end
@@ -164,38 +97,8 @@ module WXRuby3
164
97
 
165
98
  private
166
99
 
167
- def download_and_install(url, zip, exe, unpack_to=nil)
168
- # make sure the download destination exists
169
- tmp_tool_root = File.join(ENV['HOME'].gsub("\\", '/'), '.wxruby3')
170
- dest = unpack_to ? File.join(tmp_tool_root, unpack_to) : File.join(tmp_tool_root, File.basename(zip, '.*'))
171
- mkdir(tmp_tool_root) unless File.directory?(tmp_tool_root)
172
- # download
173
- chdir(tmp_tool_root) do
174
- unless download_file(url, zip)
175
- STDERR.puts "ERROR: Failed to download installation package for #{exe}"
176
- exit(1)
177
- end
178
- # unpack
179
- unless sh("powershell Expand-Archive -LiteralPath '#{zip}' -DestinationPath #{dest} -Force")
180
- STDERR.puts "ERROR: Failed to unpack installation package for #{exe}"
181
- exit(1)
182
- end
183
- # cleanup
184
- rm_f(zip)
185
- end
186
- # find executable
187
- find_exe(dest, exe)
188
- end
189
-
190
- def find_exe(path, exe)
191
- fp = Dir.glob(File.join(path, '*')).find { |p| File.file?(p) && File.basename(p) == exe }
192
- unless fp
193
- Dir.glob(File.join(path, '*')).each do |p|
194
- fp = find_exe(p, exe) if File.directory?(p)
195
- return fp if fp
196
- end
197
- end
198
- fp
100
+ def wx_configure
101
+ bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --without-regex --with-expat=builtin --with-zlib=builtin --disable-debug_info')
199
102
  end
200
103
 
201
104
  def wx_make
@@ -14,11 +14,33 @@ module WXRuby3
14
14
 
15
15
  module PkgManager
16
16
 
17
+ class PlatformDependencies
18
+ def initialize(*defaults)
19
+ @dependencies = ::Hash.new
20
+ @dependencies.default = ::Hash.new(defaults.flatten)
21
+ end
22
+
23
+ def add(distro, *deps, release: nil)
24
+ @dependencies[distro] ||= ::Hash.new
25
+ if release
26
+ @dependencies[distro][release] = deps.flatten
27
+ else
28
+ @dependencies[distro].default = deps.flatten
29
+ end
30
+ self
31
+ end
32
+
33
+ def get(distro, release: nil)
34
+ @dependencies[distro][release]
35
+ end
36
+ end
37
+
17
38
  PLATFORM_DEPS = {
18
- debian: %w[libgtk-3-dev libwebkit2gtk-4.0-dev libgspell-1-dev libunwind-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libcurl4-openssl-dev libsecret-1-dev libnotify-dev],
19
- rhel: %w[expat-devel findutils gspell-devel gstreamer1-plugins-base-devel gtk3-devel libcurl-devel libjpeg-devel libnotify-devel libpng-devel libSM-devel libsecret-devel libtiff-devel SDL-devel webkit2gtk4.1-devel zlib-devel],
20
- suse: %w[gtk3-devel webkit2gtk3-devel gspell-devel gstreamer-devel gstreamer-plugins-base-devel libcurl-devel libsecret-devel libnotify-devel libSDL-devel zlib-devel libjpeg-devel libpng-devel],
21
- arch: %w[pkg-config gtk3 webkit2gtk gspell libunwind gstreamer curl libsecret libnotify libpng12]
39
+ debian: PlatformDependencies.new(%w[libgtk-3-dev libwebkit2gtk-4.0-dev libgspell-1-dev libunwind-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libcurl4-openssl-dev libsecret-1-dev libnotify-dev])
40
+ .add('ubuntu', %w[libgtk-3-dev libwebkit2gtk-4.1-dev libgspell-1-dev libunwind-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libcurl4-openssl-dev libsecret-1-dev libnotify-dev], release: '24.04'),
41
+ rhel: PlatformDependencies.new(%w[expat-devel findutils gspell-devel gstreamer1-plugins-base-devel gtk3-devel libcurl-devel libjpeg-devel libnotify-devel libpng-devel libSM-devel libsecret-devel libtiff-devel SDL-devel webkit2gtk4.1-devel zlib-devel]),
42
+ suse: PlatformDependencies.new(%w[gtk3-devel webkit2gtk3-devel gspell-devel gstreamer-devel gstreamer-plugins-base-devel libcurl-devel libsecret-devel libnotify-devel libSDL-devel zlib-devel libjpeg-devel libpng-devel]),
43
+ arch: PlatformDependencies.new(%w[pkg-config gtk3 webkit2gtk gspell libunwind gstreamer curl libsecret libnotify libpng12])
22
44
  }
23
45
  PLATFORM_ALTS = {
24
46
  suse: { 'g++' => 'gcc-c++' },
@@ -41,7 +63,7 @@ module WXRuby3
41
63
 
42
64
  Make sure the following packages (or equivalent) are installed and than try again with `--no-autoinstall`:
43
65
  #{pkgs.join(', ')}
44
- __ERROR_TXT
66
+ __ERROR_TXT
45
67
  exit(1)
46
68
  end
47
69
  # can we install?
@@ -63,7 +85,7 @@ module WXRuby3
63
85
  #{pkgs.join(', ')}
64
86
 
65
87
  Install these packages and try again.
66
- __ERROR_TXT
88
+ __ERROR_TXT
67
89
  exit(1)
68
90
  end
69
91
  # do the actual install
@@ -73,7 +95,7 @@ module WXRuby3
73
95
  #{pkgs.join(', ')}
74
96
 
75
97
  Fix any problems or install these packages yourself and try again.
76
- __ERROR_TXT
98
+ __ERROR_TXT
77
99
  if WXRuby3.config.run_silent?
78
100
  $stderr.puts "For error details check #{WXRuby3.config.silent_log_name}"
79
101
  end
@@ -90,7 +112,8 @@ module WXRuby3
90
112
  end
91
113
 
92
114
  def platform_pkgs
93
- PLATFORM_DEPS[WXRuby3.config.sysinfo.os.variant.to_sym] || []
115
+ deps = PLATFORM_DEPS[WXRuby3.config.sysinfo.os.variant.to_sym]
116
+ deps ? deps.get(WXRuby3.config.sysinfo.os.distro, release: WXRuby3.config.sysinfo.os.release) : []
94
117
  end
95
118
 
96
119
  def add_platform_pkgs(pkgs)
@@ -0,0 +1,112 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 buildtools platform pkg manager base
7
+ ###
8
+
9
+ module WXRuby3
10
+
11
+ module Config
12
+
13
+ module Platform
14
+
15
+ module PkgManager
16
+
17
+ XTRA_PLATFORM_DEPS = %w[python]
18
+
19
+ class << self
20
+
21
+ def install(pkgs)
22
+ # do we need to install anything?
23
+ if !pkgs.empty? || builds_wxwidgets?
24
+ # check windows distro compatibility
25
+ unless no_autoinstall? || pkgman
26
+ # do we need to build wxWidgets?
27
+ pkgs.concat(XTRA_PLATFORM_DEPS) if builds_wxwidgets?
28
+ $stderr.puts <<~__ERROR_TXT
29
+ ERROR: Do not know how to install required packages for distro type '#{WXRuby3.config.sysinfo.os.variant}'.
30
+
31
+ Make sure the following packages (or equivalent) are installed and than try again with `--no-autoinstall`:
32
+ #{pkgs.join(', ')}
33
+ __ERROR_TXT
34
+ exit(1)
35
+ end
36
+ # can we install?
37
+ unless no_autoinstall? || pkgman
38
+ $stderr.puts 'ERROR: Do not know how to check for or install required packages. Please install manually and than try again with `--no-autoinstall`.'
39
+ exit(1)
40
+ end
41
+ # do we need to build wxWidgets?
42
+ if builds_wxwidgets?
43
+ # add platform specific packages for wxWidgets
44
+ pkgs.concat(XTRA_PLATFORM_DEPS)
45
+ end
46
+ # do we actually have any packages to install?
47
+ unless pkgs.empty?
48
+ # autoinstall or not?
49
+ unless wants_autoinstall?
50
+ $stderr.puts <<~__ERROR_TXT
51
+ ERROR: This system may lack installed versions of the following required software packages:
52
+ #{pkgs.join(', ')}
53
+
54
+ Install these packages and try again.
55
+ __ERROR_TXT
56
+ exit(1)
57
+ end
58
+ # do the actual install
59
+ unless run(pkgman.make_install_command(*pkgs))
60
+ $stderr.puts <<~__ERROR_TXT
61
+ ERROR: Failed to install all or some of the following required software packages:
62
+ #{pkgs.join(', ')}
63
+
64
+ Fix any problems or install these packages yourself and try again.
65
+ __ERROR_TXT
66
+ if WXRuby3.config.run_silent?
67
+ $stderr.puts "For error details check #{WXRuby3.config.silent_log_name}"
68
+ end
69
+ exit(1)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def pkgman
78
+ @pkgman ||= WXRuby3.config.sysinfo.os.pkgman
79
+ end
80
+
81
+ def builds_wxwidgets?
82
+ Config.get_config('with-wxwin') && Config.get_cfg_string('wxwin').empty?
83
+ end
84
+
85
+ def no_autoinstall?
86
+ Config.get_config('autoinstall') == false
87
+ end
88
+
89
+ def wants_autoinstall?
90
+ WXRuby3.config.wants_autoinstall?
91
+ end
92
+
93
+ def run(cmd)
94
+ $stdout.print "Running #{cmd}..."
95
+ rc = WXRuby3.config.bash(cmd)
96
+ $stderr.puts(rc ? 'done!' : 'FAILED!')
97
+ rc
98
+ end
99
+
100
+ def expand(cmd)
101
+ `#{is_root? ? '' : 'sudo '}#{cmd}`
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -69,6 +69,10 @@ module WXRuby3
69
69
  File.join(Config.instance.dest_dir, "#{libname}.#{Config.instance.dll_ext}")
70
70
  end
71
71
 
72
+ def shlib_target
73
+ Config.instance.macosx? ? File.join(Config.instance.dest_dir, "lib#{libname}.dylib") : nil
74
+ end
75
+
72
76
  def package(pkgname)
73
77
  subpackages[pkgname] ||= Package.new(pkgname, self)
74
78
  end
@@ -156,9 +160,30 @@ module WXRuby3
156
160
  @all_obj_files
157
161
  end
158
162
 
163
+ # only used for MacOSX
164
+ def init_obj_file
165
+ if Config.instance.macosx?
166
+ File.join(Config.instance.obj_dir, "#{libname}_init_loader.#{Config.instance.obj_ext}")
167
+ else
168
+ File.join(Config.instance.obj_dir, "#{libname}_init.#{Config.instance.obj_ext}")
169
+ end
170
+ end
171
+
172
+ def lib_target_deps
173
+ if Config.instance.macosx?
174
+ [init_obj_file, shlib_target, *dep_libs]
175
+ else
176
+ [*all_obj_files, *dep_libs]
177
+ end
178
+ end
179
+
159
180
  def dep_libs
160
181
  if parent
161
- parent.dep_libs + [File.join(Config.instance.dest_dir, "#{parent.libname}.#{Config.instance.dll_ext}")]
182
+ parent.dep_libs + if Config.instance.macosx?
183
+ [parent.shlib_target]
184
+ else
185
+ [parent.lib_target]
186
+ end
162
187
  else
163
188
  []
164
189
  end
@@ -176,6 +201,11 @@ module WXRuby3
176
201
  File.join(Config.instance.src_dir, "#{libname}_init.cpp")
177
202
  end
178
203
 
204
+ # only for MacOSX
205
+ def initializer_loader_src
206
+ File.join(Config.instance.src_dir, "#{libname}_init_loader.cpp")
207
+ end
208
+
179
209
  def is_dir_with_fulfilled_deps?(dir, cls_set)
180
210
  if (modreg = Spec.module_registry[dir.spec.module_name]) && !modreg.empty?
181
211
  # check if all base classes are defined previously or part of the same director or outside the current package
@@ -286,6 +316,14 @@ module WXRuby3
286
316
  fsrc.puts '#include <ruby.h>'
287
317
  fsrc.puts '#include <ruby/version.h>'
288
318
  fsrc.puts <<~__HEREDOC
319
+ #if defined(__GNUC__)
320
+ # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
321
+ # ifndef GCC_HASCLASSVISIBILITY
322
+ # define GCC_HASCLASSVISIBILITY
323
+ # endif
324
+ # endif
325
+ #endif
326
+
289
327
  #ifndef WXRB_EXPORT_FLAG
290
328
  # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
291
329
  # if defined(WXRUBY_STATIC_BUILD)
@@ -338,7 +376,11 @@ module WXRuby3
338
376
  fsrc.puts '#ifdef __cplusplus'
339
377
  fsrc.puts 'extern "C"'
340
378
  fsrc.puts '#endif'
341
- fsrc.puts "WXRB_EXPORT_FLAG void Init_#{libname}()"
379
+ if Config.instance.macosx?
380
+ fsrc.puts "WXRB_EXPORT_FLAG void wxruby_init_#{libname}()"
381
+ else
382
+ fsrc.puts "WXRB_EXPORT_FLAG void Init_#{libname}()"
383
+ end
342
384
  fsrc.puts '{'
343
385
  fsrc.indent do
344
386
  fsrc.puts 'static bool initialized;'
@@ -357,7 +399,7 @@ module WXRuby3
357
399
  fsrc << <<~__HERDOC
358
400
  // define Enum class
359
401
  wx_define_Enum_class();
360
- __HERDOC
402
+ __HERDOC
361
403
  fsrc.puts
362
404
  # generate constant definitions for feature defines from setup.h
363
405
  fsrc.puts %Q{VALUE mWxSetup = rb_define_module_under(#{module_variable}, "Setup");}
@@ -391,6 +433,72 @@ module WXRuby3
391
433
  generate_event_list if included_directors.any? {|dir| dir.has_events? }
392
434
  end
393
435
 
436
+ # only for MacOSX
437
+ def generate_initializer_loader
438
+ STDERR.puts "* generating package #{name} initializer : #{initializer_src}" if Director.verbose?
439
+
440
+ Stream.transaction do
441
+ fsrc = CodeStream.new(initializer_loader_src)
442
+ fsrc.puts '#include <ruby.h>'
443
+ fsrc.puts '#include <ruby/version.h>'
444
+ fsrc.puts <<~__HEREDOC
445
+ #if defined(__GNUC__)
446
+ # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
447
+ # ifndef GCC_HASCLASSVISIBILITY
448
+ # define GCC_HASCLASSVISIBILITY
449
+ # endif
450
+ # endif
451
+ #endif
452
+
453
+ #ifndef WXRB_EXPORT_FLAG
454
+ # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
455
+ # if defined(WXRUBY_STATIC_BUILD)
456
+ # define WXRB_EXPORT_FLAG
457
+ # else
458
+ # define WXRB_EXPORT_FLAG __declspec(dllexport)
459
+ # endif
460
+ # else
461
+ # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
462
+ # define WXRB_EXPORT_FLAG __attribute__ ((visibility("default")))
463
+ # else
464
+ # define WXRB_EXPORT_FLAG
465
+ # endif
466
+ # endif
467
+ #endif
468
+
469
+ #ifndef WXRB_IMPORT_FLAG
470
+ # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
471
+ # if defined(WXRUBY_STATIC_BUILD)
472
+ # define WXRB_IMPORT_FLAG
473
+ # else
474
+ # define WXRB_IMPORT_FLAG __declspec(dllimport)
475
+ # endif
476
+ # else
477
+ # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
478
+ # define WXRB_IMPORT_FLAG __attribute__ ((visibility("default")))
479
+ # else
480
+ # define WXRB_IMPORT_FLAG
481
+ # endif
482
+ # endif
483
+ #endif
484
+ __HEREDOC
485
+ fsrc.puts '#ifdef __cplusplus'
486
+ fsrc.puts 'extern "C"'
487
+ fsrc.puts '#endif'
488
+ fsrc.puts "WXRB_IMPORT_FLAG void wxruby_init_#{libname}();"
489
+ fsrc.puts
490
+ fsrc.puts '#ifdef __cplusplus'
491
+ fsrc.puts 'extern "C"'
492
+ fsrc.puts '#endif'
493
+ fsrc.puts "WXRB_EXPORT_FLAG void Init_#{libname}()"
494
+ fsrc.puts '{'
495
+ fsrc.indent do
496
+ fsrc.puts "wxruby_init_#{libname}();"
497
+ end
498
+ fsrc.puts '}'
499
+ end
500
+ end
501
+
394
502
  def extract(*mods, genint: true)
395
503
  included_directors.each do |dir|
396
504
  dir.extract_interface(genint) if (mods.empty? || mods.include?(dir.spec.name))
@@ -420,11 +528,11 @@ module WXRuby3
420
528
  raise "Don't know Event class for #{evh_name} event type (from #{item.name})"
421
529
  end
422
530
  fout.puts ' '+<<~__HEREDOC.split("\n").join("\n ")
423
- self.register_event_type EventType[
424
- '#{evh_name}', #{evt_arity},
425
- #{fullname}::#{evt_type},
426
- #{fullname}::#{evt_klass.sub(/\Awx/i, '')}
427
- ] if #{fullname}.const_defined?(:#{evt_type})
531
+ self.register_event_type EventType[
532
+ '#{evh_name}', #{evt_arity},
533
+ #{fullname}::#{evt_type},
534
+ #{fullname}::#{evt_klass.sub(/\Awx/i, '')}
535
+ ] if #{fullname}.const_defined?(:#{evt_type})
428
536
  __HEREDOC
429
537
  evts_handled << evh_name
430
538
  end
@@ -562,7 +670,7 @@ module WXRuby3
562
670
 
563
671
  class EvtHandler
564
672
 
565
- __HEREDOC
673
+ __HEREDOC
566
674
  fdoc.indent(2) do
567
675
  fdoc.doc.puts "@!group #{name} Event handler methods"
568
676
  fdoc.puts
@@ -651,7 +759,7 @@ module WXRuby3
651
759
 
652
760
  end
653
761
  __HEREDOC
654
- __SCRIPT
762
+ __SCRIPT
655
763
  begin
656
764
  tmpfile = Tempfile.new('script')
657
765
  ftmp_name = tmpfile.path.dup
@@ -16,6 +16,7 @@ module WXRuby3
16
16
  super
17
17
  spec.items << 'wxAuiDefaultTabArt' << 'wxAuiSimpleTabArt'
18
18
  spec.gc_as_object
19
+ spec.disable_proxies
19
20
  # missing from interface documentation
20
21
  spec.extend_interface('wxAuiTabArt',
21
22
  'virtual ~wxAuiTabArt ()',
@@ -16,7 +16,8 @@ module WXRuby3
16
16
  super
17
17
  spec.items << 'wxAuiDefaultToolBarArt'
18
18
  spec.gc_as_object
19
- spec.extend_interface('wxAuiToolBarArt', 'virtual ~wxAuiToolBarArt ()')
19
+ spec.make_abstract 'wxAuiToolBarArt'
20
+ spec.disable_proxies
20
21
  spec.suppress_warning(473, 'wxAuiToolBarArt::Clone', 'wxAuiDefaultToolBarArt::Clone')
21
22
  spec.map 'const wxAuiToolBarItemArray&' => 'Array<Wx::AUI::AuiToolBarItem>,nil' do
22
23
  map_in temp: 'wxAuiToolBarItemArray tmp', code: <<~__CODE
@@ -16,6 +16,13 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
+ _readDC = if Config.instance.wx_version >= '3.3.0'
20
+ spec.items.unshift 'wxReadOnlyDC' # prepend before wxDC
21
+ spec.items << 'wxInfoDC'
22
+ 'wxReadOnlyDC'
23
+ else
24
+ 'wxDC'
25
+ end
19
26
  spec.items << 'wxFontMetrics'
20
27
  # it's not safe to track DC objects as these are often created on the stack in C++
21
28
  # before being passed to Ruby methods
@@ -29,22 +36,24 @@ module WXRuby3
29
36
  'wxFontMetrics::externalLeading',
30
37
  'wxFontMetrics::averageWidth'
31
38
  spec.ignore [
32
- 'wxDC::GetPartialTextExtents',
33
- 'wxDC::DrawLines(const wxPointList *,wxCoord,wxCoord)',
34
- 'wxDC::DrawPolygon(const wxPointList *,wxCoord,wxCoord,wxPolygonFillMode)',
35
- 'wxDC::DrawSpline(const wxPointList *)',
36
- 'wxDC::GetLogicalOrigin(wxCoord *,wxCoord *) const',
37
- 'wxDC::GetHandle'
39
+ 'wxDC::DrawLines(const wxPointList *,wxCoord,wxCoord)',
40
+ 'wxDC::DrawPolygon(const wxPointList *,wxCoord,wxCoord,wxPolygonFillMode)',
41
+ 'wxDC::DrawSpline(const wxPointList *)',
42
+ 'wxDC::GetHandle'
43
+ ]
44
+ spec.ignore [
45
+ "#{_readDC}::GetPartialTextExtents",
46
+ "#{_readDC}::GetLogicalOrigin(wxCoord *,wxCoord *) const",
38
47
  ]
48
+ spec.rename_for_ruby({
49
+ 'GetDimensions' => "#{_readDC}::GetSize(wxCoord *, wxCoord *) const",
50
+ 'GetDimensionsMM' => "#{_readDC}::GetSizeMM(wxCoord *, wxCoord *) const",
51
+ 'GetTextSize' => "#{_readDC}::GetTextExtent(const wxString &) const",
52
+ 'GetMultiLineTextSize' => "#{_readDC}::GetMultiLineTextExtent(const wxString &) const"
53
+ })
39
54
  spec.disable_proxies
40
55
  spec.disown 'wxGraphicsContext *ctx'
41
- spec.rename_for_ruby({
42
- 'GetDimensions' => 'wxDC::GetSize(wxCoord *, wxCoord *) const',
43
- 'GetDimensionsMM' => 'wxDC::GetSizeMM(wxCoord *, wxCoord *) const',
44
- 'GetTextSize' => 'wxDC::GetTextExtent(const wxString &) const',
45
- 'GetMultiLineTextSize' => 'wxDC::GetMultiLineTextExtent(const wxString &) const'
46
- })
47
- spec.add_extend_code 'wxDC', <<~__HEREDOC
56
+ spec.add_extend_code _readDC, <<~__HEREDOC
48
57
  // Needs to return input parameter with list of lengths
49
58
  VALUE get_partial_text_extents(VALUE text) {
50
59
  wxString str = wxString(StringValuePtr(text), wxConvUTF8);
@@ -57,10 +66,31 @@ module WXRuby3
57
66
  }
58
67
  return rb_result;
59
68
  }
60
- __HEREDOC
69
+ __HEREDOC
61
70
  # for GetUserScale and GetLogicalScale
62
71
  spec.map_apply 'double * OUTPUT' => 'double *'
63
72
  spec.swig_import 'swig/classes/include/wxGDICommon.h'
73
+ if Config.instance.wx_version >= '3.3.0'
74
+ # add similar block-style creator as #draw_on methods
75
+ spec.add_extend_code 'wxInfoDC', <<~__HEREDOC
76
+ static VALUE inform_on(wxWindow* win)
77
+ {
78
+ if (!wxRuby_IsAppRunning())
79
+ rb_raise(rb_eRuntimeError, "A running Wx::App is required.");
80
+ if (!win)
81
+ rb_raise(rb_eRuntimeError, "A running valid Wx::Window is required for argument.");
82
+ VALUE rc = Qnil;
83
+ if (rb_block_given_p ())
84
+ {
85
+ wxInfoDC info_dc(win);
86
+ wxReadOnlyDC* dc_ptr = &info_dc; // wxInfoDC::operator&() returns wxReadOnlyDC*
87
+ VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(dc_ptr), SWIGTYPE_p_wxInfoDC, 0);
88
+ rc = rb_yield(rb_dc);
89
+ }
90
+ return rc;
91
+ }
92
+ __HEREDOC
93
+ end
64
94
  end
65
95
  end # class DC
66
96
 
@@ -18,6 +18,7 @@ module WXRuby3
18
18
  spec.gc_as_untracked spec.module_name
19
19
  case spec.module_name
20
20
  when 'wxScreenDC'
21
+ spec.override_inheritance_chain('wxScreenDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
21
22
  spec.make_abstract 'wxScreenDC'
22
23
  # as a ScreenDC should always be a temporary stack object
23
24
  # we do not allow creation in Ruby but rather provide a class
@@ -43,6 +44,7 @@ module WXRuby3
43
44
  'wxScreenDC::EndDrawingOnTop',
44
45
  'wxScreenDC::wxScreenDC'
45
46
  when 'wxClientDC'
47
+ spec.override_inheritance_chain('wxClientDC', ['wxWindowDC', 'wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
46
48
  spec.make_abstract 'wxClientDC'
47
49
  spec.ignore 'wxClientDC::wxClientDC'
48
50
  # as a ClientDC should best always be a temporary stack object
@@ -65,6 +67,7 @@ module WXRuby3
65
67
  }
66
68
  __HEREDOC
67
69
  when 'wxPaintDC'
70
+ spec.override_inheritance_chain('wxPaintDC', ['wxClientDC', 'wxWindowDC', 'wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
68
71
  spec.make_abstract 'wxPaintDC'
69
72
  spec.ignore 'wxPaintDC::wxPaintDC'
70
73
  spec.add_header_code <<~__HEREDOC
@@ -89,7 +92,10 @@ module WXRuby3
89
92
  __HEREDOC
90
93
  when 'wxMemoryDC'
91
94
  spec.items << 'wxBufferedDC' << 'wxBufferedPaintDC'
95
+ spec.override_inheritance_chain('wxMemoryDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
92
96
  spec.gc_as_untracked %w[wxBufferedDC wxBufferedPaintDC]
97
+ spec.override_inheritance_chain('wxBufferedDC', ['wxMemoryDC', 'wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
98
+ spec.override_inheritance_chain('wxBufferedPaintDC', ['wxBufferedDC', 'wxMemoryDC', 'wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
93
99
  spec.make_abstract 'wxMemoryDC'
94
100
  spec.make_abstract 'wxBufferedDC'
95
101
  spec.make_abstract 'wxBufferedPaintDC'
@@ -218,6 +224,7 @@ module WXRuby3
218
224
  }
219
225
  __HEREDOC
220
226
  when 'wxMirrorDC'
227
+ spec.override_inheritance_chain('wxMirrorDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
221
228
  spec.make_abstract 'wxMirrorDC'
222
229
  spec.ignore 'wxMirrorDC::wxMirrorDC'
223
230
  # as a MirrorDC should best always be a temporary stack object
@@ -240,6 +247,7 @@ module WXRuby3
240
247
  }
241
248
  __HEREDOC
242
249
  when 'wxSVGFileDC'
250
+ spec.override_inheritance_chain('wxSVGFileDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
243
251
  spec.items.concat %w[wxSVGBitmapHandler wxSVGBitmapFileHandler wxSVGBitmapEmbedHandler]
244
252
  spec.make_abstract 'wxSVGFileDC'
245
253
  spec.ignore 'wxSVGFileDC::wxSVGFileDC'
@@ -277,6 +285,7 @@ module WXRuby3
277
285
  'wxSVGFileDC::StartPage',
278
286
  'wxSVGFileDC::EndPage'
279
287
  when 'wxGCDC'
288
+ spec.override_inheritance_chain('wxGCDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
280
289
  spec.make_abstract 'wxGCDC'
281
290
  spec.ignore 'wxGCDC::wxGCDC'
282
291
  # like all DC this should best always be a temporary stack object
@@ -382,7 +391,11 @@ module WXRuby3
382
391
  spec.ignore 'wxGCDC::wxGCDC(const wxEnhMetaFileDC &)'
383
392
  when 'wxScaledDC'
384
393
  spec.items.clear # wxRuby extension; no XML docs
385
- spec.override_inheritance_chain('wxScaledDC', %w[wxDC wxObject])
394
+ if Config.instance.wx_version >= '3.3.0'
395
+ spec.override_inheritance_chain('wxScaledDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject'])
396
+ else
397
+ spec.override_inheritance_chain('wxScaledDC', %w[wxDC wxObject])
398
+ end
386
399
  # as there are no dependencies parsed from XML make sure we're initialized after Wx::DC
387
400
  spec.initialize_at_end = true
388
401
  spec.no_proxy 'wxScaledDC'
@@ -422,6 +435,7 @@ module WXRuby3
422
435
  };
423
436
  __HEREDOC
424
437
  when 'wxPrinterDC'
438
+ spec.override_inheritance_chain('wxPrinterDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
425
439
  spec.make_abstract 'wxPrinterDC'
426
440
  spec.ignore 'wxPrinterDC::wxPrinterDC'
427
441
  # as a PrinterDC should best always be a temporary stack object
@@ -444,6 +458,7 @@ module WXRuby3
444
458
  }
445
459
  __HEREDOC
446
460
  when 'wxPostScriptDC'
461
+ spec.override_inheritance_chain('wxPostScriptDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
447
462
  spec.make_abstract 'wxPostScriptDC'
448
463
  spec.ignore 'wxPostScriptDC::wxPostScriptDC'
449
464
  # as a PostScriptDC should best always be a temporary stack object
@@ -499,7 +514,44 @@ module WXRuby3
499
514
  return rc;
500
515
  }
501
516
  __HEREDOC
517
+ if Config.instance.wx_version >= '3.3.0'
518
+ spec.items << 'wxOverlayDC'
519
+ spec.override_inheritance_chain('wxOverlayDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject'])
520
+ spec.make_abstract 'wxOverlayDC'
521
+ spec.ignore 'wxOverlayDC::wxOverlayDC'
522
+ spec.add_extend_code 'wxOverlayDC', <<~__HEREDOC
523
+ static VALUE draw_on(wxOverlay &overlay, wxWindow *win)
524
+ {
525
+ if (!wxRuby_IsAppRunning())
526
+ rb_raise(rb_eRuntimeError, "A running Wx::App is required.");
527
+ VALUE rc = Qnil;
528
+ if (rb_block_given_p ())
529
+ {
530
+ wxOverlayDC ovl_dc(overlay, win);
531
+ wxOverlayDC* ovl_dc_ptr = &ovl_dc;
532
+ VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0);
533
+ rc = rb_yield(rb_dc);
534
+ }
535
+ return rc;
536
+ }
537
+ static VALUE draw_on(wxOverlay &overlay, wxWindow *win, const wxRect &rect)
538
+ {
539
+ if (!wxRuby_IsAppRunning())
540
+ rb_raise(rb_eRuntimeError, "A running Wx::App is required.");
541
+ VALUE rc = Qnil;
542
+ if (rb_block_given_p ())
543
+ {
544
+ wxOverlayDC ovl_dc(overlay, win, rect);
545
+ wxOverlayDC* ovl_dc_ptr = &ovl_dc;
546
+ VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0);
547
+ rc = rb_yield(rb_dc);
548
+ }
549
+ return rc;
550
+ }
551
+ __HEREDOC
552
+ end
502
553
  else
554
+ spec.override_inheritance_chain(spec.module_name, ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version >= '3.3.0'
503
555
  # ctors of all other derived DC require a running App
504
556
  spec.require_app spec.module_name
505
557
  end
@@ -16,7 +16,9 @@ module WXRuby3
16
16
  spec.items << 'wxRibbonPageTabInfo' << 'wxRibbonMSWArtProvider' << 'wxRibbonAUIArtProvider'
17
17
  super
18
18
  spec.gc_as_object 'wxRibbonArtProvider'
19
+ spec.make_abstract 'wxRibbonArtProvider'
19
20
  spec.gc_as_untracked 'wxRibbonPageTabInfo'
21
+ spec.disable_proxies
20
22
  spec.suppress_warning(473,
21
23
  'wxRibbonArtProvider::Clone',
22
24
  'wxRibbonMSWArtProvider::Clone',
@@ -20,6 +20,22 @@ module WXRuby3
20
20
  super
21
21
  spec.items << 'wxRichTextFontTable' << 'wxRichTextFieldType' << 'wxRichTextFieldTypeStandard' << 'wxRichTextDrawingHandler'
22
22
  spec.make_abstract 'wxRichTextFieldType'
23
+ if Config.instance.wx_version >= '3.3.0'
24
+ # make Ruby director and wrappers use custom implementation
25
+ spec.use_class_implementation('wxRichTextFieldType', 'wxRubyRichTextFieldType')
26
+ spec.add_header_code <<~__HEREDOC
27
+ class wxRubyRichTextFieldType : public wxRichTextFieldType
28
+ {
29
+ public:
30
+ virtual ~wxRubyRichTextFieldType() {}
31
+ wxRubyRichTextFieldType(const wxString &name=wxEmptyString) : wxRichTextFieldType(name) {}
32
+ wxRubyRichTextFieldType(const wxRichTextFieldType &fieldType) : wxRichTextFieldType(fieldType) {}
33
+ virtual bool Draw(wxRichTextField *, wxDC &, wxRichTextDrawingContext &, const wxRichTextRange &, const wxRichTextSelection &, const wxRect &, int , int ) { return false; }
34
+ virtual bool Layout(wxRichTextField *, wxReadOnlyDC &, wxRichTextDrawingContext &, const wxRect &, const wxRect &, int) { return false; }
35
+ virtual bool GetRangeSize(wxRichTextField *, const wxRichTextRange &, wxSize &, int &, wxReadOnlyDC &, wxRichTextDrawingContext &, int, const wxPoint &, const wxSize &, wxArrayInt *) const { return false; }
36
+ };
37
+ __HEREDOC
38
+ end
23
39
  spec.no_proxy 'wxRichTextFontTable'
24
40
  spec.include 'wx/richtext/richtextstyles.h'
25
41
  spec.ignore %w[
@@ -120,6 +120,7 @@ module WXRuby3
120
120
  end
121
121
  if Config.instance.wx_version >= '3.3.0'
122
122
  spec.ignore_unless('WXMSW', 'wxWindow::MSWDisableComposited')
123
+ spec.ignore('wxWindow::GTKGetWin32Handle')
123
124
  end
124
125
  if Config.instance.features_set?('USE_ACCESSIBILITY')
125
126
  spec.disown 'wxAccessible *accessible'
@@ -315,6 +316,11 @@ module WXRuby3
315
316
  "#{spec.class_name(citem)}::WarpPointer",
316
317
  "#{spec.class_name(citem)}::AdjustForLayoutDirection",
317
318
  "#{spec.class_name(citem)}::IsTransparentBackgroundSupported")
319
+ if Config.instance.features_set?('USE_ACCESSIBILITY')
320
+ if Config.instance.wx_version > '3.2.4'
321
+ spec.no_proxy "#{spec.class_name(citem)}::CreateAccessible"
322
+ end
323
+ end
318
324
  end
319
325
  end
320
326
  if spec.module_name == 'wxWindow'
@@ -12,14 +12,14 @@ class TestGDIObjects < Test::Unit::TestCase
12
12
  frame = Wx::Frame.new(nil)
13
13
  frame.set_icon(ico)
14
14
  GC.start
15
- ico_cpy = frame.get_icon
15
+ ico_cpy = frame.get_icons.get_icon_by_index(0)
16
16
  GC.start
17
17
  assert(ico_cpy.ok?)
18
18
  assert_not_equal(ico.object_id, ico_cpy.object_id)
19
19
  ico = nil
20
20
  ico_cpy = nil
21
21
  GC.start
22
- ico_cpy = frame.get_icon
22
+ ico_cpy = frame.get_icons.get_icon_by_index(0)
23
23
  GC.start
24
24
  assert(ico_cpy.ok?)
25
25
  assert_not_equal(ico.object_id, ico_cpy.object_id)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wxruby3
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Corino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-15 00:00:00.000000000 Z
11
+ date: 2024-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.0'
75
+ version: '1.1'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.0'
82
+ version: '1.1'
83
83
  description: wxRuby3 is a Ruby library providing an extension for the wxWidgets C++
84
84
  UI framework
85
85
  email: mcorino@m2c-software.nl
@@ -425,6 +425,7 @@ files:
425
425
  - rakelib/lib/config/mingw.rb
426
426
  - rakelib/lib/config/pkgman/linux.rb
427
427
  - rakelib/lib/config/pkgman/macosx.rb
428
+ - rakelib/lib/config/pkgman/mingw.rb
428
429
  - rakelib/lib/config/unixish.rb
429
430
  - rakelib/lib/config/unknown.rb
430
431
  - rakelib/lib/core/include/client_data.inc
@@ -1190,7 +1191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1190
1191
  - !ruby/object:Gem::Version
1191
1192
  version: '0'
1192
1193
  requirements: []
1193
- rubygems_version: 3.5.9
1194
+ rubygems_version: 3.5.11
1194
1195
  signing_key:
1195
1196
  specification_version: 4
1196
1197
  summary: wxWidgets extension for Ruby