The Trunk: MorphicExtras-nice.125.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: MorphicExtras-nice.125.mcz

commits-2
Nicolas Cellier uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-nice.125.mcz

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

Name: MorphicExtras-nice.125
Author: nice
Time: 12 October 2013, 1:42:40.518 am
UUID: 8c46c27b-8589-438e-8ecb-a1d593fd2b89
Ancestors: MorphicExtras-nice.124

Make DisplayScanner abstract - Part 3:
Hook the concrete CanvasCharacterScanner subclass

=============== Diff against MorphicExtras-nice.124 ===============

Item was changed:
+ DisplayScanner subclass: #CanvasCharacterScanner
+ instanceVariableNames: 'canvas'
- CharacterScanner subclass: #CanvasCharacterScanner
- instanceVariableNames: 'canvas foregroundColor lineY defaultTextColor'
  classVariableNames: ''
  poolDictionaries: ''
  category: 'MorphicExtras-Support'!
 
+ !CanvasCharacterScanner commentStamp: 'nice 10/12/2013 01:37' prior: 0!
- !CanvasCharacterScanner commentStamp: 'nice 10/6/2013 23:07' prior: 0!
  A CanvasCharacterScanner is displaying characters onto a Morphic canvas.
 
  Instance Variables
  canvas: <Canvas>
- defaultTextColor: <Color>
- foregroundColor: <Color>
- lineY: <Number>
 
  canvas
  - the canvas on which characters are displayed
 
- defaultTextColor
- - the default foreground color for displaying text in absence of other text attributes specification
-
- foregroundColor
- - the foreground color for displaying text, taking TextColor attributes being into account
-
- lineY
- - the distance between destination canvas top and current line top
  !

Item was removed:
- ----- Method: CanvasCharacterScanner>>cr (in category 'stop conditions') -----
- cr
- "When a carriage return is encountered, simply increment the pointer
- into the paragraph."
-
- pendingKernX := 0.
- (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]])
- ifTrue: [lastIndex := lastIndex + 2]
- ifFalse: [lastIndex := lastIndex + 1].
- ^false!

Item was removed:
- ----- Method: CanvasCharacterScanner>>crossedX (in category 'stop conditions') -----
- crossedX
- "This condition will sometimes be reached 'legally' during display, when,
- for instance the space that caused the line to wrap actually extends over
- the right boundary. This character is allowed to display, even though it
- is technically outside or straddling the clipping ectangle since it is in
- the normal case not visible and is in any case appropriately clipped by
- the scanner."
-
- "self fillLeading."
- ^ true !

Item was removed:
- ----- Method: CanvasCharacterScanner>>defaultTextColor (in category 'private') -----
- defaultTextColor
- defaultTextColor ifNil:[defaultTextColor := Color black].
- ^defaultTextColor!

Item was removed:
- ----- Method: CanvasCharacterScanner>>defaultTextColor: (in category 'private') -----
- defaultTextColor: color
- "This defaultTextColor inst var is equivalent to paragraphColor of DisplayScanner."
- defaultTextColor := color.
- !

Item was added:
+ ----- Method: CanvasCharacterScanner>>displayAnchoredMorph: (in category 'displaying') -----
+ displayAnchoredMorph: aMorph
+ "Yet to be defined with appropriate positionning and clipping"!

Item was removed:
- ----- Method: CanvasCharacterScanner>>displayLine:offset:leftInRun: (in category 'scanning') -----
- displayLine: textLine offset: offset leftInRun: leftInRun
- "largely copied from DisplayScanner's routine"
-
- | nowLeftInRun startLoc startIndex stopCondition |
- line := textLine.
- foregroundColor ifNil: [foregroundColor := Color black].
- leftMargin := (line leftMarginForAlignment: alignment) + offset x.
- rightMargin := line rightMargin + offset x.
- lineY := line top + offset y.
- lastIndex := textLine first.
- nowLeftInRun := leftInRun <= 0
- ifTrue:
- [self setStopConditions. "also sets the font"
- text runLengthFor: lastIndex]
- ifFalse: [leftInRun].
- destX := leftMargin.
- runStopIndex := lastIndex + (nowLeftInRun - 1) min: line last.
- spaceCount := 0.
- [
- "remember where this portion of the line starts"
- startLoc := destX @ destY.
- startIndex := lastIndex.
-
- "find the end of this portion of the line"
- stopCondition := self
- scanCharactersFrom: lastIndex
- to: runStopIndex
- in: text string
- rightX: rightMargin
- stopConditions: stopConditions
- kern: kern. "displaying: false"
-
- "display that portion of the line"
- canvas
- drawString: text string
- from: startIndex
- to: lastIndex
- at: startLoc
- font: font
- color: foregroundColor.
-
- "handle the stop condition"
- self perform: stopCondition
- ] whileFalse.
- ^runStopIndex - lastIndex!

Item was added:
+ ----- Method: CanvasCharacterScanner>>displayString:from:to:at: (in category 'displaying') -----
+ displayString: string from: startIndex  to: stopIndex at: aPoint
+ canvas
+ drawString: string
+ from: startIndex
+ to: stopIndex
+ at: aPoint
+ font: font
+ color: foregroundColor.!

Item was removed:
- ----- Method: CanvasCharacterScanner>>endOfRun (in category 'stop conditions') -----
- endOfRun
- "The end of a run in the display case either means that there is actually
- a change in the style (run code) to be associated with the string or the
- end of this line has been reached."
- | runLength |
-
- lastIndex = line last ifTrue: [^true].
- runLength := text runLengthFor: (lastIndex := lastIndex + 1).
- runStopIndex := lastIndex + (runLength - 1) min: line last.
- self setStopConditions.
- ^ false!

Item was added:
+ ----- Method: CanvasCharacterScanner>>fillTextBackground (in category 'displaying') -----
+ fillTextBackground
+ "do nothing"!

Item was removed:
- ----- Method: CanvasCharacterScanner>>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."
-
- destX := destX + spaceWidth + kern + (line justifiedPadFor: spaceCount font: font).
- lastIndex := lastIndex + 1.
- pendingKernX := 0.
- ^ false!

Item was removed:
- ----- Method: CanvasCharacterScanner>>setFont (in category 'private') -----
- setFont
- foregroundColor := self defaultTextColor.
- super setFont.
- destY := lineY + line baseline - font ascent!

Item was removed:
- ----- Method: CanvasCharacterScanner>>tab (in category 'stop conditions') -----
- tab
-
- destX := (alignment = Justified and: [self leadingTab not])
- ifTrue: "imbedded tabs in justified text are weird"
- [destX + (textStyle tabWidth - (line justifiedTabDeltaFor: spaceCount)) max: destX]
- ifFalse:
- [textStyle nextTabXFrom: destX
- leftMargin: leftMargin
- rightMargin: rightMargin].
- lastIndex := lastIndex + 1.
- pendingKernX := 0.
- ^ false!

Item was removed:
- ----- Method: CanvasCharacterScanner>>textColor: (in category 'text attributes') -----
- textColor: color
- foregroundColor := color!