diff options
author | Thomas Jourdan <b.vehikel@googlemail.com> | 2010-01-25 17:14:52 (GMT) |
---|---|---|
committer | Thomas Jourdan <b.vehikel@googlemail.com> | 2010-01-25 17:14:52 (GMT) |
commit | 5997b56f004cea4d7ee344f47e6ba2f41e10f119 (patch) | |
tree | 6989069656cb4d3875a48743a4240245c4d7a6e0 /model_treenode.py | |
parent | 23467385171f296ab2f3e2f040ff6ae9a8438733 (diff) |
Cancel obsolete rendering task during start up. This may reduce time when starting from journal.
Diffstat (limited to 'model_treenode.py')
-rw-r--r-- | model_treenode.py | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/model_treenode.py b/model_treenode.py index 0ebaf92..62cd361 100644 --- a/model_treenode.py +++ b/model_treenode.py @@ -243,41 +243,44 @@ class TreeNode(model_allele.Allele): else self.modifier.copy() return new_one - def render(self, ctx, width, height): + def render(self, task, ctx, width, height): """ pre: ctx is not None pre: width > 0 pre: height > 0 pre: width == height """ + if task.quit: +# ka_debug.info('quitting task: [%s], %s' % \ +# (task.work_for, self.path)) + return #!! time.sleep(0.001) ctx.save() if (self.left_treenode is None) and (self.right_treenode is None): # I am a leaf, use my own layer painting strategy - self.layer.render(ctx, width, height) + self.layer.render(task, ctx, width, height) elif (self.left_treenode is not None) and (self.right_treenode is not None): # merge 'left' and 'right' tree node left_surface, left_ctx = self._prepare_surface(ctx, width, height, \ self.left_background) - self.left_treenode.render(left_ctx, width, height) + self.left_treenode.render(task, left_ctx, width, height) # left_surface.write_to_png('/dev/shm/left_' + self.left_treenode.get_unique_id() + '.png') right_surface, right_ctx = self._prepare_surface(ctx, width, height, \ self.right_background) right_ctx.set_operator(cairo.OPERATOR_SOURCE) - self.right_treenode.render(right_ctx, width, height) + self.right_treenode.render(task, right_ctx, width, height) # right_surface.write_to_png('/dev/shm/right_' + self.right_treenode.get_unique_id() + '.png') - self.merger.merge_layers(left_surface, right_surface, \ - ctx, width, height) + if not task.quit: + self.merger.merge_layers(left_surface, right_surface, \ + ctx, width, height) elif (self.left_treenode is not None) and (self.right_treenode is None): - self.modifier.render_single_layer(self.layer, self.left_treenode, + self.modifier.render_single_layer(task, self.layer, self.left_treenode, ctx, width, height) -# self.left_treenode.render(ctx, width, height) elif (self.left_treenode is None) and (self.right_treenode is not None): - self.modifier.render_single_layer(self.layer, self.right_treenode, + self.modifier.render_single_layer(task, self.layer, self.right_treenode, ctx, width, height) -# self.right_treenode.render(ctx, width, height) ctx.restore() def _prepare_surface(self, ctx, width, height, background): @@ -292,7 +295,7 @@ class TreeNode(model_allele.Allele): new_ctx.paint() return new_surface, new_ctx - def explain(self, formater): + def explain(self, task, formater): """Explain all layers, modifier and mergers.""" width = height = 256 @@ -306,7 +309,7 @@ class TreeNode(model_allele.Allele): title = 'Leaf ' + self.path if leaf else title formater.begin_list(title) # preview this node - self._preview(self, formater, width, height) + self._preview(task, self, formater, width, height) # explain details formater.begin_list('Details for ' + title) @@ -317,13 +320,13 @@ class TreeNode(model_allele.Allele): # explain how layers are combined formater.color_item(self.left_background, 'left background color:', alpha=True) self.merger.explain_left(formater) - self.left_treenode.explain(formater) + self.left_treenode.explain(task, formater) formater.color_item(self.right_background, 'right background color:', alpha=True) self.merger.explain_right(formater) - self.right_treenode.explain(formater) + self.right_treenode.explain(task, formater) else: # preview this node - self._preview(self.layer, formater, width, height) + self._preview(task, self.layer, formater, width, height) text, surface, descr = self.modifier.explain() if surface is not None: formater.surface_item(surface, 'modifier : ' + text, descr) @@ -331,21 +334,21 @@ class TreeNode(model_allele.Allele): formater.text_item(text) # explain child node if self.left_treenode is not None: - self.left_treenode.explain(formater) + self.left_treenode.explain(task, formater) if self.right_treenode is not None: - self.right_treenode.explain(formater) + self.right_treenode.explain(task, formater) formater.end_list() formater.end_list() - def _preview(self, source, formater, width, height): + def _preview(self, task, source, formater, width, height): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(surface) ctx.scale(width, height) ctx.translate(0.5, 0.5) TreeNode._paint_checker_board(ctx) ctx.save() - source.render(ctx, width, height) + source.render(task, ctx, width, height) formater.surface_item(surface, self.__class__.__name__, self.__class__.__name__) ctx.restore() |