File: Mask.py

package info (click to toggle)
wxpython3.0 3.0.1.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 481,208 kB
  • ctags: 520,541
  • sloc: cpp: 2,126,470; python: 293,214; makefile: 51,927; ansic: 19,032; sh: 3,011; xml: 1,629; perl: 17
file content (136 lines) | stat: -rw-r--r-- 4,076 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136

import  wx

#----------------------------------------------------------------------

logicList = [
    ('wx.AND', wx.AND),
    ('wx.AND_INVERT', wx.AND_INVERT),
    ('wx.AND_REVERSE', wx.AND_REVERSE),
    ('wx.CLEAR', wx.CLEAR),
    ('wx.COPY', wx.COPY),
    ('wx.EQUIV', wx.EQUIV),
    ('wx.INVERT', wx.INVERT),
    ('wx.NAND', wx.NAND),

    ('wx.NO_OP', wx.NO_OP),
    ('wx.OR', wx.OR),
    ('wx.OR_INVERT', wx.OR_INVERT),
    ('wx.OR_REVERSE', wx.OR_REVERSE),
    ('wx.SET', wx.SET),
    ('wx.SRC_INVERT', wx.SRC_INVERT),
    ('wx.XOR', wx.XOR),
]

if 'mac-cg' in wx.PlatformInfo:
    # that's all, folks!
    logicList = [
        ('wx.COPY', wx.COPY),
        ('wx.INVERT', wx.INVERT),
        ('wx.XOR', wx.XOR),
    ]    

import images

class TestMaskWindow(wx.ScrolledWindow):
    def __init__(self, parent):
        wx.ScrolledWindow.__init__(self, parent, -1)
        self.SetBackgroundColour(wx.Colour(0,128,0))

        # A reference bitmap that we won't mask
        self.bmp_nomask  = images.TestStar2.GetBitmap()

        # One that we will
        self.bmp_withmask  = images.TestStar2.GetBitmap()

        # this mask comes from a monochrome bitmap
        self.bmp_themask = images.TestMask.GetBitmap()
        mask = wx.Mask(self.bmp_themask)

        # set the mask on our bitmap
        self.bmp_withmask.SetMask(mask)

        # Now we'll create a mask in a bit of an easier way, by picking a
        # colour in the image that is to be the transparent colour.
        self.bmp_withcolourmask  = images.TestStar2.GetBitmap()
        mask = wx.Mask(self.bmp_withcolourmask, wx.WHITE)
        self.bmp_withcolourmask.SetMask(mask)

        self.SetScrollbars(20, 20, 700/20, 460/20)

        self.Bind(wx.EVT_PAINT, self.OnPaint)


    def OnPaint (self, e):
        self.SetBackgroundColour(wx.Colour(0,128,0))
        dc = wx.PaintDC(self)
        self.PrepareDC(dc)
        dc.SetTextForeground(wx.WHITE)

        # make an interesting background...
        dc.SetPen(wx.MEDIUM_GREY_PEN)
        for i in range(100):
            dc.DrawLine(0,i*10, i*10,0)

        # draw raw image, mask, and masked images
        dc.DrawText('original image', 0,0)
        dc.DrawBitmap(self.bmp_nomask, 0,20, 0)
        dc.DrawText('with colour mask', 0,100)
        dc.DrawBitmap(self.bmp_withcolourmask, 0,120, 1)
        dc.DrawText('the mask image', 0,200)
        dc.DrawBitmap(self.bmp_themask, 0,220, 0)
        dc.DrawText('masked image', 0,300)
        dc.DrawBitmap(self.bmp_withmask, 0,320, 1)

        cx,cy = self.bmp_themask.GetWidth(), self.bmp_themask.GetHeight()

        # draw array of assorted blit operations
        mdc = wx.MemoryDC()
        i = 0

        for text, code in logicList:
            x,y = 120+150*(i%4), 20+100*(i/4)
            dc.DrawText(text, x, y-20)
            mdc.SelectObject(self.bmp_withcolourmask)
            dc.Blit(x,y, cx,cy, mdc, 0,0, code, True)
            i = i + 1


# On wxGTK there needs to be a panel under wx.ScrolledWindows if they are
# going to be in a wxNotebook...
class TestPanel(wx.Panel):
    def __init__(self, parent, ID):
        wx.Panel.__init__(self, parent, ID)
        self.win = TestMaskWindow(self)
        self.Bind(wx.EVT_SIZE, self.OnSize)

    def OnSize(self, evt):
        self.win.SetSize(evt.GetSize())


#----------------------------------------------------------------------

def runTest(frame, nb, log):
    win = TestPanel(nb, -1)
    return win

#----------------------------------------------------------------------


overview = """\
This class encapsulates a monochrome mask bitmap, where the masked area is black 
and the unmasked area is white. When associated with a bitmap and drawn in a device 
context, the unmasked area of the bitmap will be drawn, and the masked area will 
not be drawn.

This example shows not only how to create a Mask, but the effects of the Device
Context (dc) <code>Blit()</code> method's logic codes.
"""



if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])