[squeak-dev] What is the task of NullEncoder?

H. Hirzel hannes.hirzel at gmail.com
Fri Sep 29 15:50:47 UTC 2017


And also note that we have

    Canvas subclass: #PostscriptCanvas

which is in another category 'MorphicExtras-Postscript Canvases'.

Not in the category 'Morphic-Support' in which NullEncoder and Canvas is.

And PostscriptCanvas is for the use in Morphic as it has an instance
variable 'topLevelMorph'.



On 9/29/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
> Tobias
>
> You write that NullEncoder and subclasses could be summarized as
>
>     "Put objects onto another thing with encoding inbetween".
>
> which I think is helpful for understanding.
>
> Maybe we consider for the class comment of NullEncoder
>
>     "Put objects onto another thing with encoding/transformation
> inbetween".
>
>
> But also note that this is not only related to PostscriptCanvas as we have
>
>
> NullEncoder
>     FlattenEncoder
>          Canvas
>              FormCanvas
>
> FormCanvas has some nice usage examples.
>
> #test1 is
>
> test1
> 	"FormCanvas test1"
>
> 	| canvas |
> 	canvas := FormCanvas extent: 200 at 200.
> 	canvas fillColor: (Color black).
> 	canvas line: 10 at 10 to: 50 at 30 width: 1 color: (Color red).
> 	canvas frameRectangle: ((20 at 20) corner: (120 at 120)) width: 4 color:
> (Color green).
> 	canvas point: 100 at 100 color: (Color black).
> 	canvas drawString: 'Hello, World!' at: 40 at 40 font: nil color: (Color
> cyan).
> 	canvas fillRectangle: ((10 at 80) corner: (31 at 121)) color: (Color magenta).
> 	canvas fillOval: ((10 at 80) corner: (31 at 121)) color: (Color cyan).
> 	canvas frameOval: ((40 at 80) corner: (61 at 121)) color: (Color blue).
> 	canvas frameOval: ((70 at 80) corner: (91 at 121)) width: 3 color: (Color
> red alpha: 0.2).
> 	canvas fillRectangle: ((130 at 30) corner: (170 at 80)) color: (Color
> lightYellow).
> 	canvas showAt: 0 at 0.
>
>
> This works fine in an MVC project
>
> --Hannes
>
> On 9/29/17, Tobias Pape <Das.Linux at gmx.de> wrote:
>> Hi Hannes
>>
>>> On 29.09.2017, at 15:21, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>
>>> And there is no 'FlattenEncoder' in Pharo 6
>>
>>>
>>>
>>> On 9/29/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>> We have
>>>>
>>>> NullEncoder
>>>>    FlattenEncoder
>>>>        Canvas
>>
>> So here's the Thing: I looked in 3.8, and there's:
>>
>> Object
>>  NullEncoder 		- Morphic-Postscript Filters
>>   FlattenEncoder	- Morphic-Postscript Filters
>>    Canvas		- Morphic-Support
>>     PostscriptCanvas	- Morphic-Postscript Canvases
>>
>> But also note that they all have a callback via class>>filterSelector:
>>
>> NullEncoder>>filterSelector		^ #writeOnFilterStream:
>> FlattenEncoder>>filterSelector		^ #flattenOnStream:
>> Canvas>>filterSelector			^ #drawOnCanvas:
>> PostscriptCanvas>>filterSelector	^ #fullDrawPostscriptOn:
>>
>> I think part of that happened because this all shared common
>> functionallity,
>> In the sense that all those things "Put objects onto another thing with
>> encoding inbetween".
>> Thinking of things like a n-dimensonal stream or so…
>>
>> I checked and It is like that even in Squeak 3.6, 3.0, 2.8.
>> Squeak 1.13 does not have any of those, and it has no Morphic.
>>
>> Self Morphic does not have such Encoders, tho.
>>
>> In the end it all seems to be related to the PostScript Canvas, which,
>> understandably, has to have access to certain objects and actually has to
>> "encode" them into a file.
>>
>> Best regards
>> 	-Tobias
>>
>>
>>
>>>>
>>>> there are no direct users of NullEncoder and FlattenEncoder.
>>>>
>>>> FlattenEncoder class comment is just
>>>>
>>>>    'The simplest possible encoding:  leave the objects as is.'
>>>>
>>>> a bit terse. Does not really say what the issue is about.
>>>>
>>>>
>>>>
>>>> On 9/29/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>>> P.S.
>>>>>
>>>>> There is no NullEncoder in Pharo.
>>>>>
>>>>> The class Canvas is not in a package 'Morphic-Support' but in a
>>>>> package 'Graphics-Canvas'.
>>>>>
>>>>> There is no 'Graphics-Canvas' package in Squeak. [2]
>>>>>
>>>>> Seems like a good idea to move Canvas and subclasses to a package
>>>>> 'Graphics-Canvas' as well.
>>>>>
>>>>>
>>>>> [2] Graphics package in Squeak 6.0a-17405
>>>>>
>>>>> Graphics-Display Objects
>>>>> Graphics-External-Ffenestri
>>>>> Graphics-Files
>>>>> Graphics-Fonts
>>>>> Graphics-Primitives
>>>>> Graphics-Text
>>>>> Graphics-Transformations
>>>>> GraphicsTests-Files
>>>>> GraphicsTests-Primitives
>>>>> GraphicsTests-Text
>>>>>
>>>>> On 9/29/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>>>> Hello
>>>>>>
>>>>>> NullEncoder is subclass of object ([1] for full hierachy). It is a
>>>>>> superclass of Canvas.
>>>>>>
>>>>>> What is the function of NullEncoder. No class comment so far?
>>>>>>
>>>>>> Regards
>>>>>> Hannes
>>>>>>
>>>>>>
>>>>>> -------------------------------------------------------------------------------------------------------------------------------
>>>>>>
>>>>>> [1] NullEncoder printHierarchy '
>>>>>> ProtoObject #()
>>>>>> 	Object #()
>>>>>> 		NullEncoder #(''target'' ''filterSelector'')
>>>>>> 			FlattenEncoder #()
>>>>>> 				ByteEncoder #()
>>>>>> 					PrintableEncoder #()
>>>>>> 						PostscriptEncoder #()
>>>>>> 							PostscriptEncoderToDisk #()
>>>>>> 						PropertyListEncoder #()
>>>>>> 				Canvas #()
>>>>>> 					ColorMappingCanvas #(''myCanvas'')
>>>>>> 						AlphaBlendingCanvas #(''alpha'')
>>>>>> 						ShadowDrawingCanvas #(''shadowColor'')
>>>>>> 					FormCanvas #(''origin'' ''clipRect'' ''form'' ''port''
>>>>>> ''shadowColor'')
>>>>>> 						BalloonCanvas #(''transform'' ''colorTransform'' ''engine''
>>>>>> ''aaLevel'' ''deferred'')
>>>>>> 						BlueFormCanvas #()
>>>>>> 						ColorPatchCanvas #(''stopMorph'' ''foundMorph'' ''doStop'')
>>>>>> 						MultiResolutionCanvas #(''deferredMorphs'')
>>>>>> 					PluggableCanvas #()
>>>>>> 						BufferedCanvas #(''remote'' ''previousVersion'' ''lastTick''
>>>>>> ''dirtyRect'' ''mirrorOfScreen'')
>>>>>> 						CachingCanvas #(''cacheCanvas'' ''mainCanvas'')
>>>>>> 						ClippingCanvas #(''canvas'' ''clipRect'')
>>>>>> 						MultiCanvas #(''canvases'' ''extent'' ''depth'')
>>>>>> 						NullCanvas #()
>>>>>> 					PostscriptCanvas #(''origin'' ''clipRect'' ''currentColor''
>>>>>> ''shadowColor'' ''currentFont'' ''morphLevel'' ''gstateStack''
>>>>>> ''fontMap'' ''usedFonts'' ''psBounds'' ''topLevelMorph''
>>>>>> ''initialScale'' ''savedMorphExtent'' ''currentTransformation''
>>>>>> ''printSpecs'' ''pages'')
>>>>>> 						DSCPostscriptCanvas #()
>>>>>> 							DSCPostscriptCanvasToDisk #()
>>>>>> 						EPSCanvas #()
>>>>>> 					RemoteCanvas #(''innerClipRect'' ''outerClipRect'' ''transform''
>>>>>> ''connection'' ''shadowColor'')'
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>>
>


More information about the Squeak-dev mailing list