Issue 900 in moose-technology: Glamour-Roassal should be able to work with raw ROView not just ROMondrianBuilder
Labels: Type-Defect Priority-Medium
New issue 900 by benjamin...(a)gmail.com: Glamour-Roassal should be able to
work with raw ROView not just ROMondrianBuilder
Hopefully, I've cracked this. In response to my own query: "Could
something like a GLMMorphicRoassalRawRenderer be added to the
Glamour-Roassal interface? - which would pass an unencumbered ROView to
the paintingBlock. It is not really a Glamour-Roassal interface at the
moment, more of a Glamour-Mondrian interface."
With the attached slice you can now go...
browser transmit to: #graphic andShow:
[ :a |
newView: [ ROView new @ RODraggable ] ;
painting: [:view :input | view add: ROElement new]
After loading you can first try the new & old tests
then try 'GLMRawRoassalExamplesBrowser open'
I surprised myself that I got this far. A few times I hit a brick wall and
was going to submit a half done proof-of-concept, but then just kept
digging. Apart from hopefully getting integrated, some critical feedback
would appreciated. A few points for review...
1. I had considered using #viewPrototype: with an instance to copy, but
then I wasn't sure how deep I should copy it to produce a new view. So
using a block with newView: seemed the safer path (and it also feels like
it opens up some interesting possibilities, even if I can't think what they
are at the moment)
2. I noticed that GLMRoassalPresentation>>renderOn: had a flag 'This should
be the responsibility of the view'.
This method was one that I previously copied and modified for
GLMRoassalRawPresentation in my "Interactive Roassal" experiment. There I
removed the calls to #applyLayout and #populateMenuOn since these were MNU
for ROView (which had replaced ROMondrianViewBuilder). This time I pushed
these two calls into ROMondrianViewBuilder>>preOpen, where ROView>>preOpen
is left empty. I'm note sure I'm happy with #preOpen as a name but it was
the best I could come up with, since I also refactored
ROMondrianViewBuilder>>open to use it.
3. GLMMorphicRoassalRenderer>>render: had hardcoded reference to #stack
with "ROMorph on: view stack" so I pushed the required difference into
ROMondrianBuilder>>newMorph and ROView>>newMorph.
4. GLMMorphicRoassalRenderer>>actOnPresentationUpdate had hardcoded use of
#stack in "setView: aView stack" so I pushed that into
ROMondrianViewBuilder>>onMorph: and ROView>>onMorph:
5. GLMMorphicRoassalRenderer>>actOnPresentationUpdate had hardcoded
ROMondrianViewBuilder so I modified this to use the block passed to
6. I copied GLMRoassalMorphicTest to GLMRawRoassalMorphicTest with required
7. I copied GLMRoassalExamplesBrowser to GLMRawRoassalExamplesBrowser with