diff options
author | Nostalghia <b.vehikel@googlemail.com> | 2010-05-22 13:52:30 (GMT) |
---|---|---|
committer | Nostalghia <b.vehikel@googlemail.com> | 2010-05-22 13:52:30 (GMT) |
commit | e24ca571a8dccf66740d66e50b47862b5e28adc9 (patch) | |
tree | c65719efcd250439c45c96537f4e49654c51d145 /model_treenode.py | |
parent | 8394595622cbeb9894da9e83fd3dadacd6266cf6 (diff) |
Bug fixing the mask modifier and border modifier in the rendering engine.
This is not backward compatible.
Diffstat (limited to 'model_treenode.py')
-rw-r--r-- | model_treenode.py | 71 |
1 files changed, 44 insertions, 27 deletions
diff --git a/model_treenode.py b/model_treenode.py index 3f11417..917ec64 100644 --- a/model_treenode.py +++ b/model_treenode.py @@ -25,6 +25,9 @@ import model_locus import model_allele import exon_color from gettext import gettext as _ +from symbol import try_stmt +import sys +import traceback LAYERTYPE_CONSTRAINT = 'layertypeconstraint' NUMBER_OF_LAYERS_CONSTRAINT = 'layernumberofconstraint' @@ -254,40 +257,49 @@ class TreeNode(model_allele.Allele): # (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(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(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(task, right_ctx, width, height) -# right_surface.write_to_png('/dev/shm/right_' + self.right_treenode.get_unique_id() + '.png') - - 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(task, self.layer, self.left_treenode, - ctx, width, height) - elif (self.left_treenode is None) and (self.right_treenode is not None): - self.modifier.render_single_layer(task, self.layer, self.right_treenode, - ctx, width, height) - ctx.restore() + try: + ctx.save() + ka_debug.matrix_s(ctx.get_matrix()) + 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(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(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(task, right_ctx, width, height) + # right_surface.write_to_png('/dev/shm/right_' + self.right_treenode.get_unique_id() + '.png') + + 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(task, self.layer, self.left_treenode, + ctx, width, height) + elif (self.left_treenode is None) and (self.right_treenode is not None): + self.modifier.render_single_layer(task, self.layer, self.right_treenode, + ctx, width, height) + ka_debug.matrix_r(ctx.get_matrix()) + ctx.restore() + except: + ka_debug.err('failed calculating [%s] [%s] [%s]' % \ + (self.get_unique_id(), sys.exc_info()[0], sys.exc_info()[1])) + traceback.print_exc(file=sys.__stderr__) + ka_debug.matrix(ctx.get_matrix()) def _prepare_surface(self, ctx, width, height, background): new_surface = ctx.get_target().create_similar(cairo.CONTENT_COLOR_ALPHA, width, height) new_ctx = cairo.Context(new_surface) new_ctx.scale(width, height) + ka_debug.matrix(new_ctx.get_matrix()) new_ctx.translate(0.5, 0.5) + ka_debug.matrix(new_ctx.get_matrix()) new_ctx.set_operator(cairo.OPERATOR_SOURCE) rgba = background.rgba new_ctx.set_source_rgba(rgba[0], rgba[1], rgba[2], rgba[3]) @@ -335,6 +347,7 @@ class TreeNode(model_allele.Allele): if self.right_treenode is not None: self.modifier.explain(task, formater, self.layer, self.right_treenode) + self._preview(task, self.layer, formater, width, height) formater.end_list() #ex formater.end_list() @@ -343,11 +356,15 @@ class TreeNode(model_allele.Allele): surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(surface) ctx.scale(width, height) + ka_debug.matrix(ctx.get_matrix()) ctx.translate(0.5, 0.5) + ka_debug.matrix(ctx.get_matrix()) TreeNode._paint_checker_board(ctx) ctx.save() + ka_debug.matrix_s(ctx.get_matrix()) source.render(task, ctx, width, height) formater.surface_item(surface, 'Tree node ' + self.path, self.path) + ka_debug.matrix_r(ctx.get_matrix()) ctx.restore() def copy(self): |