def restore(self): # Set the target layer as active. main.documents.active.layers.set_active(self.layer, False) main.gui.sidebar.layers.dump() # Get diff and modified subpixbufs. diffbuf = self.decompress(self.diff) pixbuf = self.copy_area(self.layer.pixbuf) # Calc original subpixbuf. core.diff( convert.pixbuf_pointer(pixbuf), convert.pixbuf_pointer(diffbuf), self.zone[2], self.zone[3], True) # Copy original subpixbuf to layer. pixbuf.copy_area( 0, 0, self.zone[2], self.zone[3], self.layer.pixbuf, self.zone[0], self.zone[1]) # Redraw zone (at document offset level). zone = copy.copy(self.zone) zone[0] += self.layer.xpos zone[1] += self.layer.ypos main.documents.active.canvas.redraw(*zone)
def final(self, zone=None): # If not zone given, zone is the entire layer. if not zone: zone = [0, 0, self.layer.width, self.layer.height] # Adjust zone to layer limits. if zone[0] < 0: zone[2] += zone[0] zone[0] = 0 if zone[1] < 0: zone[3] += zone[1] zone[1] = 0 zone[2] = min(zone[2], self.layer.width - zone[0]) zone[3] = min(zone[3], self.layer.height - zone[1]) self.zone = zone # Get original and modified subpixbufs. pixbuf = self.copy_area(self.pixbuf) pixbufmod = self.copy_area(self.layer.pixbuf) # Calc diff subpixbuf. core.diff( convert.pixbuf_pointer(pixbuf), convert.pixbuf_pointer(pixbufmod), zone[2], zone[3], False) # Compress diff subpixbuf. self.diff = zlib.compress(pixbuf.get_pixels()) # Set propierties. self.rowstride = pixbuf.get_rowstride() self.bytes = len(self.diff) # Free memory. del(pixbuf) del(pixbufmod) del(self.pixbuf)