[Pkg] The Trunk: Graphics-ar.120.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Mar 10 06:47:21 UTC 2010
Andreas Raab uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-ar.120.mcz
==================== Summary ====================
Name: Graphics-ar.120
Author: ar
Time: 9 March 2010, 10:46:20.491 pm
UUID: 4f4d332a-a71e-7943-a69e-7483f611a7d8
Ancestors: Graphics-nice.118
Graphics fixes:
- Add CursorWithAlpha from OLPC. Try this:
CursorWithAlpha biggerNormal showWhile:[Sensor waitButton].
- Fix Cursor>>showWhile: to not allow changing the cursor unless being invoked from the UI process.
- Fix Form>>asFormOfDepth: to have alpha set when converting from 16 -> 32 bit.
=============== Diff against Graphics-nice.118 ===============
Item was added:
+ ----- Method: CursorWithAlpha classSide>>biggerNormal (in category 'constants') -----
+ biggerNormal
+ "self biggerNormal showWhile:[Sensor waitButton]"
+ "(Base64MimeConverter mimeEncode: ((FileStream readOnlyFileNamed: 'EtoysCursor.png') binary)) upToEnd"
+
+ ^self constants at: #biggerNormal ifAbsentPut: [
+ | form cursor |
+ form := (PNGReadWriter on: (Base64MimeConverter mimeDecodeToBytes:
+ 'iVBORw0KGgoAAAANSUhEUgAAABsAAAArCAYAAACJrvP4AAAACXBIWXMAAAsTAAALEwEAmpwY
+ AAAEF0lEQVRYCb2XS0hcVxjHj2/G8ZWMQQbSGO2iRhERwRALBmJNoOOqwUXtYtxOTQJxI8SN
+ CyXJqggVEghusrAuBB8IddUWF64CvnCj+AJrsYKio6JJOPn/j+dc5s6MztyZMR/857v3PL7f
+ /c4595w7QmiTUvrN9ZV7wGhfB3jOunpgOoYtPQQm19fXn6DsulY2PJUSi4ARvLm5+SuiE5hS
+ mAsBXSYzv99vLuXExMRL1H2jlRKoDYbAMhS4uLj4PJUwN4K5TTqEhQPHxsZeayCzTCrDqLC0
+ tLQryTAqjNmFA1OR4YWwaMBk5/BSWDRgMhnGhEUDJpphXDACqdDXIpEMHcHCF43TDB3Bks0w
+ IVj4kMabYcKwcGA8c+gIlp2drRaKGc5wYKwMHcFycnIiYOHACzLkhi9SAgsHRsnQOSzaMBJk
+ FPoejo6OvkJ5iZY67R1lZoJe5kOBKysrzxzBCgoKrCcnpKysTO7v75sjMKafmZl5gX6uNPww
+ M4EeQXrsEAJDJc7Ozngr8vPzRVVVldjZ2RGrq6uqrLi4WPT394u2tjZxeHj4P8C7qiLkJzMz
+ 8zNvc3NzT+jR/yl9xDBmZWWpTAoLC2V9fb3c29uTXV1dtuwaGxtVRgcHBzuI0QY91vLBUw+0
+ voOnXPyyijBEUWWVlZViampKFBUVCcyDKC8vt9pitYnp6WlmfqO7u/uOVRHjIiKzjIwM2dDQ
+ oDIKnZCWlhZbdoFAQFUvLCz8Bcb3WrfgqWItFR/XKrEIWG1trQWam5v7Z3Bw8C2jjoyMyNLS
+ UgvIYeYQ05A5h5HA+GE1NTVWgPn5+b/RubWiosJ/enoaZNDq6moLhjrZ19fHYjk7O/sO9/eg
+ G1oZ8JTNbJmZJ9Wgn9GyleJQMWhPT48NhnllsTw+Pv4X7WLCuI1YX8TsuLy8/CfKmrXuwt9t
+ b2//iXX4LJder9cCut1uOT4+zio5PDz8G9pWaqm4uLaZDaZBXLY2GO4bdnd3PzAowDZYc3Mz
+ i+X29vY82l0K4ypR/2JOTk7e49qsIuMLUEbdXFpaes6gk5OT0uPxWECeBGtra6ySvb29v6Bt
+ ve7DfjZTsKOjo99RyvkzEOMtGOpuBoPBbQblQsK9Ejfnzs5OFsuNjY0JlF8IQ11clodWeVgo
+ bxh0YGDABmOmNGxzh2j3EPJqRV2VqLvUFKyjo+NHBuWqxb4nS0pKVFZmGFG+gihJw8wTerHx
+ /kEgXng6y7a2thYxnAHAHkHfavEcoxyZBcOh+AOHixS+7HwnfT4f/6nynSQoaZh5MjWcTU1N
+ 94aGhtrr6up8qLgPcVFQd7SuwVPmIdN5njk1wmi31a8QHu3VuYVrLhDaf+dOHGgvE4Gp3RsB
+ cnUQMx+f9P1H7c9PXyHUIcoy01HXX637AibwgHAnFRPGAAAAAElFTkSuQmCC'
+ readStream) readStream) nextImage.
+ cursor := CursorWithAlpha extent: form extent depth: 32.
+ form displayOn: cursor.
+ cursor offset: -2 @ -1.
+ cursor preMultiplyAlpha.
+ cursor]!
Item was added:
+ Cursor subclass: #CursorWithAlpha
+ instanceVariableNames: 'fallback'
+ classVariableNames: 'Constants'
+ poolDictionaries: ''
+ category: 'Graphics-Display Objects'!
+
+ !CursorWithAlpha commentStamp: '<historical>' prior: 0!
+ A 32-bit ARGB Cursor of arbitrary extent (some platforms may limit the size). Compositing assumes alpha is pre-multiplied.!
Item was added:
+ ----- Method: CursorWithAlpha classSide>>resetConstants (in category 'constants') -----
+ resetConstants
+ Constants := nil.
+ !
Item was added:
+ ----- Method: CursorWithAlpha>>fallback: (in category 'accessing') -----
+ fallback: aCursor
+ fallback := aCursor!
Item was changed:
----- Method: Cursor>>showWhile: (in category 'displaying') -----
showWhile: aBlock
+ "While evaluating the argument, aBlock, make the receiver be the cursor shape."
+ "ar 2/2/2006: Only allow this if active process is ui process"
- "While evaluating the argument, aBlock, make the receiver be the cursor
- shape."
-
| oldcursor |
+ Processor activeProcess == Project uiProcess ifFalse:[^aBlock value].
oldcursor := Sensor currentCursor.
self show.
^aBlock ensure: [oldcursor show]
!
Item was added:
+ ----- Method: Form>>fillAlpha: (in category 'other') -----
+ fillAlpha: alphaValue
+ "Fill a 32bit form with a constant alpha value"
+ | bb |
+ self depth = 32 ifFalse:[^self error: 'Only valid for 32 bit forms'].
+ bb := BitBlt toForm: self.
+ bb combinationRule: 7. "bitOr:with:".
+ bb fillColor: (Bitmap with: alphaValue << 24).
+ bb copyBits.
+ !
Item was added:
+ ----- Method: CursorWithAlpha>>fallback (in category 'accessing') -----
+ fallback
+ ^fallback ifNil: [NormalCursor]!
Item was changed:
----- Method: Form>>asFormOfDepth: (in category 'converting') -----
asFormOfDepth: d
| newForm |
d = self depth ifTrue:[^self].
newForm := Form extent: self extent depth: d.
(BitBlt current toForm: newForm)
colorMap: (self colormapIfNeededFor: newForm);
copy: (self boundingBox)
from: 0 at 0 in: self
fillColor: nil rule: Form over.
+ "Special case: For a 16 -> 32 bit conversion fill the alpha channel because it gets lost in translation."
+ (self depth = 16 and:[d= 32]) ifTrue:[newForm fillAlpha: 255].
^newForm!
Item was added:
+ ----- Method: CursorWithAlpha>>asCursorForm (in category 'converting') -----
+ asCursorForm
+
+ ^ self as: StaticForm!
Item was added:
+ ----- Method: Form>>preMultiplyAlpha (in category 'other') -----
+ preMultiplyAlpha
+ "Pre-multiply each pixel by its alpha, for proper alpha compositing (BitBlt rule 34).
+ E.g., half-transparent green 16r7F00FF00 becomes 16r7F007F00"
+
+ depth = 32 ifFalse: [^self].
+ 1 to: bits size do: [:i |
+ | v a r g b |
+ v := bits at: i.
+ a := v bitShift: -24.
+ r := ((v bitShift: -16) bitAnd: 255) * a // 255.
+ g := ((v bitShift: -8) bitAnd: 255) * a // 255.
+ b := (v bitAnd: 255) * a // 255.
+ bits at: i put: (a bitShift: 24) + (r bitShift: 16) + (g bitShift: 8) + b].!
Item was added:
+ ----- Method: CursorWithAlpha classSide>>constants (in category 'constants') -----
+ constants
+ ^Constants ifNil: [Constants := Dictionary new]!
Item was added:
+ ----- Method: CursorWithAlpha>>primBeCursor (in category 'primitives') -----
+ primBeCursor
+ <primitive: 101>
+ self fallback primBeCursor!
More information about the Packages
mailing list