From 2ff73ca0debe94848fea6010288db66526aff697 Mon Sep 17 00:00:00 2001 From: Martin Corino Date: Fri, 1 May 2026 12:52:41 +0200 Subject: [PATCH 1/5] update for removal wxUSE_GEOMETRY in wxw >= 3.3.3 --- rakelib/lib/specs/interfaces.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rakelib/lib/specs/interfaces.rb b/rakelib/lib/specs/interfaces.rb index 1eab9e0d..593c9d2e 100644 --- a/rakelib/lib/specs/interfaces.rb +++ b/rakelib/lib/specs/interfaces.rb @@ -248,8 +248,8 @@ module WXRuby3 Director.Spec(pkg, 'wxPersistentWindow', requirements: %w[USE_CONFIG]) Director.Spec(pkg, 'wxSecretStore', requirements: %w[USE_SECRETSTORE]) Director.Spec(pkg, 'wxDCOverlay', director: Director::DerivedDC) - Director.Spec(pkg, 'wxGeometry', requirements: %w[USE_GEOMETRY]) - Director.Spec(pkg, 'wxAffineMatrix2D', requirements: %w[USE_GEOMETRY]) + Director.Spec(pkg, 'wxGeometry', requirements: Config.instance.wx_version_check('3.3.2') <= 0 ? %w[USE_GEOMETRY] : []) + Director.Spec(pkg, 'wxAffineMatrix2D', requirements: Config.instance.wx_version_check('3.3.2') <= 0 ? %w[USE_GEOMETRY] : []) Director.Spec(pkg, 'wxCredentialEntryDialog', director: Director::Dialog, requirements: %w[USE_CREDENTIALDLG]) Director.Spec(pkg, 'wxGenericAboutDialog', director: Director::Dialog, requirements: %w[USE_ABOUTDLG]) Director.Spec(pkg, 'wxMBConv') From 4bef119706fe7dc672bd328da2a93d2bde35729a Mon Sep 17 00:00:00 2001 From: Martin Corino Date: Fri, 1 May 2026 12:53:17 +0200 Subject: [PATCH 2/5] update for wxSVGFileDC additions in wxw >= 3.3.3 --- rakelib/lib/director/derived_dc.rb | 70 ++++++++++++++++-------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/rakelib/lib/director/derived_dc.rb b/rakelib/lib/director/derived_dc.rb index e5003c33..c4559fff 100644 --- a/rakelib/lib/director/derived_dc.rb +++ b/rakelib/lib/director/derived_dc.rb @@ -38,7 +38,7 @@ def setup } return rc; } - __HEREDOC + __HEREDOC # not relevant anymore spec.ignore 'wxScreenDC::StartDrawingOnTop', 'wxScreenDC::EndDrawingOnTop', @@ -82,14 +82,14 @@ def setup return Qfalse; #endif } - __HEREDOC + __HEREDOC spec.add_extend_code 'wxPaintDC', <<~__HEREDOC #include "wx/dcbuffer.h" static VALUE has_native_double_buffer() { return do_check_native_double_buffer(); } - __HEREDOC + __HEREDOC when 'wxMemoryDC' spec.items << 'wxBufferedDC' << 'wxBufferedPaintDC' spec.override_inheritance_chain('wxMemoryDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0 @@ -248,7 +248,7 @@ def setup __HEREDOC when 'wxSVGFileDC' spec.override_inheritance_chain('wxSVGFileDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0 - spec.items.concat %w[wxSVGBitmapHandler wxSVGBitmapFileHandler wxSVGBitmapEmbedHandler] + spec.items.concat %w[wxSVGBitmapHandler wxSVGBitmapFileHandler wxSVGBitmapEmbedHandler wxSVGAttributes] spec.make_abstract 'wxSVGFileDC' spec.ignore 'wxSVGFileDC::wxSVGFileDC' # like all DC this should best always be a temporary stack object @@ -284,6 +284,10 @@ def setup 'wxSVGFileDC::EndDoc', 'wxSVGFileDC::StartPage', 'wxSVGFileDC::EndPage' + # simplify/optimize mapping for wxSVGAttributes return values + spec.map 'wxSVGAttributes&' => 'Wx::SVGAttributes' do + map_out code: '$result = self; (void)$1;' # simply return the 'self' argument + end when 'wxGCDC' spec.override_inheritance_chain('wxGCDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0 spec.make_abstract 'wxGCDC' @@ -311,7 +315,7 @@ def setup } return rc; } - __HEREDOC + __HEREDOC end spec.add_extend_code 'wxGCDC', <<~__HEREDOC static VALUE draw_on() @@ -386,7 +390,7 @@ def setup } return rc; } - __HEREDOC + __HEREDOC spec.disown 'wxGraphicsContext *gc' spec.ignore 'wxGCDC::wxGCDC(const wxEnhMetaFileDC &)' when 'wxScaledDC' @@ -422,7 +426,7 @@ def setup return rc; } }; - __HEREDOC + __HEREDOC spec.swig_import %w[ext/wxruby3/swig/classes/include/wxObject.h ext/wxruby3/swig/classes/include/wxDC.h] spec.add_interface_code <<~__HEREDOC @@ -433,7 +437,7 @@ class wxScaledDC : public wxDC protected: wxScaledDC(wxDC& target, double scale); }; - __HEREDOC + __HEREDOC when 'wxPrinterDC' spec.override_inheritance_chain('wxPrinterDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0 spec.make_abstract 'wxPrinterDC' @@ -513,41 +517,41 @@ class wxScaledDC : public wxDC } return rc; } - __HEREDOC + __HEREDOC if Config.instance.wx_version_check('3.3.0') >= 0 spec.items << 'wxOverlayDC' spec.override_inheritance_chain('wxOverlayDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) spec.make_abstract 'wxOverlayDC' spec.ignore 'wxOverlayDC::wxOverlayDC' spec.add_extend_code 'wxOverlayDC', <<~__HEREDOC - static VALUE draw_on(wxOverlay &overlay, wxWindow *win) - { - if (!wxRuby_IsAppRunning()) - rb_raise(rb_eRuntimeError, "A running Wx::App is required."); - VALUE rc = Qnil; - if (rb_block_given_p ()) + static VALUE draw_on(wxOverlay &overlay, wxWindow *win) { - wxOverlayDC ovl_dc(overlay, win); - wxOverlayDC* ovl_dc_ptr = &ovl_dc; - VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0); - rc = rb_yield(rb_dc); + if (!wxRuby_IsAppRunning()) + rb_raise(rb_eRuntimeError, "A running Wx::App is required."); + VALUE rc = Qnil; + if (rb_block_given_p ()) + { + wxOverlayDC ovl_dc(overlay, win); + wxOverlayDC* ovl_dc_ptr = &ovl_dc; + VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0); + rc = rb_yield(rb_dc); + } + return rc; } - return rc; - } - static VALUE draw_on(wxOverlay &overlay, wxWindow *win, const wxRect &rect) - { - if (!wxRuby_IsAppRunning()) - rb_raise(rb_eRuntimeError, "A running Wx::App is required."); - VALUE rc = Qnil; - if (rb_block_given_p ()) + static VALUE draw_on(wxOverlay &overlay, wxWindow *win, const wxRect &rect) { - wxOverlayDC ovl_dc(overlay, win, rect); - wxOverlayDC* ovl_dc_ptr = &ovl_dc; - VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0); - rc = rb_yield(rb_dc); + if (!wxRuby_IsAppRunning()) + rb_raise(rb_eRuntimeError, "A running Wx::App is required."); + VALUE rc = Qnil; + if (rb_block_given_p ()) + { + wxOverlayDC ovl_dc(overlay, win, rect); + wxOverlayDC* ovl_dc_ptr = &ovl_dc; + VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ovl_dc_ptr), SWIGTYPE_p_wxOverlayDC, 0); + rc = rb_yield(rb_dc); + } + return rc; } - return rc; - } __HEREDOC end else From 3ad3d6d02eab7c8cae95daeebb94253e37ae4c37 Mon Sep 17 00:00:00 2001 From: Martin Corino Date: Fri, 1 May 2026 13:46:28 +0200 Subject: [PATCH 3/5] add install repo refresh --- tools/scripts/docker/setup-opensuse.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/scripts/docker/setup-opensuse.sh b/tools/scripts/docker/setup-opensuse.sh index 0738c3a4..284f8e35 100755 --- a/tools/scripts/docker/setup-opensuse.sh +++ b/tools/scripts/docker/setup-opensuse.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash +zypper ref --force zypper install -y git xorg-x11-server-Xvfb xvfb-run xauth xorg-x11-fonts which find curl gcc make tar gzip xz zlib-devel libyaml-devel libopenssl-devel libffi-devel readline-devel libwebp-devel libexpat-devel if [ "$1" == "test" ]; then zypper install -y gtk3 webkit2gtk3-devel libGLU1 gspell libnotify4 libsecret curl From 18ab53b70c58337328d784428f295fa2954b3a71 Mon Sep 17 00:00:00 2001 From: Martin Corino Date: Fri, 1 May 2026 13:54:15 +0200 Subject: [PATCH 4/5] force install resolutions --- tools/scripts/docker/setup-opensuse.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/scripts/docker/setup-opensuse.sh b/tools/scripts/docker/setup-opensuse.sh index 284f8e35..32696bce 100755 --- a/tools/scripts/docker/setup-opensuse.sh +++ b/tools/scripts/docker/setup-opensuse.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash zypper ref --force -zypper install -y git xorg-x11-server-Xvfb xvfb-run xauth xorg-x11-fonts which find curl gcc make tar gzip xz zlib-devel libyaml-devel libopenssl-devel libffi-devel readline-devel libwebp-devel libexpat-devel +zypper install -y --force-resolution git xorg-x11-server-Xvfb xvfb-run xauth xorg-x11-fonts which find curl gcc make tar gzip xz zlib-devel libyaml-devel libopenssl-devel libffi-devel readline-devel libwebp-devel libexpat-devel if [ "$1" == "test" ]; then - zypper install -y gtk3 webkit2gtk3-devel libGLU1 gspell libnotify4 libsecret curl + zypper install -y --force-resolution gtk3 webkit2gtk3-devel libGLU1 gspell libnotify4 libsecret curl fi From e6dc0d791842552ec3cb8331367f478b4f6ae8c9 Mon Sep 17 00:00:00 2001 From: Martin Corino Date: Fri, 1 May 2026 14:44:30 +0200 Subject: [PATCH 5/5] add version checks --- rakelib/lib/director/derived_dc.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/rakelib/lib/director/derived_dc.rb b/rakelib/lib/director/derived_dc.rb index c4559fff..cb1a0226 100644 --- a/rakelib/lib/director/derived_dc.rb +++ b/rakelib/lib/director/derived_dc.rb @@ -248,7 +248,10 @@ def setup __HEREDOC when 'wxSVGFileDC' spec.override_inheritance_chain('wxSVGFileDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0 - spec.items.concat %w[wxSVGBitmapHandler wxSVGBitmapFileHandler wxSVGBitmapEmbedHandler wxSVGAttributes] + spec.items.concat %w[wxSVGBitmapHandler wxSVGBitmapFileHandler wxSVGBitmapEmbedHandler] + if Config.instance.wx_version_check('3.3.2') > 0 + spec.items.concat %w[wxSVGAttributes] + end spec.make_abstract 'wxSVGFileDC' spec.ignore 'wxSVGFileDC::wxSVGFileDC' # like all DC this should best always be a temporary stack object @@ -284,9 +287,11 @@ def setup 'wxSVGFileDC::EndDoc', 'wxSVGFileDC::StartPage', 'wxSVGFileDC::EndPage' - # simplify/optimize mapping for wxSVGAttributes return values - spec.map 'wxSVGAttributes&' => 'Wx::SVGAttributes' do - map_out code: '$result = self; (void)$1;' # simply return the 'self' argument + if Config.instance.wx_version_check('3.3.2') > 0 + # simplify/optimize mapping for wxSVGAttributes return values + spec.map 'wxSVGAttributes&' => 'Wx::SVGAttributes' do + map_out code: '$result = self; (void)$1;' # simply return the 'self' argument + end end when 'wxGCDC' spec.override_inheritance_chain('wxGCDC', ['wxDC', { 'wxReadOnlyDC' => 'wxDC' }, 'wxObject']) if Config.instance.wx_version_check('3.3.0') >= 0