Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pynxc/waxy/demos/Drag.py
blob: 42ae3bf85d161ca7e538648c4e0bbfe9dd9d41bc (plain)
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
#!/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()