[Q][balloon2D] is transparency supported?

Ned Konz ned at squeakland.org
Sat Feb 26 13:07:36 UTC 2005


On Friday 25 February 2005 1:41 pm, Hans Baveco wrote:
> To illustrate my problem, compare the result of the two code fragments, the 
upper one provided by Boris, the second one illustrating what I have been 
doing. I would really like to have the result of the first fragment, but not 
on the Display but on a morph...
[snip]
> >   fs direction: 600 at 300. 
>   fs radial: false.
>   bc := BalloonCanvas on: form "Display" .
>   bc aaLevel: 2.
>   bc drawPolygon: (Array with: 10 at 10 with: 500 at 300 with: 300 @500 with: 50
> @ 300) fillStyle: fs
>      borderWidth: 2
>      borderColor: ((Color red) alpha: 0.3).
>  ^form asMorph openInWorld


The problem is that "form asMorph" makes a Morph that doesn't know how to be 
translucent. Look at ImageMorph>>drawOn:

drawOn: aCanvas
 | style |
 (style _ self borderStyle) ifNotNil:[
  style frameRectangle: bounds on: aCanvas.
 ].
 self isOpaque
  ifTrue:[aCanvas drawImage: image at: self innerBounds origin]
  ifFalse:[aCanvas translucentImage: image at: self innerBounds origin]

So what's the definition of isOpaque?

I don't understand, though, what the distinction between "on the Display" and 
"on a morph" is.

From the graphical point of view, all a Morph does is to draw itself on 
canvases when asked.

So all you need to do is:

drawOn: aCanvas
 aCanvas asBalloonCanvas drawPolygon: ...

or something similar.

As long as "asBalloonCanvas" returns a BalloonCanvas (which FormCanvas does), 
you get the same thing whether the Morph is being rendered to the Display, to 
a form, or is being rendered some other way.

However, because some canvases (notablly the ShadowCanvas used to draw drop 
shadows) don't actually respond to asBalloonCanvas, or return a BalloonCanvas 
when asked, you have to be a little more careful sometimes: either you stick 
to the guaranteed Canvas operations, or you test for whether you got a canvas 
that supports your desired operations. In Connectors (which sometimes draw 
themselves using Bezier curves) I had to test the resultant canvas and use a 
different drawing strategy for shadows.

-- 
Ned Konz
http://bike-nomad.com/squeak/



More information about the Squeak-dev mailing list