2013/12/26 Sven Van Caekenberghe <s...@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.duca...@inria.fr> > wrote: > > > > > On 25 Dec 2013, at 23:56, Nicolas Cellier < > nicolas.cellier.aka.n...@gmail.com> wrote: > > > >> > >> 2013/12/25 Nicolas Cellier <nicolas.cellier.aka.n...@gmail.com> > >> > >> 2013/12/25 Stéphane Ducasse <stephane.duca...@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.n...@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.duca...@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 ]] > > >