[squeak-dev] The Trunk: Graphics-mt.506.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Mar 30 08:14:42 UTC 2022
Marcel Taeumel uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-mt.506.mcz
==================== Summary ====================
Name: Graphics-mt.506
Author: mt
Time: 30 March 2022, 10:14:23.797457 am
UUID: 1934ae70-75f2-9041-a4b6-aa12b4125cc3
Ancestors: Graphics-mt.505
Adds commentary about the side effects of #copyBits and #deferUpdates:.
=============== Diff against Graphics-mt.505 ===============
Item was changed:
----- Method: BitBlt>>copyBits (in category 'copying') -----
copyBits
"Primitive. Perform the movement of bits from the source form to the
destination form. Fail if any variables are not of the right type (Integer,
Float, or Form) or if the combination rule is not implemented.
+
+ NOTE THAT this method has the side effect of showing the copied bits on
+ screen if the destination form happens to be Display. The mechanism is
+ similar to calling #primShowRectLeft:right:top:bottom: manually.
+
In addition to the original 16 combination rules, this BitBlt supports
16 fail (to simulate paint)
17 fail (to simulate mask)
18 sourceWord + destinationWord
19 sourceWord - destinationWord
20 rgbAdd: sourceWord with: destinationWord
21 rgbSub: sourceWord with: destinationWord
22 rgbDiff: sourceWord with: destinationWord
23 tallyIntoMap: destinationWord
24 alphaBlend: sourceWord with: destinationWord
25 pixPaint: sourceWord with: destinationWord
26 pixMask: sourceWord with: destinationWord
27 rgbMax: sourceWord with: destinationWord
28 rgbMin: sourceWord with: destinationWord
29 rgbMin: sourceWord bitInvert32 with: destinationWord
"
<primitive: 'primitiveCopyBits' module: 'BitBltPlugin' error: ec>
(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
["No alpha specified -- re-run with alpha = 1.0"
^ self copyBitsTranslucent: 255].
"Check for object movement during a surface callback, compressed source, destination or halftone forms.
Simply retry."
(ec == #'object moved'
or: [(sourceForm isForm and: [sourceForm unhibernate])
or: [(destForm isForm and: [destForm unhibernate])
or: [halftoneForm isForm and: [halftoneForm unhibernate]]]]) ifTrue:
[^self copyBits].
"Check for unimplmented rules"
combinationRule = Form oldPaint ifTrue: [^self paintBits].
combinationRule = Form oldErase1bitShape ifTrue: [^self eraseBits].
"Check if BitBlt doesn't support full color maps"
(colorMap notNil and: [colorMap isColormap]) ifTrue:
[colorMap := colorMap colors.
^self copyBits].
"Check if clipping got way out of range"
self clipRange.
"Convert all numeric parameters to integers and try again."
self roundVariables.
^self copyBitsAgain!
Item was changed:
----- Method: DisplayScreen>>deferUpdates: (in category 'other') -----
deferUpdates: aBoolean
+ "Set the deferUpdates flag in the virtual machine. When this flag is true, BitBlt operations on the Display are not automatically propagated to the screen. If this underlying platform does not support deferred updates, this primitive will fail. Answer whether updates were deferred before if the primitive succeeds, nil if it fails.
+
+ Note that when disabling deferred upates again after modifying the receiver, it is advisable to call #forceDisplayUpdate so that the deferred updates can actually be displayed on the screen."
- | wasDeferred |
- "Set the deferUpdates flag in the virtual machine. When this flag is true, BitBlt operations on the Display are not automatically propagated to the screen. If this underlying platform does not support deferred updates, this primitive will fail. Answer whether updates were deferred before if the primitive succeeds, nil if it fails."
+ | wasDeferred |
wasDeferred := DeferringUpdates == true.
DeferringUpdates := aBoolean.
^(self primitiveDeferUpdates: aBoolean) ifNotNil: [wasDeferred]!
More information about the Squeak-dev
mailing list
|