File: Mask.py

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (136 lines) | stat: -rw-r--r-- 4,116 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env python

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 'wxMac' in wx.PlatformInfo:
    # that's all, folks!
    logicList = [
        ('wx.COPY', wx.COPY),
        ('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.GetImage().ConvertToMonoBitmap(red=255, green=255, blue=255)
        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, int(y-20))
            mdc.SelectObject(self.bmp_withcolourmask)
            dc.Blit(x,int(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:])