]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/ShapedWindow.py
2 from wxPython
.wx
import *
5 #----------------------------------------------------------------------
7 class TestFrame(wxFrame
):
8 def __init__(self
, parent
, log
):
10 wxFrame
.__init
__(self
, parent
, -1, "Shaped Window",
19 self
.delta
= wxPoint(0,0)
21 EVT_LEFT_DCLICK(self
, self
.OnDoubleClick
)
22 EVT_LEFT_DOWN(self
, self
.OnLeftDown
)
23 EVT_LEFT_UP(self
, self
.OnLeftUp
)
24 EVT_MOTION(self
, self
.OnMouseMove
)
25 EVT_RIGHT_UP(self
, self
.OnExit
)
26 EVT_PAINT(self
, self
.OnPaint
)
28 self
.bmp
= images
.getTuxBitmap()
29 w
, h
= self
.bmp
.GetWidth(), self
.bmp
.GetHeight()
30 self
.SetClientSize( (w
, h
) )
32 if wxPlatform
!= "__WXMAC__":
33 # wxMac clips the tooltip to the window shape, YUCK!!!
34 self
.SetToolTipString("Right-click to close the window\n"
35 "Double-click the image to set/unset the window shape")
37 if wxPlatform
== "__WXGTK__":
38 # wxGTK requires that the window be created before you can
39 # set its shape, so delay the call to SetWindowShape until
41 EVT_WINDOW_CREATE(self
, self
.SetWindowShape
)
43 # On wxMSW and wxMac the window has already been created, so go for it.
47 dc
.DrawBitmap(self
.bmp
, 0,0, True)
50 def SetWindowShape(self
, *evt
):
51 # Use the bitmap's mask to determine the region
52 r
= wxRegionFromBitmap(self
.bmp
)
53 self
.hasShape
= self
.SetShape(r
)
56 def OnDoubleClick(self
, evt
):
58 self
.SetShape(wxRegion())
64 def OnPaint(self
, evt
):
66 dc
.DrawBitmap(self
.bmp
, 0,0, True)
68 def OnExit(self
, evt
):
72 def OnLeftDown(self
, evt
):
74 pos
= self
.ClientToScreen(evt
.GetPosition())
75 origin
= self
.GetPosition()
78 self
.delta
= wxPoint(dx
, dy
)
81 def OnLeftUp(self
, evt
):
86 def OnMouseMove(self
, evt
):
87 if evt
.Dragging() and evt
.LeftIsDown():
88 pos
= self
.ClientToScreen(evt
.GetPosition())
89 fp
= (pos
.x
- self
.delta
.x
, pos
.y
- self
.delta
.y
)
93 #----------------------------------------------------------------------
95 def runTest(frame
, nb
, log
):
96 win
= TestFrame(nb
, log
)
101 #----------------------------------------------------------------------
105 overview
= """<html><body>
106 <h2><center>Shaped Window</center></h2>
108 Top level windows now have a SetShape method that lets you set a
109 non-rectangular shape for the window using a wxRegion. All pixels
110 outside of the region will not be drawn and the window will not be
111 sensitive to the mouse in those areas either.
118 if __name__
== '__main__':
121 run
.main(['', os
.path
.basename(sys
.argv
[0])])