From 0a771ad404b2537b3f0bac0dee1baced46eb7e5e Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 17 May 2022 18:48:46 -0700 Subject: [PATCH] Transfer ownership in wx.BitmapBundle.FromImpl Add unittest for wx.BitmapBundleImpl --- etg/bmpbndl.py | 1 + unittests/test_bmpbndl.py | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/etg/bmpbndl.py b/etg/bmpbndl.py index a1d54c1d..0b502a24 100644 --- a/etg/bmpbndl.py +++ b/etg/bmpbndl.py @@ -39,6 +39,7 @@ def run(): assert isinstance(c, etgtools.ClassDef) c.find('FromSVG').findOverload('char *data, const wxSize &sizeDef').ignore() + c.find('FromImpl.impl').transfer = True # Allow on-the-fly creation of a wx.BitmapBundle from a wx.Bitmap, wx.Icon # or a wx.Image diff --git a/unittests/test_bmpbndl.py b/unittests/test_bmpbndl.py index d6882ebb..7be34aae 100644 --- a/unittests/test_bmpbndl.py +++ b/unittests/test_bmpbndl.py @@ -4,7 +4,7 @@ import wx import os icoFile = os.path.join(os.path.dirname(__file__), 'mondrian.ico') -pngFile = os.path.join(os.path.dirname(__file__), 'pointy.png') +pngFile = os.path.join(os.path.dirname(__file__), 'toucan.png') #--------------------------------------------------------------------------- @@ -35,7 +35,7 @@ class bmpbndl_Tests(wtc.WidgetTestCase): self.assertTrue( bb.IsOk() ) b = bb.GetBitmap((32,32)) self.assertTrue(b.IsOk()) - self.assertEquals(b.GetSize(), wx.Size(32,32)) + self.assertEqual(b.GetSize(), wx.Size(32,32)) def test_BitmapBundle_ImplicitCtor(self): "Ensure that a wx.Bitmap can still be used where a wx.BitmapBundle is needed" @@ -44,6 +44,39 @@ class bmpbndl_Tests(wtc.WidgetTestCase): btn.SetBitmap(bmp) + def test_BitmapBundleImpl(self): + "Test deriving a new class from wx.BitmapBundleImpl" + class MyCustomBitmapBundleImpl(wx.BitmapBundleImpl): + def __init__(self): + super().__init__() + self.img = wx.Image(pngFile) + self.size = self.img.GetSize() + + def GetDefaultSize(self): + # Report the best or default size for the bitmap + return self.size + + def GetPreferredBitmapSizeAtScale(self, scale): + # Return the size of the bitmap at the given display scale. It + # doesn't need to be size*scale if there are unscaled bitmaps + # near that size. + return self.size * scale + + def GetBitmap(self, size): + # Return the version of the bitmap at the desired size + img = self.img.Scale(size.width, size.height) + return wx.Bitmap(img) + + bb = wx.BitmapBundle.FromImpl(MyCustomBitmapBundleImpl()) + self.assertTrue( bb.IsOk() ) + b = bb.GetBitmap((32,32)) + self.assertTrue(b.IsOk()) + self.assertEqual(b.GetSize(), wx.Size(32,32)) + b = bb.GetBitmap((48,48)) + self.assertTrue(b.IsOk()) + self.assertEqual(b.GetSize(), wx.Size(48,48)) + + #--------------------------------------------------------------------------- if __name__ == '__main__':