Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/model_treenode.py
diff options
context:
space:
mode:
authorThomas 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)
commit5997b56f004cea4d7ee344f47e6ba2f41e10f119 (patch)
tree6989069656cb4d3875a48743a4240245c4d7a6e0 /model_treenode.py
parent23467385171f296ab2f3e2f040ff6ae9a8438733 (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.py41
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()