On Mar 20, 2010, at 9:06 PM, Nicolas Cellier wrote: > 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.
did you publish something I should integrate? > It would be far better to have Test Cases !!! Yes I plan to invest on that. > 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 _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
