<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>You are forgetting to call to super. Always consider that when
you are overriding a method.</p>
<p>It works. Look at screenshot attached.</p>
<div class="moz-cite-prefix">El 15/12/24 a las 13:41, Mark Volkmann
escribió:<br>
</div>
<blockquote type="cite"
cite="mid:CAFfRWnUqhbpApqMdPG=zswvpYsoA9vAiLGUdKfhMtWC3=7Kxow@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<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"
moz-do-not-send="true" class="moz-txt-link-freetext">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">
<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>
</blockquote>
</body>
</html>