<div dir="ltr"><div dir="ltr">On Sun, Dec 15, 2024 at 7:37 AM Mariano Montone via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>> wrote:<br></div><div class="gmail_quote gmail_quote_container"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><u></u>
<div>
<p>Hi Mark,<br>
</p>
<div>El 14/12/24 a las 22:42, Mark Volkmann
via Cuis-dev escribió:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>I'm trying to understand what is required to create a
subclass of<span> </span><font face="monospace">BoxMorph</font>. I know I need to
implement the<span> </span><font face="monospace">drawOn:</font><span> </span>instance
method. And I believe that depending on how I implement
that, I need to implement the<span> </span><font face="monospace">requiresVectorCanvas</font><span> </span>method to
return true.</div>
<div><br>
</div>
<div>Is anything else required? I think more must be required,
because I can't get a basic example to work doing only those
things.</div>
</div>
</div>
</blockquote>
Have you tried browsing BoxMorph hierarchy and looking at its
subclasses?<br></div></blockquote><div><br></div><div>Yes. In particular I looked at <font face="monospace">ColoredBoxMorph</font>. That has no class methods and 6 instance methods. The only method that does something not directly related to color is <font face="monospace">color:</font> which sends <font face="monospace">#redrawNeeded</font> to <font face="monospace">self</font> when the color is changed. The <font face="monospace">initialize</font> method sends <font face="monospace">#color:</font> with the default color, so I thought perhaps when subclassing <font face="monospace">BoxMorph</font>, I need to send <font face="monospace">#redrawNeeded</font>. I added the following instance method, but that didn't help. </div><div><br></div><div><font face="monospace">initialize<br> super initialize.<br> self redrawNeeded</font><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div><br>
</div>
<div>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.</div>
</div>
</div>
</blockquote>
<p>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 ...</p></div></blockquote><div><br></div><div>If I create the class <font face="monospace">Try1</font> as a subclass of <font face="monospace">Morph</font>, add the following <font face="monospace">drawOn:</font> method, and evaluate <font face="monospace">Try1</font> new openInWorld in a workspace, it works as expected.</div></div><div><br clear="all"></div><div><font face="monospace">drawOn: aCanvas<br> aCanvas class name print.<br> aCanvas strokeWidth: 10 color: Color red do: [<br> aCanvas<br> moveTo: 100 @ 100;<br> lineTo: 200 @ 200<br> ].</font><br></div><div><br></div><div>If I create the class <font face="monospace">Try2</font> ais a subclass or <font face="monospace">PlacedMorph</font>, add the same <font face="monospace">drawOn:</font> method, and evaluate <font face="monospace">Try2 new openInWorld</font> in a workspace, it also works.</div><div><br></div><div>But if I create the class <font face="monospace">Try3</font> as a subclass of <font face="monospace">BoxMorph</font>, add the same <font face="monospace">drawOn:</font> method, and evaluate <font face="monospace">Try3 new openInWorld</font> in a workspace, it does not work. I get the error <span style="font-family:monospace">"MessageNotUnderstood: HybridCanvas>>strokeWidth:color:do:"</span><font face="arial, sans-serif">. I understand that is because </font><font face="monospace">BoxMorph</font><font face="arial, sans-serif"> u</font>ses <font face="monospace">HybridCanvas</font> by default instead of <font face="monospace">VectorCanvas</font>, so I added the instance method <font face="monospace">requiresVectorCanvas</font> which returns <font face="monospace">true</font>. That eliminates the eror, but doesn't result in rendering anything. So it's not clear to me what I'm missing in my <font face="monospace">Try3</font> class.</div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div><font face="arial, helvetica, sans-serif">R. Mark Volkmann</font></div><div><span style="font-size:12.8px"><font face="arial, helvetica, sans-serif">Object Computing, Inc.</font></span></div></div></div></div></div></div></div></div></div>