The Morphic User-Interface Framework
The Morphic User-Interface Framework, by John Maloney of Disney Imagineering R&D
Current Draft: morphic2.pdf (Updated July 24)
Jörn Eyrich (Joern.Eyrich@brokat.com)
Ned Konz (firstname.lastname@example.org)
Question for reviewers:
Should the section on design principles come earlier (right after the introduction)?
I like this chapter very much. I haven't done any Morphic programming yet (so I guess I'm a perfect representative of the target audience). Especially after having read some of the complaints about the complexity that has crept into Morphic over time, it is great to be able to read about the principles and the simple and powerful (my favourite definition for "elegance", btw) ideas behind it and the resulting implementation.
After reading this, I think readers will feel confident to be able to dive into Morphic and learn more about the system by using it.
- regarding the location of the "design principles" section: I think most people want to "dive right in", so I say leave it as it is; and typically, I find it easier to go from the concrete (description) to the more abstract (design principles) that vice versa
- Morphic is sometimes spelled with a capital M, sometimes with a small m
text to be added: +xxx+
text to be deleted: -xxx-
- p.1: ...to create custom widget+s+.
- p.1: speaking of math teachers, there probably should be a reference to the MathMorphs chapter
- p.3: Furthermore, -the- Squeak's ...
- p.3: ... the Squeak development environment itself+.+
- p.3: ... and entire world-'-s in morphic.
- p.3: ... come across +the+ word "morph" ...
- p.11/12/13: in drawOn: and mouseMove:, you use "bounds origin", in mouseDown: you use "self position"; is there a difference? if so, please explain, if not, please use only one
- p.13: you talk of extending the editor with menu commands. at least one example would be nice
- p.14: Dropping the +morph+ reverses ...
- p.17: Input processing is a matter of -any- dispatching +any+ incoming events...
- p.17: you say that "the front-most morph at the event location gets to handle the event"; then you talk about "each canditate morph"; this puzzled me a bit; only in the next paragraph do you say that events can be passed up the owner chain; this should be rearranged
- p.21: Halos allow +manipulation of+ many -of- aspects of a morph ...
- p.21: "... blobs crawl around." maybe this is too "insiderish"...
- p.22: ..., so the+re+ is no display update cost ...
- p.22: ... to compute the +number of+ bytes used ...
- p.22: ... to achieve liveness +is+ the stepping mechanism.
- p.23: ... to predict how +we+ will behave ...
- p.23: While the details differ, +the+ Squeak version ...
- p.24: ... its liveness goal+.+
- p.24: ..., then it -is- must sav-ing-+e+ and restor-ing-+e+ the display pixels ...
From John Maloney:
Thanks, J–rn, for your review and detailed corrections. I've sent a new version to Mark that fixes most of these; the PDF should appear here by
Monday; it's marked as the draft of "July 21". No need for further typo reports based the older version, thanks!
I'd love feedback on the examples, if anyone has the time to work through them. The interaction, drag-and-drop, and animation parts are much more fun to see and touch on the screen than to read about. There isn't much code, but is it a burden to type it in? I could provide a text file for the CD from which one could cut and paste. (I wouldn't want provide it as a filein, since I want the reader to experience the incremental process of creating a new kind of morph from scratch.)
From Ned Konz:
- I enjoyed the chapter. It's a good intro to Morphic.
- The design principles can wait till the end (though you might want to mention near the beginning that they're there).
- Examples were good, and not onerous to type in.
Comments and corrections for the July 20th version:
If I resize the PicoPaintMorph, it causes the old Form (which can be >4MB) to be discarded. However, there hasn't been a garbage collect yet.
- Page 4: "Until the recent addition of 3-D to Morphic...": what has the addition of 3-D done to Morphic?
- Page 4: "incrementally add methods to define -for- each aspect"
- Page 4: "While this presentation is not -be- quite detailed"
- Page 5: just noticed that Color>>wheel: doesn't work with translucency!
- Page 9: (TestMorph>>step): move "angle>=360" line below "self position:" line if you want to do a complete circle (currently does 355 degrees and stops).
- Page 11: (PicoPaint): there is a potential problem here with large Forms.
By repeatedly resizing (esp. with big screens, like my 1600x1200 screen), you can quickly run out of memory and lock the system up! Perhaps limiting the size here would be a good idea (how do we do that?), or forcing a garbage collect upon resizing.
- Page 21: "Halos allow many of +the+ aspects of a morph"
- Page 21: "dragging handles on the morph -it self- +itself+"
- How can I limit the size of my Morph (max/min)?
- Capitalization of Morphic?
- Could you describe how direct manipulation could help you design a composite Morph? (can it?)
- Other tools to work with Morphic design?
- Performance increases with Morphic?
This is great, John! It's a full version of the page you posted on the Swiki long ago! A few bugs:
- page 16, "when its idle" should be "when it's idle"
- page 16, shrinkWrap attribute: can a morph really get smaller than its "minimum size" ? should the text say "whichever is larger" instead of "whichever is smaller" ?
- top of page 17: "and it not so easy" needs another verb somewhere
- harder question. layout updating: how should a person write their own morph that does layout updating? Perhaps it's worth describing, or at least blowing it off as difficult? (ie, "Just use AlignmentMorph, kid" :) )
This is GREAT! A few nits:
Adding Livenes - The ref to the 1981 Larry Tesler article is probalby lost to all but those in the smalltalk community.
Layout Morphs - An example here and under Layout Attributes might help.
Other than that a fantastic chapter.
The chapter was fun to read! And since I haven't done that much with Morphic yes, I probably am part of the right audience :)
The examples made the point. They are so small, so that it didn't feel like a burden at all to type them in. Because of the almost instantaneous feedback it was actually fun to build them. So, I would probably not provide any files to load or cut&paste.
In the PicoPaintMorph I got caught by a little detail, though. Besides having to provide implementations for #mouseDown: and #mouseMove:, I expected to work on the #mouseUp: method as well. (You mention some details regarding "mouse transactions" in the How Morphic Works – Input Processing chapter, but still ... :~)
Link to this Page