Question about flushing Display on Canvas
Bert Freudenberg
bert at impara.de
Tue May 3 09:53:05 UTC 2005
Am 02.05.2005 um 23:13 schrieb Lex Spoon:
>
> It would be great if there were a way that was as easy to draw in
> Morphic as Milan is seeking. If you draw onto the Display directly,
> Squeak is smart enough to flush things immediately as you draw. It's
> not fast, but it's easy to use and understand. On the other hand, if
> you play by Morphic's rules, then what can you do?
Implement a drawOn: method ;-)
> It would be great if there were some sort of CanvasMorph. It could be
> used like this:
>
> morph := CanvasMorph new.
> morph openInWorld.
>
> canvas := morph canvas.
> canvas fillColor: (Color yellow).
>
> The response to #canvas, here, would be some kind of canvas that
> automatically sends #changed to the morph whenever a message is
> sent to
> it. You could easily implement such a canvas as subclass of
> PluggableCanvas....
Or, far simpler, just use a block:
============
Morph subclass: #CanvasMorph
instanceVariableNames: 'drawBlock'
classVariableNames: ''
poolDictionaries: ''
category: 'Bert-Bla'
initialize
super initialize.
self color: Color white.
self extent: 400 at 400.
drawBlock: aBlock
drawBlock := aBlock.
self changed.
drawOn: aCanvas
super drawOn: aCanvas.
drawBlock ifNotNil: [
aCanvas
translateBy: self bounds origin
clippingTo: self bounds
during: [:canvas | drawBlock value: canvas]]
============
Then use like
m := CanvasMorph new openInWorld.
to draw:
m drawBlock: [:c |
c line: 10 at 10 to: 100 at 100 color: Color red
]
or
m drawBlock: [:c |
c line: 0 at 0 to: m extent width: 10 color: Color green.
c line: 0 at m height to: m width at 0 width: 10 color: Color green.
]
With the latter you can even resize the morph ...
- Bert -
More information about the Squeak-dev
mailing list
|