All arbitrary shapes are being drawing in the same way and it is enough to
have only one method. Allowing shape to render itself would lead to
misunderstanding: bloc user would have to look into two places (element and
shape) to find out where drawing actually happens.
On Feb 25, 2016 12:56 PM, "stepharo" <[email protected]> wrote:

> To me this is pre optimisation
>
> I do not see why we cannot do
>
> BlElement>>drawOnAthensCanvas: aCanvas
>
>       self shape drawOnAthensCanvas: aCanvas with: self
>
> so far only localBounds from BlElement are used.
>
> And to me this is really strange to have an object responsible for the
> drawing not doing it.
> It blurs the responsibility.
>
> Stef
>
> Le 25/2/16 10:39, Tudor Girba a écrit :
>
>> Hi,
>>
>> Good question.
>>
>> The reason we want to have the morph be responsible because subclasses
>> might decide to draw in a different way regardless of the shape being used.
>> This gives us the maximum freedom for more specific blocs. Still, this is
>> something to experiment with once we have more complicated examples built
>> with Bloc.
>>
>> Cheers,
>> Doru
>>
>>
>> On Feb 25, 2016, at 9:56 AM, stepharo <[email protected]> wrote:
>>>
>>> Hi Blockers
>>>
>>> I do not really understand why drawOnAthensCanvas: is not defined on
>>> BlShape
>>> (especially when we see how many self space are defined in this method.
>>> And this is one of the few things I thought I understood from bloc
>>> (grouping the rendering in a separate object).
>>>
>>>
>>> drawOnAthensCanvas: aCanvas
>>>     "Actually render receiver on aCanvas in local bounds.
>>>     Override to customize.
>>>     aCanvas is an instance of AthensCanvas
>>>     aCanvas must not be nil"
>>>
>>>     | pathTransform |
>>>     pathTransform := aCanvas pathTransform.
>>>     "First we fill"
>>>     pathTransform
>>>         restoreAfter:
>>>             [ | path fillExtent fillTranslation |
>>>             "We fill inside natural element's bounds"
>>>             fillExtent := self shape path fillExtentFor: self shape
>>> inBounds: self localBounds.
>>>             path := self shape path pathOn: aCanvas forExtent:
>>> fillExtent.
>>>             "Translate fill if needed"
>>>             fillTranslation := self shape path
>>>                 fillTranslationFor: self shape
>>>                 inBounds: self localBounds.
>>>             pathTransform translateBy: fillTranslation.
>>>             aCanvas
>>>                 setPaint: self shape fillPaint;
>>>                 drawShape: path ].
>>>     pathTransform
>>>         restoreAfter:
>>>             [ | path strokeExtent strokeTranslation |
>>>             "We stroke inside natural element's bounds"
>>>             strokeExtent := self shape path strokeExtentFor: self shape
>>> inBounds: self localBounds.
>>>             path := self shape path pathOn: aCanvas forExtent:
>>> strokeExtent.
>>>             "Translate stroke if needed"
>>>             strokeTranslation := self shape path
>>>                 strokeTranslationFor: self shape
>>>                 inBounds: self localBounds.
>>>             pathTransform translateBy: strokeTranslation.
>>>             aCanvas
>>>                 setPaint: self shape strokePaint;
>>>                 drawShape: path ]
>>>
>>> --
>> www.tudorgirba.com
>> www.feenk.com
>>
>> "Sometimes the best solution is not the best solution."
>>
>>
>>
>>
>
>

Reply via email to