Alpha transparence support in PNG

karl karl.ramberg at chello.se
Sat Nov 26 12:08:15 UTC 2005


karl wrote:

> karl wrote:
>
>> Hilaire Fernandes wrote:
>>
>>> Any hope to see alpha transparence support in PNG ?
>>
>>
>>
>> I don't think Squeak has anything but transparency of forms, I think 
>> what you ask for
>> is translucency. And I think translucency of forms would be great to 
>> have. I suspect it
>> has to be implemented in some plugins eg. BitBlt.
>> I think this is related to the issues with anti-aliased fonts as 
>> well, but I'm maybe
>> misunderstanding the issues...
>> Karl
>
>
> Duh, just have to do what Bert says. I was wrong.
> But there is still a issue when you rotate the form.
> Karl
>
I think this attached change fixes form translucency when rotated.
Not sure what it breakes though...
Karl
-------------- next part --------------
'From Squeak3.9alpha of 4 July 2005 [latest update: #6702] on 26 November 2005 at 1:05:16 pm'!

!FormCanvas methodsFor: 'drawing-support' stamp: 'kfr 11/26/2005 13:04'!
transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock	 smoothing: cellSize

	"Note: This method has been originally copied from TransformationMorph."
	| innerRect patchRect sourceQuad warp start subCanvas |
	(aDisplayTransform isPureTranslation) ifTrue:[
		^aBlock value: (self copyOffset: aDisplayTransform offset negated truncated
							clipRect: aClipRect)
	].
	"Prepare an appropriate warp from patch to innerRect"
	innerRect _ aClipRect.
	patchRect _ (aDisplayTransform globalBoundsToLocal: innerRect) truncated.
	sourceQuad _ (aDisplayTransform sourceQuadFor: innerRect)
					collect: [:p | p - patchRect topLeft].
	warp _ self warpFrom: sourceQuad toRect: innerRect.
	warp cellSize: cellSize.

	"Render the submorphs visible in the clipping rectangle, as patchForm"
	start _ (self depth = 1 and: [self isShadowDrawing not])
		"If this is true B&W, then we need a first pass for erasure."
		ifTrue: [1] ifFalse: [2].
	start to: 2 do:
		[:i | "If i=1 we first make a shadow and erase it for opaque whites in B&W"
		subCanvas _ self class extent: patchRect extent depth: self depth.
		i=1	ifTrue: [subCanvas shadowColor: Color black.
					warp combinationRule: Form erase]
			ifFalse: [self isShadowDrawing ifTrue:
					[subCanvas shadowColor: self shadowColor].
					warp combinationRule: Form blend].
		subCanvas translateBy: patchRect topLeft negated
			during:[:offsetCanvas| aBlock value: offsetCanvas].
		warp sourceForm: subCanvas form; warpBits.
		warp sourceForm: nil.  subCanvas _ nil "release space for next loop"]
! !


More information about the Squeak-dev mailing list