OSDN Git Service

Fix "merge layer down"
authorMartin Renold <martinxyz@gmx.ch>
Sun, 12 Jul 2009 20:35:25 +0000 (22:35 +0200)
committerMartin Renold <martinxyz@gmx.ch>
Sun, 12 Jul 2009 20:51:46 +0000 (22:51 +0200)
The problem was that a positional argument did change position.
Using keyword arguments now.

lib/document.py
lib/layer.py
lib/tiledsurface.py

index dab16b2..e3c08a6 100644 (file)
@@ -178,7 +178,7 @@ class Document():
 
         for layer in layers:
             surface = layer.surface
-            surface.composite_tile_over(dst, tx, ty, mipmaplayer.opacity)
+            surface.composite_tile_over(dst, tx, ty, mipmap_level=mipmap, opacity=layer.opacity)
             
     def add_layer(self, insert_idx):
         self.do(command.AddLayer(self, insert_idx))
index d5f142a..6239ecf 100644 (file)
@@ -49,7 +49,8 @@ class Layer:
             surf = dst.surface.get_tile_memory(tx, ty, readonly=False)
             surf[:,:,:] = dst.opacity * surf[:,:,:]
         for tx, ty in src.surface.get_tiles():
-            src.surface.composite_tile_over(dst.surface.get_tile_memory(tx, ty, readonly=False), tx, ty, self.opacity)
+            surf = dst.surface.get_tile_memory(tx, ty, readonly=False)
+            src.surface.composite_tile_over(surf, tx, ty, opacity=self.opacity)
         dst.opacity = 1.0
 
     def get_brush_at(self, x, y):
index f220a4d..7774344 100644 (file)
@@ -116,24 +116,24 @@ class Surface(mypaintlib.TiledSurface):
         tmp = self.get_tile_memory(tx, ty, readonly=True)
         return mypaintlib.tile_convert_rgba16_to_rgba8(tmp, dst)
 
-    def composite_tile_over(self, dst, tx, ty, mipmap_level=0, opac=1.0):
+    def composite_tile_over(self, dst, tx, ty, mipmap_level=0, opacity=1.0):
         """
         composite one tile of this surface over the array dst, modifying only dst
         """
 
         if self.mipmap_level < mipmap_level:
-            return self.mipmap.composite_tile_over(dst, tx, ty, mipmap_level, opac)
+            return self.mipmap.composite_tile_over(dst, tx, ty, mipmap_level, opacity)
         if not (tx,ty) in self.tiledict:
             return
         src = self.get_tile_memory(tx, ty, True)
         if dst.shape[2] == 3 and dst.dtype == 'uint8':
-            mypaintlib.tile_composite_rgba16_over_rgb8(src, dst, opac)
+            mypaintlib.tile_composite_rgba16_over_rgb8(src, dst, opacity)
         elif dst.shape[2] == 4 and dst.dtype == 'uint16':
-            # rarely used (only for merging layers)
+            # rarely used (for merging layers, also when exporting a transparent PNGs)
             # src (premultiplied) OVER dst (premultiplied)
             # dstColor = srcColor + (1.0 - srcAlpha) * dstColor
-            one_minus_srcAlpha = (1<<15) - (opac * src[:,:,3:4]).astype('uint32')
-            dst[:,:,:] = opac * src[:,:,:] + ((one_minus_srcAlpha * dst[:,:,:]) >> 15).astype('uint16')
+            one_minus_srcAlpha = (1<<15) - (opacity * src[:,:,3:4]).astype('uint32')
+            dst[:,:,:] = opacity * src[:,:,:] + ((one_minus_srcAlpha * dst[:,:,:]) >> 15).astype('uint16')
 
     def save_snapshot(self):
         sshot = SurfaceSnapshot()