A new version of Graphics was added to project The Inbox:
http://source.squeak.org/inbox/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 ] ].! |
Free forum by Nabble | Edit this page |