[flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO). Why? 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should). 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables. 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds? I could go on… [flame off] It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5. stp -- Stephen Travis Pope Santa Barbara, California, USA
|
> To put it bluntly: I gave porting old-school MVC to Cuis.
> > [flame on] Morphic is miserable and really needs to be replaced by MVC, > though (IMHO). There is no need to replace it: we already have MVC projects alongside morphic projects, so you can choose the framework you want. In fact the top project in Squeak 5.3 is a MVC one. > It would be really nice to have a simple MVC (and display-list graphics) > framework that could be placed on top of several graphics back-ends > including BitBLT, OpenGL and HTML5. I guess now the question is: what features are missing in MVC that you need? Stef |
In reply to this post by Stephen Pope
Hi Stephen,
> 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. Afaik a good equivalent for that separation in Morphic are morph + model. If you are going to develop a sophisticated UI, you can use the ToolBuilder framework, and your tool will be even decoupled from the UI framework.
> 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies.
Morphic uses the composite pattern, too, doesn't it? All morphs are nested in each other, beginning at the root morph (the world), and form a big object tree, just like MVC does. Please correct me if I am wrong.
> 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.
And class View has 13 instance variables. :-) I agree with you that abstract class should not have any unnecessary state, but in fact, graphics aren't a completely abstract domain. A minimum of geometry information
(bounds) is vital for graphic representation, and some node links (submorphs, owner) are vital, too, for navigating through the Morphic tree. Note that Morph even has a cleaned-up state by extracting all non-crucial fields into the extension object.
> 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?
I'm afraid I don't get your point here. My image does not even know the selector #morphBounds. But #extent, #width, and #height, for example, are derived attributes, which means that an implementor only needs to manipulate the single underlying representation,
which is bounds, in order to adjust all specified attributes.
Are you desiring something like an abstract morph interface that does not yet define core and derived attributes? It's true that Morph is not an abstract class (Morph new openInWorld works like a charm), but in which practical example would you need this?
> It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.
That's an interesting thought! As said above, Morphic is a composite framework, too, so couldn't you start by implementing #printHtmlOn: on Morph, next to #drawOn:? But in practice, I guess your desire would be very hard to achieve because HTML5 is a high-level
OO framework while OpenGL operates on a quite low level. HTML5 is kind of a competing object tree against Morphic, so you could either try to keep two trees in sync or rebuild one of the trees periodically, which would be performance-extensive. For OpenGL,
couldn't something like an OpenGLCanvas be a starting point?
Best,
Christoph
Von: Squeak-dev <[hidden email]> im Auftrag von Stephen Pope <[hidden email]>
Gesendet: Samstag, 11. Juli 2020 20:02:37 An: The general-purpose Squeak developers list; Discussion of Cuis Smalltalk Betreff: Re: [squeak-dev] We need to talk about graphics [flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO).
Why?
1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring.
2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies.
The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should).
3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.
4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?
I could go on… [flame off]
It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.
stp
-- Stephen Travis Pope Santa Barbara, California, USA
pastedGraphic.tiff (3K) Download Attachment
Carpe Squeak!
|
In reply to this post by Craig Latta
> On 2020-07-10, at 1:12 AM, Craig Latta <[hidden email]> wrote: > > > Hi Tim-- > >> Seriously. We've been sitting around twiddling thumbs about better >> graphics for decades now. > > I'd like to see a concise description of the problem. You used the > word "better", so I take it you find the current graphics deficient. How? Well, at least in part the issue is that we collectively have been waffling on about 'making better graphics' for about as long as my email record has existed. So it's not solely about what I want, more as case of 'can we try to get something complete?'. For myself, I'd like to see better rendered text and non-orthogonal lines. Circles, for example. My example here is the little collection of gauges I have for my weather station display. The round gauges as originally done looked terrible. Bob A offered a better circle drawing algorithm and with some over sampling it is a lot better - but still ugly. Our typical fonts are ok but could be a lot better. Not to mention the slightly higher level issue of the font/style & tools. We made a few improvements in that area with the Sophie project, way back. Not many things *I* want to do are very performance limited, so that isn't something that exercises *me* but I'm sure others have very different perspectives. I have played a little with a Frank image to see if the Nile/Gezira system as-is does much better. For a circle, for example, it does do somewhat better *if* the stroke alpha is set to ~0.5. I'm way to out of the world of computer graphics to say more than that. I suspect that somewhat decoupling the graphics from explicit pixel considerations might help with handling super-resolution screens nicely. Vector graphics improvements to draw our tools would probably be nice. As I said, it's not so much about what I want as a plea to see if we can actually get *something* done. Lots of us have ideas about what 'something' is. Let's hear some of them. > > I'm interested in the topic, and have some time. At the moment, all > my graphics energy goes into leveraging in SqueakJS what others have > done for web browsers, which is quite a lot. Yeah, and your demos are amazing. tim -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Useful random insult:- The wheel's spinning but the hamster's dead. |
Playing with stuff; tried a WatchMorph to look at circles drawn by Balloon.
Grabbing one via World->new morph->from alphabetical list produces a decently round clockface with a coloured centre section. However, using the debug menu to turn on the anti-aliasing results in a rather ugly lumpiness, as if it were a fruit that has been poked a bit too often to test for ripeness. Weird. The B2Dplugin appears to be active and I can make it do profiling etc that makes it pretty certain it is being used. Is this an ARM/Pi issue... nope, looks the same on a Mac system. tim -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Gotta run, the cat's caught in the printer. |
In reply to this post by HilaireFernandes
Changing the subject line to focus on a specific proposal by Juan Vuletich
for an enhancement to BitBlt rules. The idea originated from discussion on the Cuis list, and the proposal is documented in an opensmalltalk-vm issue here: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 While I am generally familiar with VM issues, I have no experience with BitBlt and I am not sure exactly what needs to be done to make this happen. There are VM (plugin) changes needed, and some image side support will needed as well (at least for fallback code in the image). So - who knows how to make this happen, and how do we make it so? Thanks, Dave On Fri, Jul 03, 2020 at 10:32:17PM +0200, Hilaire wrote: > Le 03/07/2020 ?? 22:21, David T. Lewis a ??crit??: > >>Juan proposed these primitives to speed up the rendering of > >>VectorGraphics Widget Morph. > >I remember a discussion about that, though I don't have a link to it. It > >sounds like we need to follow up on this and make something happen. > > Here it is: > > https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 > > -- > Dr. Geo > http://drgeo.eu > https://pouet.chapril.org/@hilaire > > |
In reply to this post by darth-cheney
Hi Eric, On Mon, Jun 29, 2020 at 4:16 PM Eric Gade <[hidden email]> wrote:
Nile and the graphics engine Gezira written in Nile was quite independent from Squeak. Vanessa made a VM plugin for the C-version of Gezira runtime, and the bindings code issues Gezira requests from Squeak. That part can is reusable. But going through the VM plugin had some overhead, and also Gezira does not on purpose provide optimization for common cases or special cases (such as filling an integer coordinate rectangle with a uniform color, etc.) so performance characteristics was not always a win. There was other comments about JITting. It is potentially a great idea but it'd be a quite effort to make sure the multi core execution (or even using GPU) sane and efficient. -- Yoshiki |
In reply to this post by timrowledge
On Thu, Jul 9, 2020 at 1:40 PM tim Rowledge <[hidden email]> wrote: What are we going to actually try to do here? Who has time/interest/skill? The current implementation probably is not going to work. I think the C-runtime does not work on a 64-bit environment, IIRC. There is a downloadable 'Frank' image that seems to start up ok at http://tinlizzie.org/~ohshima/Frank-170908.zip It is a Squeak 4.4 image as far as I can tell so you need an older VM of roughly that vintage - pre-Spur anyway. As long as the VM plugin mechanism has not changed that much, it should be relatively easy to bring it up to date.
Such an example is using the Squeak-runtime; that is all stream data was processed in the interpreter and each kernel does its job one by one to illustrate that you can have different Nile runtimes and the core idea is very simple. Performance was not a goal for the Squeak-runtime. -- -- Yoshiki |
In reply to this post by timrowledge
On Sat, Jul 11, 2020 at 2:05 PM tim Rowledge <[hidden email]> wrote:
Gezira itself is very consistent. If you see some artifact, it might be because the final step of putting bits generated by Gezira onto the screen has wrong alpha interpretation or such.
-- Yoshiki |
In reply to this post by Stephen Pope
Hi Stephen.
Separation of model, view, and maybe controller-like objects is a choice you can still make in your application designed for and written in Morphic. Try exploring and working with the direct-manipulation concepts Morphic has to offer. Those concepts can speed up the feedback cycle, which can then lead to a better architectural design in your application. Many of your thoughts on a "good OO framework" omits the fact that software rather grows -- refactoring being a vital part in its lifecycle. Happy programming! =) Best, Marcel
|
Free forum by Nabble | Edit this page |