]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/DrawXXXList.py
fix patch #693600
[wxWidgets.git] / wxPython / demo / DrawXXXList.py
CommitLineData
9d37f964
RD
1
2from wxPython.wx import *
3import whrandom, time
4
5#----------------------------------------------------------------------
6
7colours = [
8 "BLACK",
9 "BLUE",
10 "BLUE VIOLET",
11 "BROWN",
12 "CYAN",
13 "DARK GREY",
14 "DARK GREEN",
15 "GOLD",
16 "GREY",
17 "GREEN",
18 "MAGENTA",
19 "NAVY",
20 "PINK",
21 "RED",
22 "SKY BLUE",
23 "VIOLET",
24 "YELLOW",
25 ]
26
27#----------------------------------------------------------------------
28
29def makeRandomPoints(num, w, h):
30 pnts = []
31 for i in range(num):
32 x = whrandom.randint(0, w)
33 y = whrandom.randint(0, h)
34 pnts.append( (x,y) )
35 return pnts
36
37
38def makeRandomLines(num, w, h):
39 pnts = []
40 for i in range(num):
41 x1 = whrandom.randint(0, w)
42 y1 = whrandom.randint(0, h)
43 x2 = whrandom.randint(0, w)
44 y2 = whrandom.randint(0, h)
45 pnts.append( (x1,y1, x2,y2) )
46 return pnts
47
48
49def makeRandomPens(num, cache):
50 pens = []
51 for i in range(num):
52 c = whrandom.choice(colours)
53 t = whrandom.randint(1, 4)
54 if not cache.has_key( (c, t) ):
55 cache[(c, t)] = wxPen(c, t)
56 pens.append( cache[(c, t)] )
57 return pens
58
59
60class TestPanel(wxPanel):
61 def __init__(self, parent, size, log):
62 wxPanel.__init__(self, parent, -1, size=size)
63 self.log = log
64 self.SetBackgroundColour(wxWHITE)
65
66 w = size.width
67 h = size.height
68 pencache = {}
69
70 # make some lists of random points
71 self.pnts1 = makeRandomPoints(1000, w, h)
72 self.pnts2 = makeRandomPoints(1000, w, h)
73 self.pnts3 = makeRandomPoints(1000, w, h)
74 self.pens1 = makeRandomPens(1000, pencache)
75
76 # and now some lines
77 self.lines1 = makeRandomLines(500, w, h)
78 self.lines2 = makeRandomLines(500, w, h)
79 self.lines3 = makeRandomLines(500, w, h)
80 self.pens2 = makeRandomPens(500, pencache)
81
82 EVT_PAINT(self, self.OnPaint)
83
84
85 def OnPaint(self, evt):
86 dc = wxPaintDC(self)
87 dc.BeginDrawing()
88 start = time.time()
89
90 dc.SetPen(wxPen("BLACK", 1))
91 dc.DrawPointList(self.pnts1)
92 dc.DrawPointList(self.pnts2, wxPen("RED", 2))
93 dc.DrawPointList(self.pnts3, self.pens1)
94
95 dc.SetPen(wxPen("BLACK", 1))
96 dc.DrawLineList(self.lines1)
97 dc.DrawLineList(self.lines2, wxPen("RED", 2))
98 dc.DrawLineList(self.lines3, self.pens2)
99
100 dc.EndDrawing()
101 self.log.write("DrawTime: %s seconds\n" % (time.time() - start))
102 self.log.write("GetBoundingBox: %s\n" % (dc.GetBoundingBox(), ))
103
104#----------------------------------------------------------------------
105
106def runTest(frame, nb, log):
107 w = nb.GetClientSize().width
108 h = nb.GetClientSize().height
109 if w < 300: w = 300
110 if h < 300: h = 300
0e947004
RD
111 win = wxPanel(nb, -1)
112 tp = TestPanel(win, wxSize(w, h), log)
113 def OnPanelSize(evt, tp=tp):
114 tp.SetSize(evt.GetSize())
115 EVT_SIZE(win, OnPanelSize)
9d37f964
RD
116 return win
117
118#----------------------------------------------------------------------
119
120
121overview = """\
122
123Some methods have been added to wxDC to help with optimization of
124drawing routines. Currently they are:
125
126<pre>
127 DrawPointList(sequence, pens=None)
128</pre>
129 Where sequence is a tuple, list, whatever of 2 element tuples
130 (x, y) and pens is either None, a single pen or a list of pens.
131
132<pre>
133 DrawLineList(sequence, pens=None)
134</pre>
135 Where sequence is a tuple, list, whatever of 4 element tuples
136 (x1,y1, x2,y2) andd pens is either None, a single pen or a list
137 of pens.
138
139"""