[squeak-dev] The Trunk: MorphicExtras-nice.137.mcz

Bert Freudenberg bert at freudenbergs.de
Fri Dec 20 00:19:41 UTC 2013


On 20.12.2013, at 00:55, Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> wrote:

> 2013/12/13 Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
> I feel like it would be better to change pixelValueAt: so as to always unhibernate, but I did not dare if ever someone had the idea of sending it in tight loops (one shouldn't, there is BitBlt for that purpose, but who knows...).
> 
> Maybe we could fail primitivePixelValueAt if receiver is Byte like, and unhibernate in fallback code.
> We would let every other BitBlt primitives accept a ByteArray to allow BitBlt tricks.
> 
> Thoughts?
> 
> 
> No one raised a comment so far.
> Isn't it a good idea to fail the primitive?

The primitive must fail, yes. That is simply a bug. Before that primitive existed, pixelValueAt: used BitBlt which did the unhibernate. 

> If yes, then it's very simple to implement, just add:
> 
>     (interpreterProxy isWords: bitmap)    ifFalse:[interpreterProxy primitiveFail].

IMHO the primitive should do the same check as BitBlt: verify that the size of the bits is exactly right given width, height, and depth.

- Bert -

> 
> somewhere in the preamble of  BitBltSimulation>>primitivePixelValueAtX: xVal y: yVal 
> 
> I check the senders of pixelValueAt:, and some of them would loop over each pixel.
> So sending unhibernate at each pixel does not seem a good idea anyway.

> Leaking unhibernate sends out of the loop neither is, because then 3rd party classes must be aware of an implementation detail of Form.
> 
>  
> 2013/12/13 <commits at source.squeak.org>
> 
> Nicolas Cellier uploaded a new version of MorphicExtras to project The Trunk:
> http://source.squeak.org/trunk/MorphicExtras-nice.137.mcz
> 
> ==================== Summary ====================
> 
> Name: MorphicExtras-nice.137
> Author: nice
> Time: 13 December 2013, 10:07:57.316 pm
> UUID: 127ce68e-b210-42a3-b0b3-b40c69941d02
> Ancestors: MorphicExtras-nice.136
> 
> Correct an awfull bug in PaintBoxMorph>>showColor
> One should NEVER send pixelValueAt: nor colorAt: to an hibernated Form (or ColorForm).
> 
> =============== Diff against MorphicExtras-nice.136 ===============
> 
> Item was changed:
>   ----- Method: PaintBoxMorph>>showColor (in category 'actions') -----
>   showColor
>         "Display the current color in all brushes, both on and off."
> 
>         | offIndex onIndex center |
>         currentColor ifNil: [^self].
>         "colorPatch color: currentColor.        May delete later"
>         (brushes isNil or: [brushes first owner ~~ self])
>                 ifTrue:
>                         [brushes := OrderedCollection new.
>                         #(#brush1: #brush2: #brush3: #brush4: #brush5: #brush6:)
>                                 do: [:sel | brushes addLast: (self submorphNamed: sel)]].
> +       brushes last offImage unhibernate.
> +       brushes last onImage unhibernate.
> +       brushes last pressedImage unhibernate.
> +       center := brushes last offImage extent // 2.
> +       offIndex := brushes last offImage pixelValueAt: center.
> +       onIndex := brushes last onImage pixelValueAt: center.
> -       center := (brushes sixth) offImage extent // 2.
> -       offIndex := (brushes sixth) offImage pixelValueAt: center.
> -       onIndex := (brushes sixth) onImage pixelValueAt: center.
>         brushes do:
>                         [:bb |
>                         bb offImage colors at: offIndex + 1 put: currentColor.
>                         bb offImage clearColormapCache.
>                         bb onImage colors at: onIndex + 1 put: currentColor.
>                         bb onImage clearColormapCache.
>                         bb invalidRect: bb bounds].
>         self invalidRect: (brushes first topLeft rect: brushes last bottomRight)!
> 
> 
> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20131220/b14694bd/attachment.htm


More information about the Squeak-dev mailing list