Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-nice.238.mcz ==================== Summary ==================== Name: Graphics-nice.238 Author: nice Time: 29 September 2013, 7:06:35.509 pm UUID: f7a0533e-2b32-4908-8666-d26204334a6e Ancestors: Graphics-nice.237 Take font baseKern into account when measuring a String (a small diff with defunct Multi*). Create a specially crafted MeasuringStopConditions and use it when measuringString. This way, initializeStringMeasurer is no longer required and deprecated. =============== Diff against Graphics-nice.237 =============== Item was changed: Object subclass: #CharacterScanner instanceVariableNames: 'destX lastIndex destY stopConditions text textStyle alignment leftMargin rightMargin font line runStopIndex spaceCount spaceWidth emphasisCode kern indentationLevel wantsColumnBreaks pendingKernX' + classVariableNames: 'ColumnBreakStopConditions DefaultStopConditions MeasuringStopConditions PaddedSpaceCondition' - classVariableNames: 'ColumnBreakStopConditions DefaultStopConditions PaddedSpaceCondition' poolDictionaries: 'TextConstants' category: 'Graphics-Text'! !CharacterScanner commentStamp: '<historical>' prior: 0! My instances hold the state associated with scanning text. My subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms.! Item was changed: ----- Method: CharacterScanner class>>initialize (in category 'class initialization') ----- initialize " CharacterScanner initialize " | a | a := TextStopConditions new. a at: 1 + 1 put: #embeddedObject. a at: Space asciiValue + 1 put: #space. a at: Tab asciiValue + 1 put: #tab. a at: CR asciiValue + 1 put: #cr. a at: Character lf asciiValue + 1 put: #cr. DefaultStopConditions := a copy. ColumnBreakStopConditions := a copy. ColumnBreakStopConditions at: TextComposer characterForColumnBreak asciiValue + 1 put: #columnBreak. PaddedSpaceCondition := a copy. PaddedSpaceCondition at: Space asciiValue + 1 put: #paddedSpace. + + MeasuringStopConditions := TextStopConditions new! - ! Item was removed: - ----- Method: CharacterScanner>>initializeStringMeasurer (in category 'initialize') ----- - initializeStringMeasurer - - stopConditions := TextStopConditions new - ! Item was changed: ----- Method: CharacterScanner>>measureString:inFont:from:to: (in category 'scanning') ----- measureString: aString inFont: aFont from: startIndex to: stopIndex + "Measure aString width in given font aFont. + The string shall not include line breaking, tab or other control character." - "WARNING: In order to use this method the receiver has to be set up using #initializeStringMeasurer" destX := destY := lastIndex := 0. pendingKernX := 0. font := aFont. kern := 0 - font baseKern. spaceWidth := font widthOf: Space. + stopConditions := MeasuringStopConditions. + self scanCharactersFrom: startIndex to: stopIndex in: aString rightX: 999999 stopConditions: stopConditions kern: kern. - self scanCharactersFrom: startIndex to: stopIndex in: aString rightX: 999999 stopConditions: stopConditions kern: 0. ^destX! |
Free forum by Nabble | Edit this page |