The Trunk: Graphics-mt.157.mcz

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

The Trunk: Graphics-mt.157.mcz

commits-2
Levente Uzonyi uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-mt.157.mcz

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

Name: Graphics-mt.157
Author: mt
Time: 16 November 2010, 2:25:04.901 pm
UUID: 4dce7252-8823-224f-af97-fe4c37ce7bbc
Ancestors: Graphics-ul.156

- fonts with translucent color used the wrong combination rule for rendering by default
- use "Form blend" explicitly as combination rule for fonts with translucent color

=============== Diff against Graphics-ul.156 ===============

Item was changed:
  ----- Method: BitBlt>>installStrikeFont:foregroundColor:backgroundColor: (in category 'private') -----
  installStrikeFont: aStrikeFont foregroundColor: foregroundColor backgroundColor: backgroundColor
  | lastSourceDepth targetColor |
  sourceForm ifNotNil:[lastSourceDepth := sourceForm depth].
  sourceForm := aStrikeFont glyphs.
 
  "Ignore any halftone pattern since we use a color map approach here"
  halftoneForm := nil.
  sourceY := 0.
  height := aStrikeFont height.
 
  sourceForm depth = 1 ifTrue: [
  self combinationRule: Form paint.
  (colorMap notNil and:[lastSourceDepth = sourceForm depth]) ifFalse: [
  "Set up color map for a different source depth (color font)"
  "Uses caching for reasonable efficiency"
  colorMap := self cachedFontColormapFrom: sourceForm depth to: destForm depth.
  colorMap at: 1 put: (destForm pixelValueFor: backgroundColor)].
  colorMap at: 2 put: (destForm pixelValueFor: foregroundColor).
  ]
  ifFalse: [
  (Preferences subPixelRenderFonts and: [ foregroundColor = Color black or: [ Preferences subPixelRenderColorFonts ]]) ifTrue: [
  destForm depth > 8 ifTrue: [
+ "Only choose #rgbMul if color is not translucent for better result quality. Alpha values are ignored with #rgbMul."
- "Only force #rgbMul if color is not translucent for better result quality. Alpha values are ignored with #rgbMul."
  foregroundColor isTranslucent
+ ifTrue: [self combinationRule: Form blend]
  ifFalse: [self combinationRule: Form rgbMul].
  colorMap := (destForm depth = 32 or: [ (foregroundColor = Color black) not ]) ifTrue: [
  "rgbMul / rgbAdd IS component alpha blend for any color of text (neat trick, eh!!)"
  "This colorMap is to be used on the second pass with rule 20 (rgbAdd)
  See #displayString:from:to:at:strikeFont:kern:"
  "Note: In 32bpp we always need the second pass, as the source could have transparent pixels, and we need to add to the alpha channel"
  self colorConvertingMap: foregroundColor from: sourceForm depth to: destForm depth keepSubPixelAA: true]]
  ifFalse: [
  self combinationRule: 25. "Paint"
  targetColor := foregroundColor = Color black ifFalse: [ foregroundColor ].
  colorMap := self colorConvertingMap: targetColor from: sourceForm depth to: destForm depth keepSubPixelAA: true]
  ]
  ifFalse: [
  "Do not use rule 34 for 16bpp display. TTCFont uses it, but it builds a glyphs cache for each color used!!"
  self combinationRule: (destForm depth = 32 ifTrue: [34 "alphaBlendScaled"] ifFalse: [25 "Paint"]).
  colorMap := self colorConvertingMap: foregroundColor from: sourceForm depth to: destForm depth keepSubPixelAA: false
  ]
  ].!