Protocol viewer ?
Ned Konz
ned at bike-nomad.com
Tue Sep 25 05:18:48 UTC 2001
On Monday 24 September 2001 08:43 pm, Gary McGovern wrote:
> Hello Ned,
> Sorry! my mistake. I should have wrote:
> bill useGradientFill
> but when looking into it I see that the method is coded to use a solid
> fill. Nevertheless:
> bill size
> brings up an error dialogue.
> The protocol is so large that I only tried a number of random messages.
> I'm curious to know the reason why 'bill size' brought up the error. Is it
> because 'size' isn't part of the protocol or some other reason?
size is defined in Object; it's not part of the Morph protocol. When you send
size to bill, you get a walkback that should explain what happened:
Receiver: an AdvancedB3DSceneMorph(3014)
Instance variables:
bounds: 171 at 34 corner: 271 at 132
owner: a SystemWindow(1289)
submorphs: #()
fullBounds: 171 at 34 corner: 271 at 132
color: Color transparent
extension: a MorphExtension (368) [locked] [other: (layoutFrame -> a
LayoutFrame) (layoutProperties -> a LayoutProperties)]
scene: a B3DScene
myRenderer: nil
rotationAngle: 1
stepTime: 0
isRotating: true
oldPoint: nil
headLightStatus: #on
savedHeadLight: nil
Method (temp) variables:
aString: 'AdvancedB3DSceneMorphs are not indexable'
Stack:
AdvancedB3DSceneMorph(Object)>>error:
AdvancedB3DSceneMorph(Object)>>errorNotIndexable
AdvancedB3DSceneMorph(Object)>>size
UndefinedObject>>DoIt
Note the "(Object)" in the call stack; this shows you that the size method
that is being called is defined in Object. This can't be the right one, since
Objects don't know about physical size in pixels (it would have to be in
Morph or a subclass).
> I've been bringing up the protocol browser through the menu icon and it is
> certainly for the correct class.
Well, then, what you probably want to do is to restrict the extent of the
protocol. By using the second button from the left, and selecting Morph, you
won't see the methods from Object, most of which aren't particularly
interesting if you're trying to do 3D or Morphic things. Or choose just the
class in question, or whatever other view you want to see.
If you're trying to examine the size in pixels of the Morph, you should look
at an Inspector (choose "inspect morph"), and note that there is an instance
variable called bounds that is a Rectangle. Now you can look for a method
that will return the extent of that rectangle. Either choose the instance
variable bounds in the Inspector and select "method refs to this inst var",
or in the Protocol Browser, hit the menu button (the left-most one) and
choose "inst var refs". You'll get a list of methods in either case that look
at the bounds variable.
Look through this list until you find "extent", which will return the extent
of the bounds rectangle. Or "width", or "height".
--
Ned Konz
currently: Stanwood, WA
email: ned at bike-nomad.com
homepage: http://bike-nomad.com
More information about the Squeak-dev
mailing list
|