2013/12/26 Sven Van Caekenberghe <sven@stfx.eu>
I�ll have a look, but I don�t like the extra Stream>>#print:maxDecimalPlaces: method, there are too many already and it does not bring any additional functionality.

Feel free to skip it, it's not absolutely necessary.


On 26 Dec 2013, at 16:46, St�phane Ducasse <stephane.ducasse@inria.fr> wrote:

>
> On 25 Dec 2013, at 23:56, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
>
>>
>> 2013/12/25 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>
>>
>> 2013/12/25 St�phane Ducasse <stephane.ducasse@inria.fr>
>> thanks nicolas.
>> I will give a try.
>>
>>
>> I just made a quick pass in Squeak, analyzed senders of roundTo: and modified a few whose sole intention was printing.
>> This need to be redone in Pharo.
>>
>> Ah, but Squeak has Number>>printOn:maxDecimalPlaces: and printShowingMaxDecimalPlaces: and Stream>>print:maxDecimalPlaces:
>
> I somehow understand why and I think that this is ok to add them to pharo.
>>
>> It would be required to add those messages first.
>>
>>
>> On 24 Dec 2013, at 18:15, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
>>
>>> Yes, you should change the tickPrintBlock because it probably incorrectly use (aFloat roundTo: 0.1) printString.
>>> There is no guaranty that this return the nearest Float to the aimed decimal fraction.
>>> Since this is not the nearest Float, you have additional digits displayed.
>>> The print block should use a selector like printShowingDecimalPlaces: (Squeak) or something equivalent in Pharo (can't remember if the selectors are 100% compatible).
>>>
>>> For completeness, do test these expressions:
>>> (0 to: 10) collect: [:i | (i/10) asFloat].
>>> versus
>>> (0 to: 10) collect: [:i | i*0.1].
>>> versus
>>> (0 to: 10) collect: [:i | (i/10) roundTo: 0.1].
>>>
>>> Only the first one is correct. Trying to roundTo: 0.1 spoils thing because 0.1 is not exactly 1/10 and thus introduce small errors...
>>>
>>>
>>> 2013/12/24 St�phane Ducasse <stephane.ducasse@inria.fr>
>>> Hi (nicolas :))
>>>
>>> I was fixing the sound package and the EnvelopeEditorMorph shows a strange glitch
>>>
>>> EnvelopeEditorMorph openOn: (FMSound brass1) copy title: 'brass1'
>>>
>>> See ^^^^^^^^^^^^^^^^ below
>>>
>>> I have the impression that this related to float printString. Any idea how to fix it?
>>>
>>>
>>>
>>>
>>>
>>> buildLabels
>>> � � � � | scale x1 y1 y2 captionMorph loopStart offset |
>>> � � � � majorTickLength * minorTickLength < 0
>>> � � � � � � � � ifTrue: [ minorTickLength := 0 - minorTickLength ].
>>> � � � � self removeAllMorphs.
>>> � � � � caption ifNotNil:
>>> � � � � � � � � [ captionMorph := StringMorph contents: caption.
>>> � � � � � � � � offset := captionAbove
>>> � � � � � � � � � � � � ifTrue: [majorTickLength abs + captionMorph height + 7]
>>> � � � � � � � � � � � � ifFalse: [2].
>>> � � � � � � � � captionMorph
>>> � � � � � � � � � � � � align: captionMorph bounds bottomCenter
>>> � � � � � � � � � � � � with: self bounds bottomCenter - (0 @ offset).
>>> � � � � � � � � self addMorph: captionMorph].
>>> � � � � tickPrintBlock ifNotNil:
>>> � � � � � � � � � � � � ["Calculate the offset for the labels, depending on whether or not
>>> � � � � � � � � � � � � � 1) there's a caption
>>> � � � � � � � � � � � � below, 2) the labels are above or below the ticks, and 3) the
>>> � � � � � � � � � � � � ticks go up or down"
>>> � � � � � � � � � � � � offset := labelsAbove
>>> � � � � � � � � � � � � � � � � � � � � ifTrue: [majorTickLength abs + minorTickLength abs + 2]
>>> � � � � � � � � � � � � � � � � � � � � ifFalse: [2].
>>> � � � � � � � � � � � � caption
>>> � � � � � � � � � � � � � � � � ifNotNil: [captionAbove ifFalse: [offset := offset + captionMorph height + 2]].
>>> � � � � � � � � � � � � scale := (self innerBounds width - 1) / (stop - start) asFloat.
>>> � � � � � � � � � � � � x1 := self innerBounds left.
>>> � � � � � � � � � � � � y1 := self innerBounds bottom.
>>> � � � � � � � � � � � � y2 := y1 - offset.
>>> � � � � � � � � � � � � "Start loop on multiple of majorTick"
>>> � � � � � � � � � � � � loopStart := (start / majorTick) ceiling * majorTick.
>>> � � � � � � � � � � � � loopStart to: stop
>>> � � � � � � � � � � � � � � � � by: majorTick
>>> � � � � � � � � � � � � � � � � do:
>>> � � � � � � � � � � � � � � � � � � � � [ :v | | x tickMorph |
>>> � � � � � � � � � � � � � � � � � � � � x := x1 + (scale * (v - start)).
>>> � � � � � � � � � � � � � � � � � � � � tickMorph := StringMorph contents: (tickPrintBlock value: v).
>>> � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �^^^^^^^^^^^^^^^^ printString?
>>>
>>> � � � � � � � � � � � � � � � � � � � � tickMorph align: tickMorph bounds bottomCenter with: x @ y2.
>>> � � � � � � � � � � � � � � � � � � � � tickMorph left < self left
>>> � � � � � � � � � � � � � � � � � � � � � � � � ifTrue: [ tickMorph position: self left @ tickMorph top ].
>>> � � � � � � � � � � � � � � � � � � � � tickMorph right > self right
>>> � � � � � � � � � � � � � � � � � � � � � � � � ifTrue: [ tickMorph position: (self right - tickMorph width) @ tickMorph top].
>>> � � � � � � � � � � � � � � � � � � � � self addMorph: tickMorph ]]