[squeak-dev] The Trunk: MorphicExtras-mt.156.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Mar 4 18:05:07 UTC 2015
Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-mt.156.mcz
==================== Summary ====================
Name: MorphicExtras-mt.156
Author: mt
Time: 4 March 2015, 7:04:52.068 pm
UUID: 1b149c50-aaf7-b043-86e1-ce80d88bc68b
Ancestors: MorphicExtras-mt.155
Uses eToys' implementation of AnimatedImageMorph, which works fine with animated GIFs now.
=============== Diff against MorphicExtras-mt.155 ===============
Item was changed:
ImageMorph subclass: #AnimatedImageMorph
+ instanceVariableNames: 'images delays stepTime nextTime imageIndex stepper'
- instanceVariableNames: 'images delays stepTime nextTime imageIndex formsAreDiffs'
classVariableNames: ''
poolDictionaries: ''
category: 'MorphicExtras-AdditionalMorphs'!
!AnimatedImageMorph commentStamp: '<historical>' prior: 0!
I am an ImageMorph that can hold more than one image. Each image has its own delay time.!
Item was added:
+ ----- Method: AnimatedImageMorph class>>additionsToViewerCategories (in category 'class initialization') -----
+ additionsToViewerCategories
+ "Answer a list of (<categoryName> <list of category specs>) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories."
+ ^ #(
+
+ (#'graphics'
+ (
+ (slot isGifPlaying 'Whether the gif is playing'
+ Boolean readWrite Player getGifPlaying Player setGifPlaying:)
+ (slot opaque 'Whether the gif opaque'
+ Boolean readWrite Player getOpaque Player setOpaque:)
+
+ ))
+
+ )
+ !
Item was changed:
----- Method: AnimatedImageMorph class>>fromGIFFileNamed: (in category 'instance creation') -----
fromGIFFileNamed: fileName
| reader |
+ reader _ AnimatedGIFReadWriter formsFromFileNamed: fileName.
- reader := AnimatedGIFReadWriter formsFromFileNamed: fileName.
^reader forms size = 1
ifTrue: [ ImageMorph new image: reader forms first ]
ifFalse: [ self new fromReader: reader ]!
Item was changed:
----- Method: AnimatedImageMorph class>>fromStream: (in category 'instance creation') -----
fromStream: aStream
| reader |
+ reader _ AnimatedGIFReadWriter formsFromStream: aStream.
- reader := AnimatedGIFReadWriter formsFromStream: aStream.
^reader forms size = 1
ifTrue: [ ImageMorph new image: reader forms first ]
ifFalse: [ self new fromReader: reader ]!
Item was removed:
- ----- Method: AnimatedImageMorph class>>initialize (in category 'class initialization') -----
- initialize
- "register the receiver in the global registries"
- self environment
- at: #FileList
- ifPresent: [:cl | cl registerFileReader: self]!
Item was changed:
----- Method: AnimatedImageMorph class>>serviceOpenGIFInWindow (in category 'fileIn/Out') -----
serviceOpenGIFInWindow
"Answer a service for opening a gif graphic in a window"
^ (SimpleServiceEntry
provider: self
label: 'open the graphic as a morph'
selector: #openGIFInWindow:
description: 'open a GIF graphic file as a morph'
+ buttonLabel: 'open gif')
- buttonLabel: 'open')
argumentGetter: [:fileList | fileList readOnlyStream]!
Item was changed:
----- Method: AnimatedImageMorph class>>services (in category 'fileIn/Out') -----
services
^ Array
with: self serviceOpenGIFInWindow
"with: Form serviceImageImports"
+ "with: Form serviceImageAsBackground"!
- with: Form serviceImageAsBackground!
Item was added:
+ ----- Method: AnimatedImageMorph>>addCustomMenuItems:hand: (in category 'stepping and presenter') -----
+ addCustomMenuItems: aMenu hand: aHand
+ super addCustomMenuItems: aMenu hand: aHand.
+ aMenu addUpdating: #steppingString action: #toggleStepping!
Item was removed:
- ----- Method: AnimatedImageMorph>>formsAreDiffs (in category 'accessing') -----
- formsAreDiffs
- "Should the forms be drawn on top of each other to produce the frame?"
- ^ formsAreDiffs ifNil: [false]!
Item was removed:
- ----- Method: AnimatedImageMorph>>formsAreDiffs: (in category 'accessing') -----
- formsAreDiffs: aBoolean
-
- formsAreDiffs := aBoolean.
- self reset.!
Item was added:
+ ----- Method: AnimatedImageMorph>>fromArray: (in category 'private') -----
+ fromArray: reader
+ images := reader first.
+ delays := reader second.
+ imageIndex := 0.
+ self
+ image: (Form extent: images first extent depth: 32).
+ self isOpaque: true.
+ self step!
Item was changed:
----- Method: AnimatedImageMorph>>fromReader: (in category 'private') -----
+ fromReader: reader
- fromReader: reader
-
images := reader forms.
delays := reader delays.
+ imageIndex := 0.
+ self
+ image: (Form extent: images first extent depth: 32).
+ self isOpaque: true.
+ self step!
- self reset.!
Item was changed:
----- Method: AnimatedImageMorph>>initialize (in category 'private') -----
initialize
nextTime := Time millisecondClockValue.
imageIndex := 1.
stepTime := 10.
+ stepper :=true.
super initialize!
Item was removed:
- ----- Method: AnimatedImageMorph>>reset (in category 'private') -----
- reset
-
- imageIndex := 0.
- self image: (Form extent: images first extent depth: 32).
- self step.!
Item was added:
+ ----- Method: AnimatedImageMorph>>setStepping: (in category 'stepping and presenter') -----
+ setStepping: aBoolean
+ self wantsSteps ifFalse:[^false].
+ stepper := aBoolean.
+ stepper ifTrue:[self startStepping]
+ ifFalse:[self stopStepping].
+
+ !
Item was changed:
----- Method: AnimatedImageMorph>>step (in category 'stepping and presenter') -----
step
+ | form delay |
+ stepper ifFalse:[ self stopStepping].
+ images isEmpty
+ ifTrue: [^ self].
+ nextTime > Time millisecondClockValue
+ ifTrue: [^self].
+ imageIndex > 0 ifTrue: [
+ form := images at: imageIndex.
+ form displayOn: self image at: 0 at 0 rule:
+ ((self isOpaque) ifTrue:[Form paint] ifFalse:[Form erase]).
+ ].
+ imageIndex _ imageIndex \\ images size + 1.
+ form := images at: imageIndex.
+ form displayOn: self image at: 0 at 0 rule: Form paint.
+ self changed.
+ delay := (delays at: imageIndex) ifNil: [0].
+ nextTime := Time millisecondClockValue +delay!
- | d next |
- images isEmpty ifTrue: [^ self].
-
- nextTime > Time millisecondClockValue
- ifTrue: [^self].
- self changed .
- next := images at: (imageIndex := imageIndex \\ images size + 1).
- self formsAreDiffs
- ifFalse: [self image: next]
- ifTrue: [self image getCanvas translucentImage: next at: next offset]..
- self changed .
- d := (delays at: imageIndex) ifNil: [0].
- nextTime := Time millisecondClockValue + d
- !
Item was changed:
----- Method: AnimatedImageMorph>>stepTime: (in category 'stepping and presenter') -----
stepTime: anInteger
+ stepTime _ anInteger!
- stepTime := anInteger!
Item was added:
+ ----- Method: AnimatedImageMorph>>steppingString (in category 'stepping and presenter') -----
+ steppingString
+ ^ (stepper
+ ifTrue: ['<on>']
+ ifFalse: ['<off>']), 'stepping' translated!
Item was added:
+ ----- Method: AnimatedImageMorph>>toggleStepping (in category 'stepping and presenter') -----
+ toggleStepping
+ self wantsSteps
+ ifTrue: [stepper := stepper not].
+ stepper ifTrue:[self startStepping]
+ ifFalse:[self stopStepping].
+
+ !
More information about the Squeak-dev
mailing list
|