[Pkg] The Trunk: ST80-nice.160.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Oct 11 21:23:22 UTC 2013


Nicolas Cellier uploaded a new version of ST80 to project The Trunk:
http://source.squeak.org/trunk/ST80-nice.160.mcz

==================== Summary ====================

Name: ST80-nice.160
Author: nice
Time: 11 October 2013, 11:22:37.521 pm
UUID: cbfebbce-1979-4817-b572-3486db0ebdae
Ancestors: ST80-nice.159

Populate BitBltDisplayScanner with MVC compatibility methods.

=============== Diff against ST80-nice.159 ===============

Item was added:
+ ----- Method: BitBltDisplayScanner>>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 |
+ 			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:[
+ 					font displayString: string on: bitBlt 
+ 						from: startIndex to: lastDisplayableIndex at: lastPos kern: kern].
+ 				stop
+ 			] whileFalse.
+ 			fillBlt == nil ifFalse:
+ 				[fillBlt destX: destX destY: lineY width: visibleRectangle right-destX height: lineHeight; copyBits].
+ 			lineY := lineY + lineHeight]]!

Item was added:
+ ----- Method: BitBltDisplayScanner>>initializeFromParagraph:clippedBy: (in category '*ST80-Support') -----
+ initializeFromParagraph: aParagraph clippedBy: clippingRectangle
+ 
+ 	super initializeFromParagraph: aParagraph clippedBy: clippingRectangle.
+ 	bitBlt := BitBlt asGrafPort toForm: aParagraph destinationForm.
+ 	bitBlt sourceX: 0; width: 0.	"Init BitBlt so that the first call to a primitive will not fail"
+ 	bitBlt combinationRule:
+ 		((Display depth = 1)
+ 			ifTrue:
+ 				[aParagraph rule]
+ 			ifFalse:
+ 				[Form paint]).
+ 	bitBlt colorMap:
+ 		(Bitmap with: 0      "Assumes 1-bit deep fonts"
+ 				with: (bitBlt destForm pixelValueFor: aParagraph foregroundColor)).
+ 	bitBlt clipRect: clippingRectangle!



More information about the Packages mailing list