Mercurial > MadButterfly
diff pyink/tween.py @ 1359:5313bbfafa67
Fix issue of chain of reference for opacity and matrix
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 16 Feb 2011 15:07:44 +0800 |
parents | cd0c0c7547b4 |
children | f89d3ee130de |
line wrap: on
line diff
--- a/pyink/tween.py Wed Feb 16 15:07:44 2011 +0800 +++ b/pyink/tween.py Wed Feb 16 15:07:44 2011 +0800 @@ -189,7 +189,7 @@ def _apply_animation_attrs(ani_attrs, node): - for attr in ('x', 'y', 'width', 'height', 'opacity', 'display'): + for attr in ('x', 'y', 'width', 'height'): if attr in ani_attrs: node.setAttribute(attr, str(ani_attrs[attr])) pass @@ -307,40 +307,38 @@ pass pass - if 'opacity' in names: - if 'opacity' not in attrs1: - attrs1['opacity'] = 1.0 - pass - if 'opacity' not in attrs2: - attrs2['opacity'] = 1.0 - pass - - if node2.name() == 'svg:use': - attrs2['opacity'] = attrs2['opacity'] * attrs1['opacity'] + defaults = {'x': 0, 'y': 0, + 'width': 0, 'height': 0, + 'opacity': 1.0, 'display': 'inline'} + + for attrname in defaults: + if attrname in names: + if attrname not in attrs1: + attrs1[attrname] = defaults[attrname] + pass + if attrname not in attrs2: + attrs2[attrname] = defaults[attrname] + pass pass pass - if 'display' in names: - if 'display' not in attrs1: - attrs1['display'] = '' - pass - if 'display' not in attrs2: - attrs2['display'] = '' - pass - pass - - for name in 'x y width height'.split(): - if name in names: - if name not in attrs1: - attrs1[name] = 0 - pass - if name not in attrs2: - attrs2[name] = 0 - pass + if node2.name() == 'svg:use': + accumulators = {'opacity': + (lambda attr_v1, attr_v2: attr_v1 * attr_v2), + 'transform': + (lambda m1, m2: (_mulA(m2[0], m1[0]), m2[1])) + } + for attrname in accumulators: + if attrname not in names: + continue + accumulator = accumulators[attrname] + acc = accumulator(attrs1[attrname], attrs2[attrname]) + attrs2[attrname] = acc pass pass pass + class TweenObject(object): TWEEN_TYPE_NORMAL = 0 #TWEEN_TYPE_RELOCATE = 1