X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c6281ceb776325251aa119c7b496e6152303996a..299647acac7960652aadb008775429c1f8ea9b8d:/wxPython/demo/Mask.py diff --git a/wxPython/demo/Mask.py b/wxPython/demo/Mask.py new file mode 100644 index 0000000000..8d5a43c58b --- /dev/null +++ b/wxPython/demo/Mask.py @@ -0,0 +1,135 @@ +# 11/20/2003 - Jeff Grimmett (grimmtooth@softhome.net) +# +# o Updated for wx namespace +# + +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), + + # this one causes an assert on wxGTK, and doesn't seem to + # do much on MSW anyway, so I'll just take it out.... + #('wxNOR', wxNOR), + + ('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), +] + +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.getTestStar2Bitmap() + + # One that we will + self.bmp_withmask = images.getTestStar2Bitmap() + + # this mask comes from a monochrome bitmap + self.bmp_themask = wx.BitmapFromImage(images.getTestMaskImage(), 1) + 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.getTestStar2Bitmap() + mask = wx.MaskColour(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): + 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) Blit() method's logic codes. +""" + + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])]) +