2010/3/20 Stéphane Ducasse <[email protected]>:
> Hi nicolas
>
> last week you pushed some squeak rendering fixes to pharo and I was wondering 
> if the recent ones on squeak should be considered.
>
> Stef
>
>

Yes.
I just analyzed the diffs between CharacterScanner & subclasses with
MultiCharacterScanner family and fixed the diffs.
It would be far better to have Test Cases !!!
Last change is a just a clean-up, Writing the whileFalse depending on
true exit condition rather than an infinite loop with exit returns
seems cleaner to me.

Nicolas

>
> [email protected]
>
>  to squeak-dev, packages
> show details 6:44 PM (15 hours ago)
> Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
> http://source.squeak.org/trunk/Graphics-nice.121.mcz
>
> ==================== Summary ====================
>
> Name: Graphics-nice.121
> Author: nice
> Time: 19 March 2010, 6:44:28.896 pm
> UUID: 62e03b94-65c3-614f-b0f0-76c0476055e7
> Ancestors: Graphics-ar.120
>
> 1) Add some missing pendingKernX reset.
> 2) explicit a loop dependency on stopCondition
>
> =============== Diff against Graphics-ar.120 ===============
>
> Item was changed:
>  ----- Method: CharacterScanner>>plainTab (in category 'scanning') -----
>  plainTab
>       "This is the basic method of adjusting destX for a tab."
>       destX := (alignment = Justified and: [self leadingTab not])
>               ifTrue:         "embedded tabs in justified text are weird"
>                       [destX + (textStyle tabWidth - (line 
> justifiedTabDeltaFor: spaceCount)) max: destX]
>               ifFalse:
>                       [textStyle nextTabXFrom: destX
>                               leftMargin: leftMargin
> +                               rightMargin: rightMargin].
> +       pendingKernX := 0.!
> -                               rightMargin: rightMargin]!
>
> Item was changed:
>  ----- Method: DisplayScanner>>paddedSpace (in category 'stop conditions') 
> -----
>  paddedSpace
>       "Each space is a stop condition when the alignment is right justified.
>       Padding must be added to the base width of the space according to
>       which space in the line this space is and according to the amount of
>       space that remained at the end of the line when it was composed."
>
>       spaceCount := spaceCount + 1.
>       destX := destX + spaceWidth + (line justifiedPadFor: spaceCount font: 
> font).
>       lastIndex := lastIndex + 1.
> +       pendingKernX := 0.
>       ^ false!
>
> Item was changed:
>  ----- Method: CharacterBlockScanner>>characterBlockAtPoint:index:in: (in 
> category 'scanning') -----
>  characterBlockAtPoint: aPoint index: index in: textLine
>       "This method is the Morphic characterBlock finder.  It combines
>       MVC's characterBlockAtPoint:, -ForIndex:, and buildCharcterBlock:in:"
> +       | runLength lineStop stopCondition |
> -       | runLength lineStop done stopCondition |
>       line := textLine.
>       rightMargin := line rightMargin.
>       lastIndex := line first.
>       self setStopConditions.         "also sets font"
>       characterIndex := index.  " == nil means scanning for point"
>       characterPoint := aPoint.
>       (characterPoint isNil or: [characterPoint y > line bottom])
>               ifTrue: [characterPoint := line bottomRight].
>       (text isEmpty or: [(characterPoint y < line top or: [characterPoint x < 
> line left])
>                               or: [characterIndex notNil and: [characterIndex 
> < line first]]])
>               ifTrue: [^ (CharacterBlock new stringIndex: line first text: 
> text
>                                       topLeft: line leftmar...@line top 
> extent: 0 @ textStyle lineGrid)
>                                       textLine: line].
>       destX := leftMargin := line leftMarginForAlignment: alignment.
>       destY := line top.
>       runLength := text runLengthFor: line first.
>       characterIndex
>               ifNotNil:       [lineStop := characterIndex  "scanning for 
> index"]
>               ifNil:  [lineStop := line last  "scanning for point"].
>       runStopIndex := lastIndex + (runLength - 1) min: lineStop.
>       lastCharacterExtent := 0 @ line lineHeight.
>       spaceCount := 0.
>
> +       [
> +               stopCondition := self scanCharactersFrom: lastIndex to: 
> runStopIndex
> -       done  := false.
> -       [done] whileFalse:
> -               [stopCondition := self scanCharactersFrom: lastIndex to: 
> runStopIndex
>                       in: text string rightX: characterPoint x
>                       stopConditions: stopConditions kern: kern.
> +               "see setStopConditions for stopping conditions for character 
> block operations."
> -               "see setStopConditions for stopping conditions for character 
> block      operations."
>               self lastCharacterExtentSetX: (specialWidth
>                       ifNil: [font widthOf: (text at: lastIndex)]
>                       ifNotNil: [specialWidth]).
> +               self perform: stopCondition
> +       ] whileFalse.
> +       characterIndex
> +               ifNil: [
> +                       "Result for characterBlockAtPoint: "
> +                       (stopCondition ~~ #cr and: [ lastIndex == line last
> +                               and: [ aPoint x > ((characterPoint x) + 
> (lastCharacterExtent x / 2)) ]])
> +                                       ifTrue: [ "Correct for right half of 
> last character in line"
> +                                               ^ (CharacterBlock new 
> stringIndex: lastIndex + 1
> +                                                               text: text
> +                                                               topLeft: 
> characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 0)
> +                                                               extent:  0 @ 
> lastCharacterExtent y)
> +                                                       textLine: line ].
> +                               ^ (CharacterBlock new
> +                                       stringIndex: lastIndex
> +                                       text: text topLeft: characterPoint + 
> (font descentKern @ 0)
> +                                       extent: lastCharacterExtent - (font 
> baseKern @ 0))
> +                                                       textLine: line]
> +               ifNotNil: ["Result for characterBlockForIndex: "
> +                               ^ (CharacterBlock new
> +                                       stringIndex: characterIndex
> +                                       text: text topLeft: characterPoint + 
> ((font descentKern) - kern @ 0)
> +                                       extent: lastCharacterExtent)
> +                                                       textLine: line]!
> -               (self perform: stopCondition) ifTrue:
> -                       [characterIndex
> -                               ifNil: [
> -                                       "Result for characterBlockAtPoint: "
> -                                       (stopCondition ~~ #cr and: [ 
> lastIndex == line last
> -                                               and: [ aPoint x > 
> ((characterPoint x) + (lastCharacterExtent x / 2)) ]])
> -                                                       ifTrue: [ "Correct 
> for right half of last character in line"
> -                                                               ^ 
> (CharacterBlock new stringIndex: lastIndex + 1
> -                                                                             
>   text: text
> -                                                                             
>   topLeft: characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 
> 0)
> -                                                                             
>   extent:  0 @ lastCharacterExtent y)
> -                                                                       
> textLine: line ].
> -                                               ^ (CharacterBlock new 
> stringIndex: lastIndex
> -                                                       text: text topLeft: 
> characterPoint + (font descentKern @ 0)
> -                                                       extent: 
> lastCharacterExtent - (font baseKern @ 0))
> -                                                                       
> textLine: line]
> -                               ifNotNil: ["Result for 
> characterBlockForIndex: "
> -                                               ^ (CharacterBlock new 
> stringIndex: characterIndex
> -                                                       text: text topLeft: 
> characterPoint + ((font descentKern) - kern @ 0)
> -                                                       extent: 
> lastCharacterExtent)
> -                                                                       
> textLine: line]]]!
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to