[squeak-dev] The Trunk: ST80-nice.159.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Oct 9 22:38:42 UTC 2013
Nicolas Cellier uploaded a new version of ST80 to project The Trunk:
http://source.squeak.org/trunk/ST80-nice.159.mcz
==================== Summary ====================
Name: ST80-nice.159
Author: nice
Time: 10 October 2013, 12:38:07.936 am
UUID: d712db45-5422-4328-b769-8b2f4c9c0771
Ancestors: ST80-nice.158
Update the MVC character display loop to use lastDisplayableIndex and stopConditionsMustBeReset like the Morphic one.
Reminder: this was for handling the edge case when the first char does not fit the composition rectangle.
=============== Diff against ST80-nice.158 ===============
Item was changed:
----- Method: DisplayScanner>>displayLines:in:clippedBy: (in category '*ST80-Support') -----
displayLines: linesInterval in: aParagraph clippedBy: visibleRectangle
"The central display routine. The call on the primitive
(scanCharactersFrom:to:in:rightX:) will be interrupted according to an
array of stop conditions passed to the scanner at which time the code to
handle the stop condition is run and the call on the primitive continued
until a stop condition returns true (which means the line has
terminated)."
| leftInRun |
"leftInRun is the # of characters left to scan in the current run;
when 0, it is time to call 'self setStopConditions'"
morphicOffset := 0 at 0.
leftInRun := 0.
self initializeFromParagraph: aParagraph clippedBy: visibleRectangle.
ignoreColorChanges := false.
foregroundColor := paragraphColor := aParagraph foregroundColor.
backgroundColor := aParagraph backgroundColor.
aParagraph backgroundColor isTransparent
ifTrue: [fillBlt := nil]
ifFalse: [fillBlt := bitBlt copy. "Blt to fill spaces, tabs, margins"
fillBlt sourceForm: nil; sourceOrigin: 0 at 0.
fillBlt fillColor: aParagraph backgroundColor].
rightMargin := aParagraph rightMarginForDisplay.
lineY := aParagraph topAtLineIndex: linesInterval first.
bitBlt destForm deferUpdatesIn: visibleRectangle while: [
linesInterval do:
[:lineIndex |
+ | string startIndex lastPos runLength stopCondition baselineY lineHeight stop |
- | string startIndex lastPos runLength stopCondition baselineY lineHeight |
line := aParagraph lines at: lineIndex.
lastDisplayableIndex := lastIndex := line first.
leftInRun <= 0
ifTrue: [self setStopConditions. "also sets the font, alignment and emphasisCode"
leftInRun := text runLengthFor: line first].
leftMargin := aParagraph leftMarginForDisplayForLine: lineIndex alignment: alignment.
destX := leftMargin.
lineHeight := line lineHeight.
fillBlt == nil ifFalse:
[fillBlt destX: visibleRectangle left destY: lineY
width: visibleRectangle width height: lineHeight; copyBits].
baselineY := lineY + line baseline.
destY := baselineY - font ascent. "Should have happened in setFont"
runLength := leftInRun.
runStopIndex := lastIndex + (runLength - 1) min: line last.
leftInRun := leftInRun - (runStopIndex - lastIndex + 1).
spaceCount := 0.
string := text string.
self handleIndentation.
[
startIndex := lastIndex.
lastPos := destX at destY.
+ "Reset the stopping conditions of this displaying loop, and also the font."
+ stopConditionsMustBeReset
+ ifTrue:[self setStopConditions].
stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex
in: string rightX: rightMargin stopConditions: stopConditions
kern: kern.
+ stop := self perform: stopCondition.
+ lastDisplayableIndex >= startIndex ifTrue:[
- lastIndex >= startIndex ifTrue:[
font displayString: string on: bitBlt
+ from: startIndex to: lastDisplayableIndex at: lastPos kern: kern].
+ stop
- from: startIndex to: lastIndex at: lastPos kern: kern].
- "see setStopConditions for stopping conditions for displaying."
- self perform: stopCondition
] whileFalse.
fillBlt == nil ifFalse:
[fillBlt destX: destX destY: lineY width: visibleRectangle right-destX height: lineHeight; copyBits].
lineY := lineY + lineHeight]]!
More information about the Squeak-dev
mailing list
|