Perform cursor shifts in the background object without changing viewport
authorjaviplx <javiplx@gmail.com>
Sun, 15 May 2011 10:29:38 +0000 (10:29 +0000)
committerjaviplx <javiplx@gmail.com>
Sun, 15 May 2011 10:29:38 +0000 (10:29 +0000)
git-svn-id: file:///svnroot/wifihood/branches/mapview-redesign@184 c51dfc6a-5949-4919-9c8e-f207a149c383

view.py

diff --git a/view.py b/view.py
index 1beb6c8..75d27f7 100755 (executable)
--- a/view.py
+++ b/view.py
@@ -51,6 +51,37 @@ class background_map ( gtk.gdk.Pixmap ) :
                 dest_y = self.tileloader.tilesize * y
                 self.draw_pixbuf( None , pixbuf , 0 , 0 , dest_x , dest_y )
 
+    
+    def do_change_reftile( self , dx , dy ) :
+        self.tileloader.reftile[0] += dx
+        self.tileloader.reftile[1] += dy
+
+        pixsize = self.get_size()
+        pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, pixsize[0] , pixsize[1] )
+        pixbuf.get_from_drawable( self , self.get_colormap() , 0 , 0 , 0 , 0 , pixsize[0] , pixsize[1] )
+
+        # width , source , destination
+        x_vals = [ pixsize[0] , 0 , 0 ]
+        y_vals = [ pixsize[1] , 0 , 0 ]
+
+        if dx :
+            x_vals[0] -= self.tileloader.tilesize
+            x_vals[dx] = self.tileloader.tilesize
+            if dx == 1 :
+                for y in range(self.size[1]) : self.fill[ self.index(self.size[0]-1,y) ] = False
+            if dx == -1 :
+                for y in range(self.size[1]) : self.fill[ self.index(0,y) ] = False
+        if dy :
+            y_vals[0] -= self.tileloader.tilesize
+            y_vals[dy] = self.tileloader.tilesize
+            if dy == 1 :
+                for x in range(self.size[0]) : self.fill[ self.index(x,self.size[1]-1) ] = False
+            if dy == -1 :
+                for x in range(self.size[0]) : self.fill[ self.index(x,0) ] = False
+
+        self.draw_pixbuf( None , pixbuf , x_vals[1] , y_vals[1] , x_vals[-1] , y_vals[-1] , x_vals[0] , y_vals[0] )
+        self.loadtiles()
+
 
 class tile_loader :
 
@@ -217,23 +248,19 @@ class interactiveMapWidget :
         self.mapwidget.update_background()
 
   def Up( self ) :
-        self.mapwidget.reftile_y -= 1
-        self.mapwidget._bg.vport[1] += 256
+        self.mapwidget._bg.do_change_reftile( 0 , -1 )
         self.mapwidget.update_background()
 
   def Down( self ) :
-        self.mapwidget.reftile_y += 1
-        self.mapwidget._bg.vport[1] -= 256
+        self.mapwidget._bg.do_change_reftile( 0 , +1 )
         self.mapwidget.update_background()
 
   def Right( self ) :
-        self.mapwidget.reftile_x += 1
-        self.mapwidget._bg.vport[0] += 256
+        self.mapwidget._bg.do_change_reftile( +1 , 0 )
         self.mapwidget.update_background()
 
   def Left( self ) :
-        self.mapwidget.reftile_x -= 1
-        self.mapwidget._bg.vport[0] -= 256
+        self.mapwidget._bg.do_change_reftile( -1 , 0 )
         self.mapwidget.update_background()