Make updates for recent changes on CVS HEAD. Remove or workaround deprecated items. Fix compile errors. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45088 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			147 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
import wx
 | 
						|
import colorsys
 | 
						|
from math import cos, sin, radians
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
BASE  = 80.0    # sizes used in shapes drawn below
 | 
						|
BASE2 = BASE/2
 | 
						|
BASE4 = BASE/4
 | 
						|
 | 
						|
 | 
						|
class TestPanel(wx.Panel):
 | 
						|
    def __init__(self, parent, log):
 | 
						|
        self.log = log
 | 
						|
        wx.Panel.__init__(self, parent, -1)
 | 
						|
 | 
						|
        self.Bind(wx.EVT_PAINT, self.OnPaint)
 | 
						|
 | 
						|
    def OnPaint(self, evt):
 | 
						|
        dc = wx.PaintDC(self)
 | 
						|
        try:
 | 
						|
            gc = wx.GraphicsContext.Create(dc)
 | 
						|
        except NotImplementedError:
 | 
						|
            dc.DrawText("This build of wxPython does not support the wx.GraphicsContext "
 | 
						|
                        "family of classes.",
 | 
						|
                        25, 25)
 | 
						|
            return
 | 
						|
 | 
						|
        font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
 | 
						|
        font.SetWeight(wx.BOLD)
 | 
						|
        gc.SetFont(font)
 | 
						|
 | 
						|
        # make a path that contains a circle and some lines, centered at 0,0
 | 
						|
        path = gc.CreatePath()
 | 
						|
        path.AddCircle(0, 0, BASE2)
 | 
						|
        path.MoveToPoint(0, -BASE2)
 | 
						|
        path.AddLineToPoint(0, BASE2)
 | 
						|
        path.MoveToPoint(-BASE2, 0)
 | 
						|
        path.AddLineToPoint(BASE2, 0)
 | 
						|
        path.CloseSubpath()
 | 
						|
        path.AddRectangle(-BASE4, -BASE4/2, BASE2, BASE4)
 | 
						|
 | 
						|
 | 
						|
        # Now use that path to demonstrate various capbilites of the grpahics context
 | 
						|
        gc.PushState()             # save current translation/scale/other state 
 | 
						|
        gc.Translate(60, 75)       # reposition the context origin
 | 
						|
 | 
						|
        gc.SetPen(wx.Pen("navy", 1))
 | 
						|
        gc.SetBrush(wx.Brush("pink"))
 | 
						|
 | 
						|
        # show the difference between stroking, filling and drawing
 | 
						|
        for label, PathFunc in [("StrokePath", gc.StrokePath),
 | 
						|
                                ("FillPath",   gc.FillPath),
 | 
						|
                                ("DrawPath",   gc.DrawPath)]:
 | 
						|
            if "wxGTK" in wx.PlatformInfo:
 | 
						|
                w, h = dc.GetTextExtent(label) # NYI in Cairo context
 | 
						|
            else:
 | 
						|
                w, h = gc.GetTextExtent(label)
 | 
						|
 | 
						|
            gc.DrawText(label, -w/2, -BASE2-h)
 | 
						|
            PathFunc(path)
 | 
						|
            gc.Translate(2*BASE, 0)
 | 
						|
 | 
						|
            
 | 
						|
        gc.PopState()              # restore saved state
 | 
						|
        gc.PushState()             # save it again
 | 
						|
        gc.Translate(60, 200)      # offset to the lower part of the window
 | 
						|
        
 | 
						|
        gc.DrawText("Scale", 0, -BASE2)
 | 
						|
        gc.Translate(0, 20)
 | 
						|
 | 
						|
        # for testing clipping
 | 
						|
        #gc.Clip(0, 0, 100, 100)
 | 
						|
        #rgn = wx.RegionFromPoints([ (0,0), (75,0), (75,25,), (100, 25),
 | 
						|
        #                            (100,100), (0,100), (0,0)  ])
 | 
						|
        #gc.ClipRegion(rgn)
 | 
						|
        #gc.ResetClip()
 | 
						|
        
 | 
						|
        gc.SetBrush(wx.Brush(wx.Colour(178,  34,  34, 128)))   # 128 == half transparent
 | 
						|
        for cnt in range(8):
 | 
						|
            gc.Scale(1.08, 1.08)    # increase scale by 8%
 | 
						|
            gc.Translate(5,5)     
 | 
						|
            gc.DrawPath(path)
 | 
						|
 | 
						|
 | 
						|
        gc.PopState()              # restore saved state
 | 
						|
        gc.PushState()             # save it again
 | 
						|
        gc.Translate(400, 200)
 | 
						|
        gc.DrawText("Rotate", 0, -BASE2)
 | 
						|
        
 | 
						|
        gc.Translate(0, 75)
 | 
						|
        for angle in range(0, 360, 30):
 | 
						|
            gc.PushState()         # save this new current state so we can pop back to 
 | 
						|
                                   # it at the end of the loop
 | 
						|
            r, g, b = [int(c * 255) for c in colorsys.hsv_to_rgb(float(angle)/360, 1, 1)]
 | 
						|
            gc.SetBrush(wx.Brush(wx.Colour(r, g, b, 64)))
 | 
						|
 | 
						|
            # use translate to artfully reposition each drawn path
 | 
						|
            gc.Translate(1.5 * BASE2 * cos(radians(angle)),
 | 
						|
                         1.5 * BASE2 * sin(radians(angle)))
 | 
						|
 | 
						|
            # use Rotate to rotate the path
 | 
						|
            gc.Rotate(radians(angle))
 | 
						|
 | 
						|
            # now draw it
 | 
						|
            gc.DrawPath(path)
 | 
						|
            gc.PopState()
 | 
						|
 | 
						|
        gc.PopState()
 | 
						|
        
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
def runTest(frame, nb, log):
 | 
						|
    win = TestPanel(nb, log)
 | 
						|
    return win
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
 | 
						|
overview = """<html><body>
 | 
						|
<h2><center>wx.GraphicsContext and wx.GraphicsPath</center></h2>
 | 
						|
 | 
						|
The new advanced 2D drawing API is implemented via the
 | 
						|
wx.GraphicsContext and wx.GraphicsPath classes.  They wrap GDI+ on
 | 
						|
Windows, Cairo on wxGTK and CoreGraphics on OS X.  They allow
 | 
						|
path-based drawing with alpha-blending and anti-aliasing, and use a
 | 
						|
floating point cooridnate system.
 | 
						|
 | 
						|
<p>When viewing this sample pay attention to how the rounded edges are
 | 
						|
smoothed with anti-aliased drawing, and how the shapes on the lower
 | 
						|
half of the window are partially transparent, allowing you to see what
 | 
						|
was drawn before.
 | 
						|
 | 
						|
</body></html>
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    import sys,os
 | 
						|
    import run
 | 
						|
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 | 
						|
 |