[squeak-dev] Graphical oddities across image save (squeak 5.1)
Bob Arning
arning315 at comcast.net
Sat Oct 7 12:32:09 UTC 2017
5.1
On 10/7/17 8:17 AM, Marcel Taeumel wrote:
> What's the image version you export your prefs from?
>
> Best,
> Marcel
>>
>> Am 07.10.2017 14:15:46 schrieb Bob Arning <arning315 at comcast.net>:
>>
>> A bit more on what's happening
>>
>> If the font used (the default font in the example below) is a
>> StrikeFont, then this
>>
>> f1 _ Form extent: 100 at 100 depth: 32.
>> f1 fillColor: Color green.
>> Form allInstancesDo: [ :f | f hibernate].
>> f1 getCanvas drawString: 'Black on green' in: (0 at 0 extent: 100 at 100)
>> font: nil color: Color black.
>> f1 asMorph openInWorld.
>>
>> draws black text on a white rectangle on a larger green rectangle.
>> StrikeFonts are drawn (in depth 32, anyway) by a primitive using rule
>> 34. If the primitive fails, then #copyBits is used character by
>> character.
>>
>> primDisplayString: aString from: startIndex to: stopIndex map:
>> glyphMap xTable: xTable kern: kernDelta
>> | ascii |
>> <primitive:'primitiveDisplayString' module:'BitBltPlugin'>
>> startIndex to: stopIndex do:[:charIndex|
>> ascii := (aString at: charIndex) asciiValue.
>> glyphMap ifNotNil:[ascii := glyphMap at: ascii+1].
>> sourceX := xTable at: ascii + 1.
>> width := (xTable at: ascii + 2) - sourceX.
>> self copyBits.
>> destX := destX + width + kernDelta.
>> ].
>>
>> It seems like rule 34 is handled differently by
>> primitiveDisplayString and primitiveCopyBits. If I add code as exists
>> elsewhere to unhibernate forms and retry, all is working as expected:
>>
>> primDisplayString: aString from: startIndex to: stopIndex map:
>> glyphMap xTable: xTable kern: kernDelta
>> | ascii |
>> <primitive:'primitiveDisplayString' module:'BitBltPlugin'>
>> (sourceForm isForm and: [sourceForm unhibernate]) ifTrue: [
>> ^self primDisplayString: aString from: startIndex to:
>> stopIndex map: glyphMap xTable: xTable kern: kernDelta
>> ].
>> (destForm isForm and: [destForm unhibernate]) ifTrue: [
>> ^self primDisplayString: aString from: startIndex to:
>> stopIndex map: glyphMap xTable: xTable kern: kernDelta
>> ].
>> (halftoneForm isForm and: [halftoneForm unhibernate]) ifTrue: [
>> ^self primDisplayString: aString from: startIndex to:
>> stopIndex map: glyphMap xTable: xTable kern: kernDelta
>> ].
>> startIndex to: stopIndex do:[:charIndex|
>> ascii := (aString at: charIndex) asciiValue.
>> glyphMap ifNotNil:[ascii := glyphMap at: ascii+1].
>> sourceX := xTable at: ascii + 1.
>> width := (xTable at: ascii + 2) - sourceX.
>> self copyBits.
>> destX := destX + width + kernDelta.
>> ].
>>
>> On 10/6/17 10:59 PM, Bob Arning wrote:
>>>
>>> Here is a strange one. I noticed a few morphs changing appearance
>>> after saving the image. It seems to be related to the hibernation of
>>> Forms which happens prior to saving the image. This snippet
>>>
>>> (m := SimpleButtonMorph new)
>>> label: 'Black on yellow';
>>> color: Color yellow.
>>> Form allInstancesDo: [ :f | f hibernate]. "this happens when
>>> saving image"
>>> m imageForm asMorph openInWorld
>>>
>>> has a white background for the text with a bit of yellow surrounding
>>> it. Running it in a clean 5.1 image gets the expected result: black
>>> text on a yellow background. However, if I load the preferences from
>>> my current image into the clean image, then the problem occurs:
>>> black on white on yellow. My prefs are attached if you would like to
>>> take a stab at it (and if it isn't too large an attachment).
>>>
>>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20171007/688dfa24/attachment.html>
More information about the Squeak-dev
mailing list
|