Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pynxc/waxy/demos/Drag.py
diff options
context:
space:
mode:
Diffstat (limited to 'pynxc/waxy/demos/Drag.py')
-rwxr-xr-xpynxc/waxy/demos/Drag.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/pynxc/waxy/demos/Drag.py b/pynxc/waxy/demos/Drag.py
new file mode 100755
index 0000000..42ae3bf
--- /dev/null
+++ b/pynxc/waxy/demos/Drag.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+from waxy import *
+class Sprite:
+ def __init__(self, fname):
+ self.bitmap = Image(fname+".png").ConvertToBitmap()
+ self.bitmap_rev = Image(fname+"rev.png").ConvertToBitmap()
+ self.background = None
+ self.pos=wx.Point(0,0)
+ self.reversed=False
+
+ def Draw(self, dc):
+ # copy background from dc to memory object
+ memdc = wx.MemoryDC()
+ memdc.Blit(0, 0, self.bitmap.GetWidth(), self.bitmap.GetHeight(), dc,
+ self.pos[0], self.pos[1], wx.COPY, 1)
+ self.background = memdc # keep around for later
+
+ bitmap = self.bitmap if not self.reversed else self.bitmap_rev
+ dc.DrawBitmap(bitmap, self.pos[0], self.pos[1], 1)
+
+ def HitTest(self, pt):
+ rect = self.GetRect()
+ return rect.InsideXY(pt.x, pt.y)
+
+
+ def GetRect(self):
+ return wx.Rect(self.pos[0], self.pos[1],
+ self.bitmap.GetWidth(), self.bitmap.GetHeight())
+
+class MyCanvas(Canvas):
+
+ def Init(self):
+ self.SetBackgroundColour('WHITE')
+ self.SetScrollbars(20, 20, 100, 100)
+ self.sprite = Sprite('heretic2')
+ self.sprite.pos=wx.Point(50,50)
+ self.selected=False
+ self.starting_mouse_pos=None
+ self.sprite_orig_pos=None
+
+ def OnLeftDown(self,event=None):
+
+ if self.sprite.HitTest(event.Position):
+ self.selected=True
+ self.starting_mouse_pos=event.Position
+ self.sprite_orig_pos=self.sprite.pos
+ self.sprite.reversed=not self.sprite.reversed
+ self.Refresh()
+
+ def OnLeftUp(self,event=None):
+ self.selected=False
+
+ def OnMotion(self,event=None):
+ if not event.Dragging():
+ return
+
+ if not self.selected:
+ return
+
+ print "move.",event.Position
+ self.sprite.pos=self.sprite_orig_pos+event.Position-self.starting_mouse_pos
+
+ self.Refresh()
+
+
+ def OnDraw(self, dc):
+ dc.SetTextForeground('BLUE')
+ dc.SetPen(wx.MEDIUM_GREY_PEN)
+ for i in range(50):
+ dc.DrawLine(0, i*10, i*10, 0)
+
+ self.sprite.Draw(dc)
+
+
+class MainFrame(VerticalFrame): # frame has a sizer built in
+
+ def Body(self):
+
+
+ self.CreateStatusBar()
+ self.SetStatusText("This is the statusbar")
+
+ menubar = MenuBar(self)
+ menu1 = Menu(self)
+ menu1.Append("E&xit", self.CloseWindow, "Exit demo",hotkey="Ctrl+Q")
+ menubar.Append(menu1, "&File")
+
+
+ self.canvas = MyCanvas(self)
+ self.canvas.SetSize((400,300))
+ self.AddComponent(self.canvas, expand=1, stretch=1)
+
+ self.Pack()
+
+
+
+ self.CenterOnScreen()
+
+ self.Show()
+
+
+ def CloseWindow(self,event):
+ self.Close()
+
+
+
+if __name__=="__main__":
+ app = Application(MainFrame, title=__file__)
+ app.Run()