Loading... |
Reply to author |
Edit post |
Move post |
Delete this post |
Delete this post and replies |
Change post date |
Print post |
Permalink |
Raw mail |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
What do you suppose about this ?
from Hans the Byte Surfer. ViewManager subclass: #GraphicsDemo instanceVariableNames: 'pen graphs selectedGraph pane bitmap ' classVariableNames: 'Count ' poolDictionaries: 'ColorConstants ' ! !GraphicsDemo class methods ! initialize "Private - Set the color count to 0." Count := 0.! ! !GraphicsDemo methods ! animationMenu "Private - Answer the animation menu." ^(Menu labels: 'Big red\Little blue\Spider\Stop\Clear' withCrs lines: #() selectors: #(bigRed littleBlue spider deactivateAnimation clearAnimation)) title: '&Animation'; owner: self; yourself! bigRed "Private - Create a red animated mandala." | mandala | mandala := AnimatedObject mandala: 11 diameter: 72 color: ClrRed. pane addObject: mandala. mandala display! cleanUp "Private - Clean up GraphicsDemo before closing." self clearAnimation. bitmap notNil ifTrue: [bitmap release].! clearAnimation "Private - Clear the animation." | objects | objects := pane contents. pane clear. objects do: [: each | each frames do: [: f | f release]]! close: aPane "Private - Release the bitmaps of the animated objects." Smalltalk isRunTime ifTrue: [ (MessageBox confirm: 'Are you sure you want to exit?') ifTrue: [ self cleanUp. self close. ^Smalltalk exit] ifFalse: [ ^self]] ifFalse: [ self cleanUp. Transcript notNil ifTrue:[ Transcript enableDemo]. ^super close].! copyMetaFile "Copy a metafile to the clipboard." | storedPicture | storedPicture := pen segments at: (graphs at: #mandala). storedPicture isNil ifTrue: [^self]. storedPicture pen width: pen width; height: pen height. Clipboard setMetaFile: storedPicture! deactivateAnimation "Private - Stop the animation." pane stopAll! display: aPane "Private - Display aPane contents." selectedGraph isNil ifTrue: [pen erase] ifFalse: [ selectedGraph = #displayBitmap ifTrue: [^self displayBitmap]. graphs at: selectedGraph ifAbsent: [^self]. pen erase. pen drawSegment: (graphs at: selectedGraph)]! displayBitmap "Private - Paste the bitmap." bitmap notNil ifTrue:[ pen copyBitmap: bitmap from: bitmap boundingBox to: (0 @ 0 extent: pen extent)]! drag: aPane "Private - Track the mouse." | animatedObject | animatedObject := aPane childAt: aPane mouseLocation. animatedObject notNil ifTrue: [animatedObject drag: aPane mouseLocation]. aPane when: #button1Move perform: nil! dragon "Private - Draw a dragon pattern where anInteger is the recursion factor." self drawBlockNow: [ pen home; north; dragon: 11] for: #dragon! drawBlock: aBlock for: symbol "Private - Draw the selected graphics in a segment and make a backup." | intState wasActive | wasActive := pane stop. pen erase. selectedGraph := symbol. (graphs includesKey: symbol) ifFalse: [ graphs at: symbol put: (pen retainPicture: aBlock)]. self display: nil. pane makeBackup. wasActive ifTrue: [pane go]! drawBlockNow: aBlock for: symbol "Private - Draw the selected graphics and make a backup of the receiver." | intState wasActive | wasActive := pane stop. pen erase. selectedGraph := symbol. (graphs includesKey: symbol) ifTrue: [self display: nil] ifFalse: [ graphs at: symbol put: (pen drawRetainPicture: aBlock)]. pane makeBackup. wasActive ifTrue: [pane go]! drawMandalas "Private - Draw 8 mandalas." (Commander pen: 8 forDC: pen handle medium: pane) place: (self mainView rectangle extent) // 2; fanOut; up; go: 90; down; mandala: 12 diameter: 170 initDir: 270! drawSpirals "Private - Draw 4 spirals." | commander | commander := (Commander pen: 4 forDC: pen handle medium: pane). commander place: (self mainView rectangle extent) // 2; fanOut; up; go: 90; down. 1 to: 180 do: [: i | commander go: i; turn: 122]! drawWalkLine "Private - Draw rotating lines." | incrX incrY numberOfLines boundX | numberOfLines := 60. incrX := pen width / numberOfLines. incrY := pen height / numberOfLines. boundX := (incrX * (numberOfLines)). 1 to: numberOfLines + 1 do: [: i | pen foreColor: (GraphicsTool paletteIndex: ( (Count := Count + 1) \\ 7 + 1)); place: (i - 1 * incrX) rounded @ 0; goto: (boundX - (i * incrX) @ (i * incrY)) rounded]! drawWith: graphPane "Private - Assign the receiver's pen." pen := graphPane pen! graphicsMenu: aPane "Private - Set the menu for the graph pane." aPane setMenu: ( (Menu labels: '&Walk Line\&Mandala\M&ulti Mandala\&Dragon\Multi &Spiral\&Paste' withCrs lines: #() selectors: #(walkLine mandala multiMandala dragon multiSpiral paste)) title: '&Graphics'; owner: self; yourself)! initWindowSize "Private - Answer default initial window extent." ^Display extent * 7 // 8! littleBlue "Private - Create a blue animated mandala." | mandala | mandala := AnimatedObject mandala: 9 diameter: 48 color: ClrBlue. pane addObject: mandala. mandala display! mandala "Private - Draw a mandala." pen home. self drawBlockNow: [ pen mandala: 20 diameter: pen height * 7 // 8] for: #mandala! mouseDown: aPane "Private - Process a mouse down event." | aPoint animatedObject | aPoint := aPane mouseLocation. animatedObject := aPane childAt: aPoint. animatedObject notNil ifTrue: [ ^aPane when: #button1Move perform: #drag:]! multiMandala "Private - Draw 8 mandalas." self drawBlockNow: [self drawMandalas] for: #multiMandala! multiSpiral "Private - Draw 4 spirals." self drawBlockNow: [self drawSpirals] for: #multiSpiral! open "Open the graphics demo window." graphs := Dictionary new. self label: 'Graphics Demo'; foreColor: ClrBlack; backColor: ClrWhite; when: #close perform: #close:; owner: self. self addSubpane: (pane := AnimationPane new owner: self; when: #getContents perform: #drawWith:; when: #display perform: #display:; when: #button1Down perform: #mouseDown:; when: #getMenu perform: #graphicsMenu:). self openWindow. self menuWindow addMenu: self animationMenu.! paste "Private - Paste a bitmap from the clipboard to window." selectedGraph := #displayBitmap. bitmap notNil ifTrue: [bitmap release]. (bitmap := Clipboard getBitmap) isNil ifTrue: [^self]. self displayBitmap. pane makeBackup! pasteMetaFile "Paste a metafile from the clipboard." | storedPicture | storedPicture := Clipboard getMetaFile. storedPicture isNil ifTrue: [^self]. pen erase. storedPicture play: pen! setScale "Private - Set the scale for displaying selected graph demo." | scale | scale := (pen width * 2 / pen width) @ (pen height * 2 / pen height). (pen setScale: scale) = 1 ifFalse: [^self error: 'setScale error']. self perform: selectedGraph! spider "Private - Create a spider chaser." | spider | spider := AnimatedObject spider: 100. pane addObject: spider. spider endBlock: [: s | Menu message: 'Gotcha!! !!']. spider display. spider animate! walkLine "Private - Draw rotating lines." self drawBlock: [self drawWalkLine] for: #walkLine! ! |
Free forum by Nabble | Edit this page |