From 7c7a7eea626050ab650348873087c1bb958f679c Mon Sep 17 00:00:00 2001 From: udifuchs Date: Thu, 13 Nov 2025 15:40:58 -0600 Subject: [PATCH] Populate wx.svg with _nanosvg enum values. This is for compatibility with wxpython 4.2.2 and any version compiled with cython 3.1. Added test cases for these enum values. --- unittests/test_dcsvg.py | 38 +++++++++++++++++++++++++++++++++++++- wx/svg/_nanosvg.pyx | 9 +++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/unittests/test_dcsvg.py b/unittests/test_dcsvg.py index fa68eb08..cf03501d 100644 --- a/unittests/test_dcsvg.py +++ b/unittests/test_dcsvg.py @@ -1,7 +1,7 @@ import unittest from unittests import wtc import wx -import sys +import wx.svg import os fileName = 'svgtest.svg' @@ -15,8 +15,44 @@ class SvgDCTests(wtc.WidgetTestCase): dc.DrawLine(0,0, 50,50) del dc + self.img = wx.svg.SVGimage.CreateFromFile(fileName) + + dc = wx.ClientDC(self.frame) + dc.SetBackground(wx.Brush('white')) + dc.Clear() + + dcdim = min(self.frame.Size.width, self.frame.Size.height) + imgdim = min(self.img.width, self.img.height) + scale = dcdim / imgdim + + ctx = wx.GraphicsContext.Create(dc) + self.img.RenderToGC(ctx, scale) + os.remove(fileName) + def test_SvgDC2(self): + assert wx.svg.SVGpaintType.SVG_PAINT_NONE == wx.svg.SVG_PAINT_NONE + assert wx.svg.SVGpaintType.SVG_PAINT_COLOR == wx.svg.SVG_PAINT_COLOR + assert wx.svg.SVGpaintType.SVG_PAINT_LINEAR_GRADIENT == wx.svg.SVG_PAINT_LINEAR_GRADIENT + assert wx.svg.SVGpaintType.SVG_PAINT_RADIAL_GRADIENT == wx.svg.SVG_PAINT_RADIAL_GRADIENT + + assert wx.svg.SVGspreadType.SVG_SPREAD_PAD == wx.svg.SVG_SPREAD_PAD + assert wx.svg.SVGspreadType.SVG_SPREAD_REFLECT == wx.svg.SVG_SPREAD_REFLECT + assert wx.svg.SVGspreadType.SVG_SPREAD_REPEAT == wx.svg.SVG_SPREAD_REPEAT + + assert wx.svg.SVGlineJoin.SVG_JOIN_MITER == wx.svg.SVG_JOIN_MITER + assert wx.svg.SVGlineJoin.SVG_JOIN_ROUND == wx.svg.SVG_JOIN_ROUND + assert wx.svg.SVGlineJoin.SVG_JOIN_BEVEL == wx.svg.SVG_JOIN_BEVEL + + assert wx.svg.SVGlineCap.SVG_CAP_BUTT == wx.svg.SVG_CAP_BUTT + assert wx.svg.SVGlineCap.SVG_CAP_ROUND == wx.svg.SVG_CAP_ROUND + assert wx.svg.SVGlineCap.SVG_CAP_SQUARE == wx.svg.SVG_CAP_SQUARE + + assert wx.svg.SVGfillRule.SVG_FILLRULE_NONZERO == wx.svg.SVG_FILLRULE_NONZERO + assert wx.svg.SVGfillRule.SVG_FILLRULE_EVENODD == wx.svg.SVG_FILLRULE_EVENODD + + assert wx.svg.SVGflags.SVG_FLAGS_VISIBLE == wx.svg.SVG_FLAGS_VISIBLE + #--------------------------------------------------------------------------- diff --git a/wx/svg/_nanosvg.pyx b/wx/svg/_nanosvg.pyx index 3dbb1adb..db354318 100644 --- a/wx/svg/_nanosvg.pyx +++ b/wx/svg/_nanosvg.pyx @@ -77,6 +77,15 @@ cpdef enum SVGfillRule: cpdef enum SVGflags: SVG_FLAGS_VISIBLE = NSVG_FLAGS_VISIBLE +# Populate the module namespace with enum values to keep compatibility with packages +# compiled with cython > 3.1 (see https://github.com/cython/cython/issues/4571) +globals().update(getattr(SVGpaintType, "__members__")) +globals().update(getattr(SVGspreadType, "__members__")) +globals().update(getattr(SVGlineJoin, "__members__")) +globals().update(getattr(SVGlineCap, "__members__")) +globals().update(getattr(SVGfillRule, "__members__")) +globals().update(getattr(SVGflags, "__members__")) + #---------------------------------------------------------------------------- # Cython classes for wrapping the nanosvg structs