FixedPaletteWithAlpha.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 26 Nov 2016 21:09:32 +0000
branchjv
changeset 7719 c2f802dd340a
parent 7200 a12560d93bdb
child 8104 6aca0b81e5a9
permissions -rw-r--r--
XFT: Forbid XFT rendering on bitmaps (depth-1 pixmaps) In theory it could work if XFT would just turn gray into either black or white. But XFT doesn't do it and simply draw nothing without failing in any way. To prevent this silent failures, forbid drawing XFT onto bitmaps (depth-1 pixmaps). After all, the while point of XFT is to use anti-aliased fonts.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7200
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     1
"
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     2
 COPYRIGHT (c) 2016 by Claus Gittinger
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     3
              All Rights Reserved
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     4
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     5
 This software is furnished under a license and may be used
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     6
 only in accordance with the terms of that license and with the
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
     9
 other person.  No title to or ownership of the software is
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    10
 hereby transferred.
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    11
"
7188
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libview' }"
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ NameSpace: Smalltalk }"
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
FixedPalette subclass:#FixedPaletteWithAlpha
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:'alphaShift alphaMask'
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Graphics-Images-Support'
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
7200
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    23
!FixedPaletteWithAlpha class methodsFor:'documentation'!
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    24
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    25
copyright
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    26
"
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    27
 COPYRIGHT (c) 2016 by Claus Gittinger
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    28
              All Rights Reserved
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    29
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    30
 This software is furnished under a license and may be used
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    31
 only in accordance with the terms of that license and with the
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    33
 be provided or otherwise made available to, or used by, any
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    34
 other person.  No title to or ownership of the software is
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    35
 hereby transferred.
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    36
"
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    37
! !
7188
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
7199
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    39
!FixedPaletteWithAlpha methodsFor:'accessing'!
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    40
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    41
alphaShift:alphaShiftArg alphaMask:alphaMaskArg 
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    42
    alphaShift := alphaShiftArg.
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    43
    alphaMask := alphaMaskArg.
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    44
! !
d099c8ba4e9d #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7188
diff changeset
    45
7188
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!FixedPaletteWithAlpha methodsFor:'printing & storing'!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
7200
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    48
size
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    49
    "return the number of (simulated) colors in this colormap"
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    50
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    51
    ^ ((alphaMask bitShift:alphaShift)
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    52
        + (redMask bitShift:redShift)
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    53
        + (greenMask bitShift:greenShift)
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    54
        + (blueMask bitShift:blueShift)) + 1 
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    55
!
a12560d93bdb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 7199
diff changeset
    56
7188
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
storeInstVarsOn:aStream
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    super storeInstVarsOn:aStream.
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    aStream nextPutAll:' alphaShift:'. alphaShift storeOn:aStream.
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    aStream nextPutAll:' alphaMask:'. alphaMask storeOn:aStream.
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!FixedPaletteWithAlpha methodsFor:'queries'!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
alphaByteAt:index
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "return the (simulated) alphaByte at index.
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
     Notice that index is 1.."
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    |a aa|
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    alphaMask == 0 ifTrue:[^ 0]. "/ no alpha component
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    a := ((index-1 bitShift:alphaShift negated) bitAnd:alphaMask).
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    aa := (a * 255.0 / (alphaMask)) rounded.
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    ^ aa
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    "
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
     (FixedPalette redShift:16 redMask:16rFF greenShift:8 greenMask:16rFF blueShift:0 blueMask:16rFF) blueByteAt:16rFFFFFF+1  
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
     (FixedPalette redShift:10 redMask:16r1F greenShift:5 greenMask:16r1F blueShift:0 blueMask:16r1F) blueByteAt:16r7FFF+1  
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
     (FixedPalette redShift:11 redMask:16r1F greenShift:5 greenMask:16r3F blueShift:0 blueMask:16r1F) blueByteAt:16rFFFF+1  
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
     (FixedPalette redShift:11 redMask:16r1F greenShift:5 greenMask:16r3F blueShift:0 blueMask:16r1F) blueByteAt:0+1  
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
     (FixedPalette redShift:11 redMask:16r1F greenShift:5 greenMask:16r3F blueShift:0 blueMask:16r1F) blueByteAt:16r7FFF+1  
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    "
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
bitsAlpha
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    ^ alphaMask highBit
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
! !
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
!FixedPaletteWithAlpha class methodsFor:'documentation'!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
version
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    ^ '$Header$'
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
version_CVS
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    ^ '$Header$'
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
! !
8e67d0d3aa38 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100