Author: Lars Wassermann <lars.wasserm...@gmail.com> Branch: Changeset: r291:85602aa57b8f Date: 2013-04-17 17:08 +0200 http://bitbucket.org/pypy/lang-smalltalk/changeset/85602aa57b8f/
Log: identified error of maximizing/scrolling and took some first steps to alleviate it diff --git a/BitBltSim.19.cs b/BitBltSim.19.cs --- a/BitBltSim.19.cs +++ b/BitBltSim.19.cs @@ -165,23 +165,53 @@ !BitBlt methodsFor: 'simulation' stamp: 'tfel 3/17/2013 16:17'! merge: srcWord with: dstWord - "These are the 16 combination rules." - combinationRule = 0 ifTrue: [^ 0]. - combinationRule = 1 ifTrue: [^ srcWord bitAnd: dstWord]. - combinationRule = 2 ifTrue: [^ srcWord bitAnd: dstWord bitInvert32]. - combinationRule = 3 ifTrue: [^ srcWord]. - combinationRule = 4 ifTrue: [^ srcWord bitInvert32 bitAnd: dstWord]. - combinationRule = 5 ifTrue: [^ dstWord]. - combinationRule = 6 ifTrue: [^ srcWord bitXor: dstWord]. - combinationRule = 7 ifTrue: [^ srcWord bitOr: dstWord]. - combinationRule = 8 ifTrue: [^ srcWord bitInvert32 bitAnd: dstWord bitInvert32]. - combinationRule = 9 ifTrue: [^ srcWord bitInvert32 bitXor: dstWord]. - combinationRule = 10 ifTrue: [^ dstWord bitInvert32]. - combinationRule = 11 ifTrue: [^ srcWord bitOr: dstWord bitInvert32]. - combinationRule = 12 ifTrue: [^ srcWord bitInvert32]. - combinationRule = 13 ifTrue: [^ srcWord bitInvert32 bitOr: dstWord]. - combinationRule = 14 ifTrue: [^ srcWord bitInvert32 bitOr: dstWord bitInvert32]. - combinationRule = 15 ifTrue: [^ dstWord]! ! + + combinationRule < 16 + ifTrue: [ "These are the 16 basic combination rules." + combinationRule = 0 ifTrue: [^ 0]. + combinationRule = 1 ifTrue: [^ srcWord bitAnd: dstWord]. + combinationRule = 2 ifTrue: [^ srcWord bitAnd: dstWord bitInvert32]. + combinationRule = 3 ifTrue: [^ srcWord]. + combinationRule = 4 ifTrue: [^ srcWord bitInvert32 bitAnd: dstWord]. + combinationRule = 5 ifTrue: [^ dstWord]. + combinationRule = 6 ifTrue: [^ srcWord bitXor: dstWord]. + combinationRule = 7 ifTrue: [^ srcWord bitOr: dstWord]. + combinationRule = 8 ifTrue: [^ srcWord bitInvert32 bitAnd: dstWord bitInvert32]. + combinationRule = 9 ifTrue: [^ srcWord bitInvert32 bitXor: dstWord]. + combinationRule = 10 ifTrue: [^ dstWord bitInvert32]. + combinationRule = 11 ifTrue: [^ srcWord bitOr: dstWord bitInvert32]. + combinationRule = 12 ifTrue: [^ srcWord bitInvert32]. + combinationRule = 13 ifTrue: [^ srcWord bitInvert32 bitOr: dstWord]. + combinationRule = 14 ifTrue: [^ srcWord bitInvert32 bitOr: dstWord bitInvert32]. + combinationRule = 15 ifTrue: [^ dstWord].] + ifFalse: [ "These are newer combination rules. (BitBltSimulation class>>#initializeRuleTable)" + combinationRule = 16 ifTrue: [^ dstWord]. "unused - was old paint" + combinationRule = 17 ifTrue: [^ dstWord]. "unused - was old mask" + combinationRule = 18 ifTrue: [^ dstWord]. "addWord" + combinationRule = 19 ifTrue: [^ dstWord]. "subWord" + combinationRule = 20 ifTrue: [^ dstWord]. "rgbAdd" + combinationRule = 21 ifTrue: [^ dstWord]. "rgbSub" + combinationRule = 22 ifTrue: [^ dstWord]. "OLDrgbDiff" + combinationRule = 23 ifTrue: [^ dstWord]. "OLDtallyIntoMap" + combinationRule = 24 ifTrue: [^ dstWord]. "alphaBlend" + combinationRule = 25 ifTrue: [^ dstWord]. "pixPaint" + combinationRule = 26 ifTrue: [^ dstWord]. "pixMask" + combinationRule = 27 ifTrue: [^ dstWord]. "rgbMax" + combinationRule = 28 ifTrue: [^ dstWord]. "rgbMin" + combinationRule = 29 ifTrue: [^ dstWord]. "rgbMinInvert" + combinationRule = 30 ifTrue: [^ dstWord]. "alphaBlendConst" + combinationRule = 31 ifTrue: [^ dstWord]. "alphaPaintConst" + combinationRule = 32 ifTrue: [^ dstWord]. "rgbDiff" + combinationRule = 33 ifTrue: [^ dstWord]. "tallyIntoMap" + combinationRule = 34 ifTrue: [^ dstWord]. "alphaBlendScaled" + combinationRule = 35 ifTrue: [^ dstWord]. "unused here - only used by FXBlt" + combinationRule = 36 ifTrue: [^ dstWord]. "unused here - only used by FXBlt" + combinationRule = 37 ifTrue: [^ dstWord]. "rgbMul" + combinationRule = 38 ifTrue: [^ dstWord]. "pixSwap" + combinationRule = 39 ifTrue: [^ dstWord]. "pixClear" + combinationRule = 40 ifTrue: [^ dstWord]. "fixAlpha" + combinationRule = 41 ifTrue: [^ dstWord]. "rgbComponentAlpha"]. + self error: 'Combination Rule is not supported.'! ! !BitBlt methodsFor: 'simulation' stamp: 'tfel 3/15/2013 14:49'! sanitizeInput diff --git a/spyvm/primitives.py b/spyvm/primitives.py --- a/spyvm/primitives.py +++ b/spyvm/primitives.py @@ -562,6 +562,10 @@ if not isinstance(w_rcvr, model.W_PointersObject) or w_rcvr.size() < 15: raise PrimitiveFailedError + # only allow combinationRules 0-15 + if interp.space.unwrap_positive_32bit_int(w_rcvr.fetch(interp.space, 3)) > 41: + raise PrimitiveFailedError + space = interp.space trace = interp.trace interp.trace = False _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit