[squeak-dev] The Trunk: TrueType-mt.73.mcz

Jakob Reschke jakres+squeak at gmail.com
Sat May 7 18:13:02 UTC 2022


For reference, my image went from version 21315 -> 21736.

Am Sa., 7. Mai 2022 um 19:58 Uhr schrieb Jakob Reschke <
jakres+squeak at gmail.com>:

> After the next error a few versions later, I found your message from 11
> days ago:
> http://lists.squeakfoundation.org/pipermail/squeak-dev/2022-April/220093.html
>
> Am Di., 26. Apr. 2022 um 11:19 Uhr schrieb Marcel Taeumel <
> marcel.taeumel at hpi.de>:
>
>> During the last 3 months of updating stuff in Trunk, I made 2 bigger
>> mistakes that might raise debuggers when updating older Trunk images.
>>
>> 1. I was not aware that TTCFontSet was actually in use even for simple
>> latin-1/ascii systems. Any MNU can simply be fixed by forwarding the
>> implementation of that message to "fontArray first" in the font set.
>>
>
> So that answers my question whether there is a bug in the update stream
> with a "yes". Is there anything that can be done about it to help someone
> else if they get stuck and don't think of searching the mailing list?
>
> Kind regards,
> Jakob
>
>
>
> Am Sa., 7. Mai 2022 um 19:49 Uhr schrieb Jakob Reschke <
> jakres+squeak at gmail.com>:
>
>> Hi Marcel,
>>
>> I just updated a Trunk image that I apparently did not update in a
>> while. The update got stuck with a message not understood while it was
>> executing this postscript. The methods added in TrueType-mt.75 were
>> missing, so I merged that while the update was stuck in the debugger,
>> then had the update proceed.
>>
>> Is there a bug in the update stream?
>>
>> Kind regards,
>> Jakob
>>
>>
>> Am Fr., 25. Feb. 2022 um 10:37 Uhr schrieb <commits at source.squeak.org>:
>> >
>> > Marcel Taeumel uploaded a new version of TrueType to project The Trunk:
>> > http://source.squeak.org/trunk/TrueType-mt.73.mcz
>> >
>> > ==================== Summary ====================
>> >
>> > Name: TrueType-mt.73
>> > Author: mt
>> > Time: 25 February 2022, 10:37:20.57863 am
>> > UUID: 9a7bc579-7e0f-8c48-8a25-10f8a5466379
>> > Ancestors: TrueType-mt.72
>> >
>> > Move extral scale/gap from TTFontDescription up to TTCFont -- Step 2 of
>> 2
>> >
>> > Activate the use of TTCFont's #extraGlyphScale and #extraLineGap.
>> >
>> > (Note that this also fixes clipping artifacts of over-height and
>> over-wide glyphs. That is, left/top/right/bottom bearings in a glyph are
>> not respected.)
>> >
>> > =============== Diff against TrueType-mt.72 ===============
>> >
>> > Item was changed:
>> >   TTCFont subclass: #LinedTTCFont
>> >         instanceVariableNames: 'emphasis lineGlyph contourWidth'
>> >         classVariableNames: ''
>> >         poolDictionaries: ''
>> >         category: 'TrueType-Fonts'!
>> > +
>> > + !LinedTTCFont commentStamp: 'mt 2/24/2022 16:24' prior: 0!
>> > + I am a TrueType font that uses the glyph for $_ to appear with
>> underlined emphasis. If that glyph's decent is too close the baseline, the
>> underlined font might look awkward.!
>> >
>> > Item was changed:
>> >   ----- Method: LinedTTCFont>>computeForm: (in category 'private') -----
>> >   computeForm: char
>> >         "Overwritten to add line glyph."
>> >
>> > +       ^ ttcDescription renderGlyph: char height: self height
>> extraScale: self extraGlyphScale fgColor: foregroundColor bgColor: Color
>> transparent depth: self depth lineGlyph: lineGlyph lineGlyphWidth:
>> contourWidth emphasis: emphasis!
>> > -       ^ ttcDescription renderGlyph: char height: self height fgColor:
>> foregroundColor bgColor: Color transparent depth: self depth lineGlyph:
>> lineGlyph lineGlyphWidth: contourWidth emphasis: emphasis!
>> >
>> > Item was changed:
>> >   ----- Method: TTCFont>>computeForm: (in category 'character shapes')
>> -----
>> > + computeForm: aCharacter
>> > - computeForm: char
>> >         "Compute the glyph form for the given character"
>> > +
>> > +       ^ ttcDescription
>> > +               renderGlyph: aCharacter
>> > +               height: self height "in pixels"
>> > +               extraScale: self extraGlyphScale
>> > +               fgColor: foregroundColor
>> > +               bgColor: Color transparent
>> > +               depth: self depth!
>> > -       ^ttcDescription renderGlyph: char height: self height fgColor:
>> foregroundColor bgColor: Color transparent depth: self depth!
>> >
>> > Item was changed:
>> >   ----- Method: TTCFont>>displayString:on:from:to:at:kern:baselineY:
>> (in category 'displaying') -----
>> >   displayString: aString on: aBitBlt from: startIndex to: stopIndex at:
>> aPoint kern: kernDelta baselineY: baselineY
>> >
>> >         | form glyphInfo destX destY hereX nextX actualFont |
>> >         destX := aPoint x.
>> >         glyphInfo := Array new: 5.
>> >         startIndex to: stopIndex do: [:charIndex |
>> >                 self glyphInfoOf: (aString at: charIndex) into:
>> glyphInfo.
>> >                 form := glyphInfo at: 1.
>> >                 hereX := glyphInfo at: 2.
>> >                 nextX := glyphInfo at: 3.
>> >                 (actualFont := glyphInfo at: 5) ==  aBitBlt lastFont
>> >                         ifFalse: [actualFont installOn: aBitBlt].
>> >                 destY := baselineY - (glyphInfo at: 4).
>> >                 aBitBlt sourceForm: form.
>> > +               aBitBlt destX: destX + form offset x.
>> > -               aBitBlt destX: destX.
>> >                 aBitBlt destY: destY + form offset y. "Compensate
>> overdraw. See #extraScale:."
>> >                 aBitBlt sourceX: hereX; sourceY: 0.
>> > +               aBitBlt width: form width.
>> > -               aBitBlt width: nextX - hereX.
>> >                 aBitBlt height: form height.
>> >                 aBitBlt copyBits.
>> >                 destX := destX + (nextX - hereX) + kernDelta.
>> >         ].
>> >         ^ destX @ destY
>> >   !
>> >
>> > Item was changed:
>> >   ----- Method: TTCFont>>glyphInfoOf:into: (in category 'displaying')
>> -----
>> >   glyphInfoOf: aCharacter into: glyphInfoArray
>> >         "return the glyph info for aCharacter; if I don't have such a
>> character, try my fallback font"
>> >
>> >         | form |
>> >         (self hasGlyphOf: aCharacter) ifFalse: [
>> >                 ^ self fallbackFont glyphInfoOf: aCharacter into:
>> glyphInfoArray.
>> >         ].
>> >         form := self formOf: aCharacter.
>> >         glyphInfoArray at: 1 put: form;
>> > +               at: 2 put: 0; "hereX -- relative, unlike StrikeFont"
>> > +               at: 3 put: form advanceWidth; "nextX -- relative,
>> unlike StrikeFont"
>> > -               at: 2 put: 0;
>> > -               at: 3 put: form width;
>> >                 at: 4 put: self ascent "(self ascentOf: aCharacter)";
>> >                 at: 5 put: self.
>> >         ^ glyphInfoArray.
>> >   !
>> >
>> > Item was changed:
>> >   ----- Method: TTCFont>>lineGap (in category 'accessing') -----
>> >   lineGap
>> > +       "Answer the line gap in pixels. Scale from #typographicLineGap
>> to make larger texts more ledigble."
>> > -       "Answer the line gap from the ttf description. Use
>> #typographicLineGap to make larger tests more ledigble."
>> >
>> > +       ^ lineGap ifNil: [lineGap := (self pixelTypoScale *
>> (ttcDescription typographicLineGap + self extraLineGap)) rounded]
>> > +
>> > + "Do not use the non-typo values:
>> > + ^ (self pixelScale * (ttcDescription lineGap + ttcDescription
>> extraGap) rounded
>> > + "!
>> > -       "^ (self pixelScale * (ttcDescription lineGap + ttcDescription
>> extraGap) rounded"
>> > -       ^ lineGap ifNil: [lineGap := (self pixelTypoScale *
>> (ttcDescription typographicLineGap + ttcDescription extraGap)) rounded]!
>> >
>> > Item was changed:
>> > + ----- Method: TTCFont>>widthOf: (in category 'measuring') -----
>> > - ----- Method: TTCFont>>widthOf: (in category 'public') -----
>> >   widthOf: aCharacter
>> > +       "Overwritten to use the #advanceWidth and not the #width of the
>> form. See TTGlyphForm"
>> > +
>> > -       "This method cannot use #formOf: because formOf: discriminates
>> the color and causes unnecessary bitmap creation."
>> >         (self hasGlyphOf: aCharacter)
>> >                 ifFalse: [^ self fallbackFont widthOf: aCharacter].
>> > +       ^(self formOf: aCharacter) advanceWidth!
>> > -       ^(self formOf: aCharacter) width!
>> >
>> > Item was changed:
>> >   ----- Method:
>> TTFileDescription>>renderGlyph:height:fgColor:bgColor:depth: (in category
>> 'rendering') -----
>> >   renderGlyph: code height: fontHeight fgColor: fgColor bgColor:
>> bgColor depth: depth
>> >         "Render the glyph with the given code point at the specified
>> pixel height."
>> >
>> > +       self flag: #deprecated.
>> >         ^ self
>> > +               renderGlyph: code height: fontHeight extraScale: 1.0
>> > -               renderGlyph: code height: fontHeight
>> >                 fgColor: fgColor bgColor: bgColor depth: depth
>> >                 lineGlyph: nil lineGlyphWidth: 0 emphasis: 0!
>> >
>> > Item was changed:
>> >   ----- Method:
>> TTFileDescription>>renderGlyph:height:fgColor:bgColor:depth:lineGlyph:lineGlyphWidth:emphasis:
>> (in category 'rendering') -----
>> > + renderGlyph: code height: fontHeight fgColor: fgColor bgColor:
>> bgColor depth: depth lineGlyph: lineGlyphOrNil lineGlyphWidth: lWidth
>> emphasis: emphasis
>> > - renderGlyph: code height: fontHeight fgColor: fgColor bgColor:
>> bgColor depth: depth lineGlyph: lineGlyph lineGlyphWidth: lWidth emphasis:
>> emphasis
>> >         "Render the glyph with the given code point at the specified
>> pixel height. Underline it with lineGlyph."
>> >
>> > +       self flag: #deprecated.
>> > +       ^ self
>> > +               renderGlyph: code height: fontHeight extraScale: 1.0
>> > -       | form pixelScale  offset |
>> > -       pixelScale := fontHeight asFloat / self fontHeight.
>> > -       offset := 0 @ ( (((self ascender) - ((self ascender) * self
>> extraScale)) * pixelScale) truncated).
>> > -       form := (self at: code)
>> > -               asFormWithScale: pixelScale * self extraScale
>> > -               ascender: self ascender
>> > -               descender: self descender
>> >                 fgColor: fgColor bgColor: bgColor depth: depth
>> > +               lineGlyph: lineGlyphOrNil lineGlyphWidth: lWidth
>> emphasis: emphasis!
>> > -               replaceColor: false
>> > -               lineGlyph: lineGlyph lineGlyphWidth: lWidth
>> > -               emphasis: emphasis.
>> > -       form offset: offset.
>> > -       ^ form!
>> >
>> > Item was changed:
>> >   ----- Method:
>> TTFontDescription>>renderGlyph:height:fgColor:bgColor:depth: (in category
>> 'rendering') -----
>> >   renderGlyph: code height: fontHeight fgColor: fgColor bgColor:
>> bgColor depth: depth
>> >         "Render the glyph with the given code point at the specified
>> pixel height."
>> >
>> > +       self flag: #deprecated.
>> >         ^ self
>> > +               renderGlyph: code height: fontHeight extraScale: 1.0
>> > -               renderGlyph: code height: fontHeight
>> >                 fgColor: fgColor bgColor: bgColor depth: depth
>> >                 lineGlyph: nil lineGlyphWidth: 0 emphasis: 0!
>> >
>> > Item was changed:
>> >   ----- Method:
>> TTFontDescription>>renderGlyph:height:fgColor:bgColor:depth:lineGlyph:lineGlyphWidth:emphasis:
>> (in category 'rendering') -----
>> >   renderGlyph: code height: fontHeight fgColor: fgColor bgColor:
>> bgColor depth: depth lineGlyph: lineGlyphOrNil lineGlyphWidth: lWidth
>> emphasis: emphasis
>> >         "Render the glyph with the given code point at the specified
>> pixel height. Underline it with lineGlyph."
>> >
>> > +       self flag: #deprecated.
>> > +       ^ self
>> > +               renderGlyph: code height: fontHeight extraScale: 1.0
>> > -       | form pixelScale  offset |
>> > -       pixelScale := fontHeight asFloat / self fontHeight.
>> > -       offset := 0 @ ( (((self ascender) - ((self ascender) * self
>> extraScale)) * pixelScale) truncated).
>> > -       form := (self at: code)
>> > -               asFormWithScale: pixelScale * self extraScale
>> > -               ascender: self ascender
>> > -               descender: self descender
>> >                 fgColor: fgColor bgColor: bgColor depth: depth
>> > +               lineGlyph: lineGlyphOrNil lineGlyphWidth: lWidth
>> emphasis: emphasis!
>> > -               replaceColor: false
>> > -               lineGlyph: lineGlyphOrNil lineGlyphWidth: lWidth
>> > -               emphasis: emphasis.
>> > -       form offset: offset.
>> > -       ^ form!
>> >
>> > Item was changed:
>> >   ----- Method:
>> TTGlyph>>asFormWithScale:ascender:descender:fgColor:bgColor:depth:replaceColor:lineGlyph:lineGlyphWidth:emphasis:
>> (in category 'converting') -----
>> >   asFormWithScale: scale ascender: ascender descender: descender
>> fgColor: fgColor bgColor: bgColor depth: depth replaceColor:
>> replaceColorFlag lineGlyph: lineGlyph lineGlyphWidth: lWidth emphasis: code
>> >
>> > +       | topBearing bottomBearing pixelBox pixelOutset form canvas
>> newScale renderOffset |
>> > +       topBearing := bounds bottom - ascender max: 0.
>> > +       bottomBearing := bounds top - descender min: 0.
>> > +       renderOffset := leftSideBearing abs @ (ascender+topBearing)
>> negated.
>> > +
>> > +       "Prepare the pixel box"
>> > +       pixelBox := ((advanceWidth @ (ascender - descender)) * scale)
>> rounded.
>> > +       pixelOutset := ((leftSideBearing abs @ topBearing "abs" ) *
>> scale) rounded
>> > +               corner: ((rightSideBearing abs @ bottomBearing abs ) *
>> scale) rounded.
>> > +       form := TTGlyphForm extent: pixelBox
>> > +               + pixelOutset left + pixelOutset top
>> > +               + pixelOutset right + pixelOutset bottom
>> > +                       depth: depth.
>> > +       form advanceWidth: pixelBox x.
>> > +       form offset: pixelOutset topLeft negated.
>> > +
>> > -       | form canvas newScale |
>> > -       form := Form extent: ((advanceWidth @ (ascender - descender)) *
>> scale) rounded depth: depth.
>> >         form fillColor: bgColor.
>> >         canvas := form getCanvas asBalloonCanvas.
>> >         canvas aaLevel: 4.
>> >         canvas transformBy: (MatrixTransform2x3 withScale: scale
>> asPoint * (1 @ -1)).
>> > +       canvas transformBy: (MatrixTransform2x3 withOffset:
>> renderOffset).
>> > -       canvas transformBy: (MatrixTransform2x3 withOffset: 0 @
>> ascender negated).
>> >         canvas
>> >                 drawGeneralBezierShape: self contours
>> >                 color: fgColor
>> >                 borderWidth: 0
>> >                 borderColor: fgColor.
>> >         ((code bitAnd: 4) ~= 0 or: [(code bitAnd: 16) ~= 0]) ifTrue: [
>> > +               newScale := (pixelBox x + 1) asFloat / lineGlyph
>> calculateWidth asFloat.
>> > -               newScale := (form width + 1) asFloat / lineGlyph
>> calculateWidth asFloat.
>> >                 canvas transformBy: (MatrixTransform2x3 withScale:
>> (newScale / scale)@1.0).
>> >
>> >                 (code bitAnd: 4) ~= 0 ifTrue: [
>> >                         canvas
>> >                                 drawGeneralBezierShape: lineGlyph
>> contours
>> >                                 color: fgColor
>> >                                 borderWidth: 0
>> >                                 borderColor: fgColor.
>> >                 ].
>> >
>> > +               (code bitAnd: 16) ~= 0 ifTrue: [ | renderLineOffset |
>> > +                       renderLineOffset := renderOffset x @
>> (renderOffset y negated // 2).
>> > +                       canvas transformBy: (MatrixTransform2x3
>> withOffset: renderLineOffset).
>> > -               (code bitAnd: 16) ~= 0 ifTrue: [
>> > -                       canvas transformBy: (MatrixTransform2x3
>> withOffset: 0@(ascender // 2)).
>> >                         canvas
>> >                                 drawGeneralBezierShape: lineGlyph
>> contours
>> >                                 color: fgColor
>> >                                 borderWidth: 0
>> >                                 borderColor: fgColor.
>> >                 ].
>> >         ].
>> >
>> >         replaceColorFlag ifTrue: [
>> >                 form replaceColor: bgColor withColor: Color transparent.
>> >         ].
>> >         ^ form!
>> >
>> > Item was added:
>> > + (PackageInfo named: 'TrueType') postscript: '"Moves extra glyph scale
>> and extra line gap from font description (i.e., TTFontDescription) up to
>> font instance (i.e., TTCFont). Restore glyph scale for default fonts. Note
>> that we might want to rename their #familyName(:)  in the future to make
>> that clear. Scale factors were chosen to look good on various scale factors
>> at 10.5 pt."
>> > +
>> > + #(
>> > + BitstreamVeraSans 1.059 24
>> > + BitstreamVeraSansMono 1.059 24
>> > + BitstreamVeraSerif 1.11 47
>> > + ) groupsDo: [:name :scale :gap |
>> > +       (TextStyle named: name) defaultFont
>> > +               extraGlyphScale: scale;
>> > +               extraLineGap: gap].
>> > + TTCFont shutDown: true. "Reset glyph caches"'!
>> >
>> >
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220507/773fe928/attachment-0001.html>


More information about the Squeak-dev mailing list