[squeak-dev] The Trunk: Graphics-mt.152.mcz

Juan Vuletich juan at jvuletich.org
Tue Nov 16 12:50:17 UTC 2010


Hi Folks,

Can someone comment on this? I tried

Set desktop color to blue.
Display getCanvas drawString: 'This is a Test' at: 20 at 20 font: TextStyle 
defaultFont color: (Color red alpha: 0.05)

with this code loaded (updated trunk), and I don't think translucent 
colors are working properly... With the old code, translucency was 
ignored, but text was rendered properly. With the new code, translucency 
is also ignored, and the text has an ugly black border...

What's the rationale behind this change? What situations does it fix? 
Maybe a code snippet (or better yet a test) that fails with the old code 
and works ok with this?

Thanks,
Juan Vuletich

commits at source.squeak.org wrote:
> Levente Uzonyi uploaded a new version of Graphics to project The Trunk:
> http://source.squeak.org/trunk/Graphics-mt.152.mcz
>
> ==================== Summary ====================
>
> Name: Graphics-mt.152
> Author: mt
> Time: 10 November 2010, 4:14:35.129 pm
> UUID: 04582fa8-3ca1-e440-987a-74483e96950d
> Ancestors: Graphics-dtl.151
>
> - fixed font rendering to support translucent colors
>
> =============== Diff against Graphics-dtl.151 ===============
>
> 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 force #rgbMul if color is not translucent for better result quality. Alpha values are ignored with #rgbMul."
> + 				foregroundColor isTranslucent
> + 					ifFalse: [self combinationRule: Form rgbMul].
> - 				"rgbMul is equivalent to component alpha blend if text is black (only faster, hehe)"
> - 				self combinationRule: 37.		"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
>   		]
>   	].!
>
>   
> ------------------------------------------------------------------------
>
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com 
> Version: 9.0.869 / Virus Database: 271.1.1/3259 - Release Date: 11/15/10 16:34:00
>
>   




More information about the Squeak-dev mailing list