Pārlūkot izejas kodu

wxGUI: fix zooming in wx monitors together with d.frame

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@65309 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 gadi atpakaļ
vecāks
revīzija
7c7616d10f
3 mainītis faili ar 28 papildinājumiem un 13 dzēšanām
  1. 13 8
      gui/wxpython/core/render.py
  2. 1 1
      gui/wxpython/core/ws.py
  3. 14 4
      gui/wxpython/mapdisp/main.py

+ 13 - 8
gui/wxpython/core/render.py

@@ -105,8 +105,6 @@ class Layer(object):
 
         self.forceRender = render
 
-        self.render_env = { "GRASS_RENDER_FILE": self.mapfile }
-        
         Debug.msg (3, "Layer.__init__(): type=%s, cmd='%s', name=%s, " \
                        "active=%d, opacity=%d, hidden=%d" % \
                        (self.type, self.GetCmd(string=True), self.name,
@@ -147,7 +145,6 @@ class Layer(object):
         
         if not env:
             env = os.environ.copy()
-        env.update(self.render_env)
         
         # render layers
         try:
@@ -250,11 +247,16 @@ class Layer(object):
             raise GException(_("Unsupported map layer type '%s'") % ltype)
 
         if not self.renderMgr:
+            env = {}
             if ltype == 'wms':
                 renderMgr = RenderWMSMgr
             else:
                 renderMgr = RenderLayerMgr
-            self.renderMgr = renderMgr(self)
+                env['GRASS_RENDER_FILE'] = self.mapfile
+                if ltype == 'overlay':
+                    env['GRASS_RENDER_FILE_READ'] = 'FALSE'
+                    env['GRASS_RENDER_TRANSPARENT'] = 'TRUE'
+            self.renderMgr = renderMgr(self, env)
         
         self.type = ltype
 
@@ -332,11 +334,9 @@ class Overlay(Layer):
         """
         Layer.__init__(self, ltype='overlay', *args, **kwargs)
         self.id = id
-        self.render_env["GRASS_RENDER_FILE_READ"] = "FALSE"
-        self.render_env["GRASS_RENDER_TRANSPARENT"] = "TRUE"
         
 class RenderLayerMgr(wx.EvtHandler):
-    def __init__(self, layer):
+    def __init__(self, layer, env):
         """Render layer into image
 
         :param layer: Layer to be rendered
@@ -349,7 +349,11 @@ class RenderLayerMgr(wx.EvtHandler):
         self.updateProgress = Signal('RenderLayerMgr.updateProgress')
         
         self._startTime = None
-         
+        self._render_env = env
+
+    def UpdateRenderEnv(self, env):
+        self._render_env.update(env)
+        
     def Render(self, cmd, env):
         """Render layer
 
@@ -360,6 +364,7 @@ class RenderLayerMgr(wx.EvtHandler):
                   (self.layer, self.layer.forceRender, self.layer.mapfile))
         
         env_cmd = env.copy()
+        env_cmd.update(self._render_env)
         env_cmd['GRASS_RENDER_FILE'] = self.layer.mapfile
 
         cmd_render = copy.deepcopy(cmd)

+ 1 - 1
gui/wxpython/core/ws.py

@@ -45,7 +45,7 @@ from grass.pydispatch.signal import Signal
 class RenderWMSMgr(wx.EvtHandler):
     """Fetch and prepare WMS data for rendering.
     """
-    def __init__(self, layer):
+    def __init__(self, layer, env={}):
         if not haveGdal:
             sys.stderr.write(_("Unable to load GDAL Python bindings.\n"\
                                "WMS layers can not be displayed without the bindings.\n"))

+ 14 - 4
gui/wxpython/mapdisp/main.py

@@ -139,11 +139,18 @@ class DMonMap(Map):
             # next number in rendering order
             next_layer = 0
             mapFile = None
+            render_env = dict()
             for line in lines:
-                if line.startswith('#') and 'GRASS_RENDER_FILE' in line:
-                    mapFile = line.split('=', 1)[1].strip()
+                if line.startswith('#'):
+                    if 'GRASS_RENDER_FILE' in line:
+                        mapFile = line.split('=', 1)[1].strip()
+                    try:
+                        k, v = line[2:].strip().split('=', 1)
+                    except:
+                        pass
+                    render_env[k] = v
                     continue
-            
+                
                 cmd = utils.split(line.strip())
                 
                 ltype = None
@@ -167,7 +174,10 @@ class DMonMap(Map):
                 mapLayer = classLayer(name = name, cmd = cmd, Map = None,
                                       hidden = True, render = False, mapfile = mapFile, **args)
                 mapLayer.GetRenderMgr().updateProgress.connect(self.GetRenderMgr().ReportProgress)
-
+                if render_env:
+                    mapLayer.GetRenderMgr().UpdateRenderEnv(render_env)
+                    render_env = dict()
+                    
                 exists = False
                 for i, layer in enumerate(existingLayers):
                     if layer.GetCmd(string=True) == mapLayer.GetCmd(string=True):