]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/Mask.py
Make all wxMask constructors use the C++ (bitmap, colour) ctor, and
[wxWidgets.git] / wxPython / demo / Mask.py
1
2 import wx
3
4 #----------------------------------------------------------------------
5
6 logicList = [
7 ('wx.AND', wx.AND),
8 ('wx.AND_INVERT', wx.AND_INVERT),
9 ('wx.AND_REVERSE', wx.AND_REVERSE),
10 ('wx.CLEAR', wx.CLEAR),
11 ('wx.COPY', wx.COPY),
12 ('wx.EQUIV', wx.EQUIV),
13 ('wx.INVERT', wx.INVERT),
14 ('wx.NAND', wx.NAND),
15
16 # this one causes an assert on wxGTK, and doesn't seem to
17 # do much on MSW anyway, so I'll just take it out....
18 #('wxNOR', wxNOR),
19
20 ('wx.NO_OP', wx.NO_OP),
21 ('wx.OR', wx.OR),
22 ('wx.OR_INVERT', wx.OR_INVERT),
23 ('wx.OR_REVERSE', wx.OR_REVERSE),
24 ('wx.SET', wx.SET),
25 ('wx.SRC_INVERT', wx.SRC_INVERT),
26 ('wx.XOR', wx.XOR),
27 ]
28
29 import images
30
31 class TestMaskWindow(wx.ScrolledWindow):
32 def __init__(self, parent):
33 wx.ScrolledWindow.__init__(self, parent, -1)
34 self.SetBackgroundColour(wx.Colour(0,128,0))
35
36 # A reference bitmap that we won't mask
37 self.bmp_nomask = images.getTestStar2Bitmap()
38
39 # One that we will
40 self.bmp_withmask = images.getTestStar2Bitmap()
41
42 # this mask comes from a monochrome bitmap
43 self.bmp_themask = images.getTestMaskBitmap()
44 mask = wx.Mask(self.bmp_themask)
45
46 # set the mask on our bitmap
47 self.bmp_withmask.SetMask(mask)
48
49 # Now we'll create a mask in a bit of an easier way, by picking a
50 # colour in the image that is to be the transparent colour.
51 self.bmp_withcolourmask = images.getTestStar2Bitmap()
52 mask = wx.MaskColour(self.bmp_withcolourmask, wx.WHITE)
53 self.bmp_withcolourmask.SetMask(mask)
54
55 self.SetScrollbars(20, 20, 700/20, 460/20)
56
57 self.Bind(wx.EVT_PAINT, self.OnPaint)
58
59
60 def OnPaint (self, e):
61 dc = wx.PaintDC(self)
62 self.PrepareDC(dc)
63 dc.SetTextForeground(wx.WHITE)
64
65 # make an interesting background...
66 dc.SetPen(wx.MEDIUM_GREY_PEN)
67 for i in range(100):
68 dc.DrawLine((0,i*10), (i*10,0))
69
70 # draw raw image, mask, and masked images
71 dc.DrawText('original image', (0,0))
72 dc.DrawBitmap(self.bmp_nomask, (0,20), 0)
73 dc.DrawText('with colour mask', (0,100))
74 dc.DrawBitmap(self.bmp_withcolourmask, (0,120), 1)
75 dc.DrawText('the mask image', (0,200))
76 dc.DrawBitmap(self.bmp_themask, (0,220), 0)
77 dc.DrawText('masked image', (0,300))
78 dc.DrawBitmap(self.bmp_withmask, (0,320), 1)
79
80 cx,cy = self.bmp_themask.GetWidth(), self.bmp_themask.GetHeight()
81
82 # draw array of assorted blit operations
83 mdc = wx.MemoryDC()
84 i = 0
85
86 for text, code in logicList:
87 x,y = 120+150*(i%4), 20+100*(i/4)
88 dc.DrawText(text, (x, y-20))
89 mdc.SelectObject(self.bmp_withcolourmask)
90 dc.Blit((x,y), (cx,cy), mdc, (0,0), code, True)
91 i = i + 1
92
93
94 # On wxGTK there needs to be a panel under wx.ScrolledWindows if they are
95 # going to be in a wxNotebook...
96 class TestPanel(wx.Panel):
97 def __init__(self, parent, ID):
98 wx.Panel.__init__(self, parent, ID)
99 self.win = TestMaskWindow(self)
100 self.Bind(wx.EVT_SIZE, self.OnSize)
101
102 def OnSize(self, evt):
103 self.win.SetSize(evt.GetSize())
104
105
106 #----------------------------------------------------------------------
107
108 def runTest(frame, nb, log):
109 win = TestPanel(nb, -1)
110 return win
111
112 #----------------------------------------------------------------------
113
114
115 overview = """\
116 This class encapsulates a monochrome mask bitmap, where the masked area is black
117 and the unmasked area is white. When associated with a bitmap and drawn in a device
118 context, the unmasked area of the bitmap will be drawn, and the masked area will
119 not be drawn.
120
121 This example shows not only how to create a Mask, but the effects of the Device
122 Context (dc) <code>Blit()</code> method's logic codes.
123 """
124
125
126
127 if __name__ == '__main__':
128 import sys,os
129 import run
130 run.main(['', os.path.basename(sys.argv[0])])
131