diff --git a/demo/SVGImage.py b/demo/SVGImage_Bitmap.py similarity index 97% rename from demo/SVGImage.py rename to demo/SVGImage_Bitmap.py index 7ab5b5db..6ae78f60 100644 --- a/demo/SVGImage.py +++ b/demo/SVGImage_Bitmap.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python import os import glob @@ -93,6 +92,9 @@ The wx.svg.SVGimage class provides the ability to load, parse and render Scalable Vector Graphics (SVG) files. The advantage of SVG files is that they can be used to create bitmaps of any size without loss of quality. +This sample demonstrates rasterizing an SVG image to wx.Bitmaps of various +sizes. + """ diff --git a/demo/SVGImage_Render.py b/demo/SVGImage_Render.py new file mode 100644 index 00000000..04f0aab5 --- /dev/null +++ b/demo/SVGImage_Render.py @@ -0,0 +1,117 @@ + +import os +import glob +import wx +from wx.svg import SVGimage + +#---------------------------------------------------------------------- + +class SVGRenderPanel(wx.Panel): + def __init__(self, parent): + wx.Panel.__init__(self, parent, style=wx.FULL_REPAINT_ON_RESIZE) + + self._renderer = None + self._img = None + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.SetBackgroundStyle(wx.BG_STYLE_PAINT) + + + def SetRenderer(self, renderer): + self._renderer = renderer + self.Refresh() + + + def SetSVGFile(self, svg_filename): + self._img = SVGimage.CreateFromFile(svg_filename) + self.Refresh() + + + def OnPaint(self, event): + dc = wx.PaintDC(self) + dc.Clear() + + iw, ih = (self._img.width, self._img.height) if self._img else (100,100) + dcdim = min(self.Size.width, self.Size.height) + imgdim = min(iw, ih) + scale = dcdim / imgdim + width = int(iw * scale) + height = int(ih * scale) + + dc.SetBrush(wx.Brush('white')) + dc.DrawRectangle(0,0, width, height) + + if self._renderer and self._img: + ctx = self._renderer.CreateContext(dc) + self._img.RenderToGC(ctx, scale) + + + +#---------------------------------------------------------------------- + +class TestPanel(wx.Panel): + def __init__(self, parent, log): + self.log = log + wx.Panel.__init__(self, parent, -1) + + self.listbox = wx.ListBox(self, style=wx.LB_SINGLE, size=(250, -1)) + self.listbox.AppendItems(glob.glob(os.path.join('data', '*.svg'))) + + self.renderPanel = SVGRenderPanel(self) + rightSizer = wx.BoxSizer(wx.VERTICAL) + rightSizer.Add(self.renderPanel, wx.SizerFlags(1).Expand()) + + self.Sizer = wx.BoxSizer(wx.HORIZONTAL) + self.Sizer.Add(self.listbox, wx.SizerFlags(1).Border(wx.ALL, 10).Expand()) + self.Sizer.Add(rightSizer, wx.SizerFlags(2).Border(wx.RIGHT|wx.BOTTOM|wx.TOP, 10).Expand()) + + self.Bind(wx.EVT_LISTBOX, self.OnSelectItem) + self.listbox.SetSelection(0) + + # TODO: Add ability for the user to select the renderer + if 'wxMSW' in wx.PlatformInfo: + renderer = wx.GraphicsRenderer.GetDirect2DRenderer() + # renderer = wx.GraphicsRenderer.GetCairoRenderer() + else: + renderer = wx.GraphicsRenderer.GetDefaultRenderer() + self.renderPanel.SetRenderer(renderer) + + # Load the first SVG in the list into the static bitmaps + self.renderPanel.SetSVGFile(self.listbox.GetString(0)) + + + def OnSelectItem(self, evt): + filename = self.listbox.GetStringSelection() + self.renderPanel.SetSVGFile(filename) + + +#---------------------------------------------------------------------- + +def runTest(frame, nb, log): + win = TestPanel(nb, log) + return win + +#---------------------------------------------------------------------- + + + +overview = """ +

SVGImage

+ +The wx.svg.SVGimage class provides the ability to load, parse and render +Scalable Vector Graphics (SVG) files. The advantage of SVG files is that +they can be used to create bitmaps of any size without loss of quality. + +This sample demonstrates rendering an SVG image directly on to a +wx.GraphicsContext using the GC's daring capabilities. + + +""" + + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) + diff --git a/demo/demodata.py b/demo/demodata.py index cd20b1b1..e109edcb 100644 --- a/demo/demodata.py +++ b/demo/demodata.py @@ -24,10 +24,10 @@ _demoPngs = ["overview", "recent", "frame", "dialog", "moredialog", "core", # # _treeList # -# These are the Demo Catagory Headers +# These are the Demo Category Headers # and Demo Module Names(Ex: Frame.py without ext) # -# ('Demo Catagory Name String', [ +# ('Demo Category Name String', [ # 'DemoModuleName1', # 'DemoModuleName2', # 'Etc', @@ -44,7 +44,8 @@ _treeList = [ 'TreeListCtrl', 'NotificationMessage', 'AddPrivateFont', - 'SVGImage', + 'SVGImage_Bitmap', + 'SVGImage_Render', ]), # managed windows == things with a (optional) caption you can close @@ -255,7 +256,8 @@ _treeList = [ 'Img2PyArtProvider', 'Mask', 'RawBitmapAccess', - 'SVGImage', + 'SVGImage_Bitmap', + 'SVGImage_Render', 'Throbber', ]), @@ -266,7 +268,6 @@ _treeList = [ 'Cairo', 'Cairo_Snippets', 'ColourDB', - ##'DialogUnits', # needs more explanations 'DragScroller', 'DrawXXXList', 'FileHistory', @@ -290,7 +291,8 @@ _treeList = [ 'ShapedWindow', 'Sound', 'StandardPaths', - 'SVGImage', + 'SVGImage_Bitmap', + 'SVGImage_Render', 'SystemSettings', 'ToolTip', 'UIActionSimulator',