<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>What would you say didn't work well with Wrapper? What would you
change/fix now? And would you keep the old dependency mechanism or
use announcements?<br>
</p>
<div class="moz-cite-prefix">On 2023-02-28 15:36, Stephen Travis
Pope wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CB6EFE52-B84B-4513-886C-6668F51CDF9B@heaveneverywhere.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div><br>
</div>
Hello Squeakers,
<div><br>
</div>
<div>My reasons for wishing Morphic gone are several:</div>
<div><br>
</div>
<div>1: the mixing of view and controller, which hinders reuse and
multiple viewing;</div>
<div><br>
</div>
<div>2: the poor factoring so that the base Morph class has 6
instance variables and many of the most-used Morph classes
(e.g., PluggableListMorph, PluggableTextMorph) have 20 or more
instance variables, leading to poor garbage collection
performance for complex GUIs;</div>
<div><br>
</div>
<div>3: the thread-unsafe nature of Morphic, and</div>
<div><br>
</div>
<div>4: Morphic isn’t MVC and doesn’t use the dependency mechanism
for updating, leading to poor scalability and multiple viewing.</div>
<div><br>
</div>
<div><br>
</div>
<div>Thank you, Marcel, for letting us know how you think we
should proceed, but I was hoping that this forum was for
discussing alternatives before a single individual starts coding
a new system.</div>
<div><br>
</div>
<div><br>
</div>
<div>I’d like to propose a system like the VisualWorks “Wrapper”
framework (which I admit to being co-author of [with David
Leibs]), which has several advantageous features:</div>
<div><br>
</div>
<div>1: GUIs are composed of nested very simple “wrapper” objects
that handle clipping, translation, scaling, etc. but are not
themselves display objects;</div>
<div><br>
</div>
<div>2: Display methods support bitmaps, graphic contexts or
external vector APIs as output media;</div>
<div><br>
</div>
<div>3: Models are wrapped in ApplicationModel classes making them
more pluggable and reusable via a set of AspectAdaptors and
ValueHolders;</div>
<div><br>
</div>
<div>4: It has a comprehensive collection of widgets;</div>
<div><br>
</div>
<div>5: It has a drag’n’drop and forms-based GUI builder; and</div>
<div><br>
</div>
<div>6: It’s been in use since the late-1980s with only minor
changes.</div>
<div><br>
</div>
<div>Here’s some doc:</div>
<div><br>
</div>
<div>
<div style="display: block;">
<div style="-webkit-user-select: all; -webkit-user-drag:
element; display: inline-block;" class="apple-rich-link"
draggable="true" role="link"
data-url="http://www.esug.org/data/Old/vw-tutorials/vw25/cb25.pdf"><a
style="border-radius:10px;font-family:-apple-system,
Helvetica, Arial,
sans-serif;display:block;-webkit-user-select:none;width:228px;user-select:none;-webkit-user-modify:read-only;user-modify:read-only;overflow:hidden;text-decoration:none;"
class="lp-rich-link" rel="nofollow"
href="http://www.esug.org/data/Old/vw-tutorials/vw25/cb25.pdf"
dir="ltr" role="button" draggable="false" width="228"
moz-do-not-send="true">
<table
style="table-layout:fixed;border-collapse:collapse;width:228px;background-color:#E5E6E9;font-family:-apple-system,
Helvetica, Arial, sans-serif;"
class="lp-rich-link-emailBaseTable" width="228"
cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td vertical-align="center" align="center"><img
style="width:228px;filter:brightness(0.97);height:294px;"
draggable="false"
class="lp-rich-link-mediaImage"
alt="preview.png"
src="cid:part1.7vti7S5O.JNLd6Ht8@yahoo.com"
width="228" height="294"></td>
</tr>
<tr>
<td vertical-align="center">
<table style="font-family:-apple-system,
Helvetica, Arial,
sans-serif;table-layout:fixed;background-color:rgba(229,
230, 233, 1);" class="lp-rich-link-captionBar"
width="228" cellspacing="0" cellpadding="0"
bgcolor="#E5E6E9">
<tbody>
<tr>
<td style="padding:8px 0px 8px 0px;"
class="lp-rich-link-captionBar-textStackItem">
<div style="max-width:100%;margin:0px 16px
0px 16px;overflow:hidden;"
class="lp-rich-link-captionBar-textStack">
<div
style="word-wrap:break-word;font-weight:500;font-size:12px;overflow:hidden;text-overflow:ellipsis;text-align:left;"
class="lp-rich-link-captionBar-textStack-topCaption-leading"><a
rel="nofollow"
href="http://www.esug.org/data/Old/vw-tutorials/vw25/cb25.pdf"
style="text-decoration: none"
draggable="false"
moz-do-not-send="true"><font
style="color: rgba(0, 0, 0,
0.847059);" color="#272727">cb25</font></a></div>
<div
style="word-wrap:break-word;font-weight:400;font-size:11px;overflow:hidden;text-overflow:ellipsis;text-align:left;"
class="lp-rich-link-captionBar-textStack-bottomCaption-leading"><a
rel="nofollow"
href="http://www.esug.org/data/Old/vw-tutorials/vw25/cb25.pdf"
style="text-decoration: none"
draggable="false"
moz-do-not-send="true"><font
style="color: rgba(0, 0, 0,
0.498039);" color="#808080">PDF
Document · 2.3 MB</font></a></div>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</a></div>
</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>stp</div>
<div>
<div>
<meta charset="UTF-8">
<br class="Apple-interchange-newline" style="font-family:
"Times New Roman"; font-style: normal;
font-variant-caps: normal; font-weight: 400; letter-spacing:
normal; orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration: none;
font-size: 16px; caret-color: rgb(0, 0, 0); color: rgb(0, 0,
0);">
<span style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; caret-color: rgb(0, 0, 0);
color: rgb(0, 0, 0); font-family: HelveticaNeue; font-size:
12px; float: none; display: inline !important;">--------</span><br
style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; caret-color: rgb(0, 0, 0);
color: rgb(0, 0, 0); font-family: HelveticaNeue; font-size:
12px;">
<br style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; caret-color: rgb(0, 0, 0);
color: rgb(0, 0, 0); font-family: HelveticaNeue; font-size:
12px;">
<span style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; caret-color: rgb(0, 0, 0);
color: rgb(0, 0, 0); font-family: HelveticaNeue; font-size:
12px; float: none; display: inline !important;">Stephen
Travis Pope Ojai,</span><span style="font-style: normal;
font-variant-caps: normal; font-weight: 400; letter-spacing:
normal; orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration: none;
caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family:
HelveticaNeue; font-size: 12px; float: none; display: inline
!important;"> </span><span style="font-style: normal;
font-variant-caps: normal; font-weight: 400; letter-spacing:
normal; orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration: none;
caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family:
HelveticaNeue; font-size: 12px; float: none; display: inline
!important;">California, USA</span><br style="font-style:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; orphans: auto; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
widows: auto; word-spacing: 0px; -webkit-text-size-adjust:
auto; -webkit-text-stroke-width: 0px; text-decoration: none;
caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family:
HelveticaNeue; font-size: 12px;">
<span style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-family: HelveticaNeue;
font-size: 12px; caret-color: rgb(0, 0, 0); color: rgb(0, 0,
0);"> </span><span style="font-style: normal;
font-variant-caps: normal; font-weight: 400; letter-spacing:
normal; orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration: none;
font-family: HelveticaNeue; font-size: 12px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"></span><span
style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; caret-color: rgb(0, 0, 0);
color: rgb(0, 0, 0); font-family: HelveticaNeue; font-size:
12px;"></span><span style="font-family: "Times New
Roman"; font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"></span><span
style="font-family: "Times New Roman"; font-style:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; orphans: auto; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
widows: auto; word-spacing: 0px; -webkit-text-size-adjust:
auto; -webkit-text-stroke-width: 0px; text-decoration: none;
caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-size:
16px;"></span><span style="caret-color: rgb(0, 0, 0); color:
rgb(0, 0, 0); font-family: "Times New Roman";
font-size: 18px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; orphans:
auto; text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none;"></span><span><img
alt="pastedGraphic.tiff"
src="cid:55B397C7-3D20-4E60-A051-4564245235A7@sd.cox.net"
moz-do-not-send="true"></span>
<meta charset="UTF-8">
<font style="font-style: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; orphans: auto;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);" face="HelveticaNeue"><span
style="font-style: normal; font-size: 12px;"><br>
<a class="moz-txt-link-freetext" href="http://HeavenEverywhere.com">http://HeavenEverywhere.com</a></span></font>
<div style="font-family: "Times New Roman";
font-style: normal; font-variant-caps: normal; font-weight:
400; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"><font
style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration: none;"
face="HelveticaNeue"><span style="font-style: normal;
font-size: 12px;"> <a class="moz-txt-link-freetext" href="http://FASTLabInc.com">http://FASTLabInc.com</a></span></font></div>
<div style="font-family: "Times New Roman";
font-style: normal; font-variant-caps: normal; font-weight:
400; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"><font
style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration: none;"
face="HelveticaNeue"><span style="font-style: normal;
font-size: 12px;">
<a class="moz-txt-link-freetext" href="https://vimeo.com/user19434036/videos">https://vimeo.com/user19434036/videos</a></span></font></div>
<div style="font-family: "Times New Roman";
font-style: normal; font-variant-caps: normal; font-weight:
400; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"><font
style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration: none;"
face="HelveticaNeue"><span style="font-style: normal;
font-size: 12px;"> </span></font><span
style="font-size: 12px; font-family: HelveticaNeue;"><a class="moz-txt-link-freetext" href="http://heaveneverywhere.com/Reflections">http://heaveneverywhere.com/Reflections</a></span></div>
<div style="font-family: "Times New Roman";
font-style: normal; font-variant-caps: normal; font-weight:
400; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto; -webkit-text-stroke-width:
0px; text-decoration: none; font-size: 16px; caret-color:
rgb(0, 0, 0); color: rgb(0, 0, 0);"><font
style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration: none;"
face="HelveticaNeue"><span style="font-style: normal;
font-size: 12px;"><br>
</span></font><br style="caret-color: rgb(0, 0, 0); color:
rgb(0, 0, 0); font-family: "Times New Roman";
font-size: 16px; font-style: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration: none;">
</div>
</div>
<div><br>
<blockquote type="cite">
<div>On Feb 26, 2023, at 1:51 AM, Marcel Taeumel via
Squeak-dev <a class="moz-txt-link-rfc2396E" href="mailto:squeak-dev@lists.squeakfoundation.org"><squeak-dev@lists.squeakfoundation.org></a>
wrote:</div>
<br class="Apple-interchange-newline">
<div>
<div id="__MailbirdStyleContent" style="font-size: 10pt;
font-family: Arial; text-align: left;" dir="ltr"> Hi all
--
<div><br>
</div>
<div>Here is how one would start such an endeavor:</div>
<div><br>
</div>
<div>1. Begin with implementing your new GUI framework
in a repository of your choice.</div>
<div>2. Once it is usable and you have demonstrated that
with some content, tell people about it on the list to
find more contributors for your project.</div>
<div>3. Once your GUI framework (and tools around it) is
mature enough, advocate for being able to tell users
in a fresh Squeak image about it and install it with a
simple button click. We have done this for Git
support, Refactoring tools, Squeak Inbox Talk, Auto
completion, ...</div>
<div><br>
</div>
<div>After that --- projects rarely finish step 1 ---
you could decide to hand over the entire project to
Squeak by integrating it into the Trunk.
Alternatively, one could offer special Squeak bundles
that have our new GUI framework installed and ready to
use. Yet, Step 3 is usually worth pursuing first.</div>
<div><br>
</div>
<div>Here is how NOT to do it:</div>
<div><span style="font-size: 10pt">- Starting some
unfinished experiment and pushing it into Trunk,
hoping that other people will take care of it.</span><br>
</div>
<div>- Having a mature version of your GUI framework in
regular Trunk and still developing it in your personal
repository.<span style="font-size: 10pt"><br>
</span></div>
<div><br>
</div>
<div>At the end of the day, personal time is often spent
more wisely in understanding and using and improving
what is already there. Feel free to start your own
libraries and applications, sure. But having the goal
of replacing something that is already working is
rarely a good idea. Definitely unwise for something as
complex as a GUI framework.</div>
<div><br>
</div>
<div>Did you know that you can implement new widget
libraries on top of Morphic?</div>
<div>- <a class="moz-txt-link-freetext" href="https://github.com/tom95/Pheno">https://github.com/tom95/Pheno</a></div>
<div>- <a class="moz-txt-link-freetext" href="https://github.com/hpi-swa/widgets">https://github.com/hpi-swa/widgets</a></div>
<div><br>
</div>
<div>That said, we should keep on cleaning up the system
to improve modularity (by untangling dependencies) to
be able to unload the things you do not need for your
personal projects such as EToys, MVC, MorphicExtras,
... :-)</div>
<div><br>
</div>
<div>***</div>
<div><br>
</div>
<div>What about Tweak? I think that Tweak has really
good ideas in terms of event processing. Personally, I
don't think that it is better than Morphic, just
different. Yet, it would be nice to have a simple
working version of it in Trunk, like we have with MVC.
Squeak's project abstraction can handle that. Then
people can more easily learn about it and we can
preserve its ideas in executable form.</div>
<div><br>
</div>
<div>Best,</div>
<div>Marcel</div>
<div>
<blockquote class="history_container" type="cite"
style="border-left-style:solid;border-width:1px;
margin-top:20px; margin-left:0px;padding-left:10px;">
<p style="color: #AAAAAA; margin-top: 10px;">Am
25.02.2023 01:23:16 schrieb Jecel Assumpcao Jr
<a class="moz-txt-link-rfc2396E" href="mailto:jecel@merlintec.com"><jecel@merlintec.com></a>:</p>
<div style="font-family:Arial,Helvetica,sans-serif">David
T. Lewis wrote on Fri, 24 Feb 2023 17:48:30 -0500<br>
> On Thu, Feb 23, 2023 at 11:47:12PM -0500,
Benoit St-Jean via Squeak-dev wrote:<br>
> > Nothing prevents us from replacing
Morphic or redesigning it!<br>
> > <br>
> > If Juan was able to do it for Cuis and
Sam Shuster was able to design <br>
> > Pollock for VW, what's stopping us from
even considering that option?<br>
> > <br>
> <br>
> There is absolutely nothing preventing
someone from developing a<br>
> replacement for Morphic in Squeak. In fact,
Squeak provides exactly<br>
> the tools needed to support this. The key
concept is that we can have<br>
> different kinds of Project that can be
defined and built up to support<br>
> entirely new and different user interface
models. Currently we think<br>
> mainly of Morphic and MVC, but there is no
reason at all that someone<br>
> could not build something new and different.<br>
<br>
An example of an alternative GUI was Andreas
Raab's "Tweak", which was<br>
used in the Croquet and Sophie projects.<br>
<br>
<a class="moz-txt-link-freetext" href="http://wiki.squeak.org/squeak/3867">http://wiki.squeak.org/squeak/3867</a><br>
<a class="moz-txt-link-freetext" href="https://en.wikipedia.org/wiki/Tweak_programming_environment">https://en.wikipedia.org/wiki/Tweak_programming_environment</a><br>
<br>
I am not sure why this didn't become an option in
the standard Squeak<br>
distribution.<br>
<br>
Another GUI for Squeak was PenSprites implemented
at Disney. It was a<br>
fraction of the size of Morphic meant for resource
constrained devices.<br>
That remained internal to Disney.<br>
<br>
About MVC and Morphic, you have to remember that
Squeak was created to<br>
implement EToys. EToys projects can have several
things active on the<br>
screen at the same time while MVC is about
switching focus between<br>
objects on the screen as the user interacts with
them. If you start a<br>
fish swimming in circles in one corner of the
screen you don't want it<br>
to freeze up if you start a new drawing in another
corner.<br>
<br>
-- Jecel<br>
<br>
</div>
</blockquote>
</div>
</div>
<br>
</div>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">
</pre>
</blockquote>
</body>
</html>