[Cuis-dev] minimum requirements for a BoxMorph subclass

Mariano Montone marianomontone at gmail.com
Sun Dec 15 09:51:39 PST 2024


You are forgetting to call to super. Always consider that when you are 
overriding a method.

It works. Look at screenshot attached.

El 15/12/24 a las 13:41, Mark Volkmann escribió:
> On Sun, Dec 15, 2024 at 7:37 AM Mariano Montone via Cuis-dev 
> <cuis-dev at lists.cuis.st> wrote:
>
>     Hi Mark,
>
>     El 14/12/24 a las 22:42, Mark Volkmann via Cuis-dev escribió:
>>     I'm trying to understand what is required to create a subclass
>>     ofBoxMorph. I know I need to implement thedrawOn:instance method.
>>     And I believe that depending on how I implement that, I need to
>>     implement therequiresVectorCanvasmethod to return true.
>>
>>     Is anything else required? I think more must be required, because
>>     I can't get a basic example to work doing only those things.
>     Have you tried browsing BoxMorph hierarchy and looking at its
>     subclasses?
>
>
> Yes. In particular I looked at ColoredBoxMorph. That has no class 
> methods and 6 instance methods. The only method that does something 
> not directly related to color is color: which sends #redrawNeeded to 
> self when the color is changed. The initialize method sends #color: 
> with the default color, so I thought perhaps when subclassing 
> BoxMorph, I need to send #redrawNeeded. I added the following instance 
> method, but that didn't help.
>
> initialize
>     super initialize.
>     self redrawNeeded
>
>>
>>     I'd especially appreciate it if someone can tell me how I could
>>     have determined the answer on my own by looking at the source. I
>>     tried to do that and failed.
>
>     How is it failing? Perhaps attach example of what you are trying
>     to do ... it shouldn't be much more than implementing a #drawOn:
>     method ...
>
>
> If I create the class Try1 as a subclass of Morph, add the following 
> drawOn: method, and evaluate Try1 new openInWorld in a workspace, it 
> works as expected.
>
> drawOn: aCanvas
>     aCanvas class name print.
>     aCanvas strokeWidth: 10 color: Color red do: [
>         aCanvas
>             moveTo: 100 @ 100;
>             lineTo: 200 @ 200
>     ].
>
> If I create the class Try2 ais a subclass or PlacedMorph, add the same 
> drawOn: method, and evaluate Try2 new openInWorld in a workspace, it 
> also works.
>
> But if I create the class Try3 as a subclass of BoxMorph, add the same 
> drawOn: method, and evaluate Try3 new openInWorld in a workspace, it 
> does not work. I get the error "MessageNotUnderstood: 
> HybridCanvas>>strokeWidth:color:do:". I understand that is because 
> BoxMorph uses HybridCanvas by default instead of VectorCanvas, so I 
> added the instance method requiresVectorCanvas which returns true. 
> That eliminates the eror, but doesn't result in rendering anything. So 
> it's not clear to me what I'm missing in my Try3 class.
>
> -- 
> R. Mark Volkmann
> Object Computing, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20241215/449433d7/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Captura de pantalla -2024-12-15 14-49-46.png
Type: image/png
Size: 72327 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20241215/449433d7/attachment-0001.png>


More information about the Cuis-dev mailing list