-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
GlyphForm.class.st
83 lines (73 loc) · 1.64 KB
/
GlyphForm.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
"
A specialized form for glyphs
"
Class {
#name : #GlyphForm,
#superclass : #Form,
#instVars : [
'advance',
'linearAdvance'
],
#category : #'FreeType-Fonts'
}
{ #category : #accessing }
GlyphForm >> advance [
^advance
]
{ #category : #accessing }
GlyphForm >> advance: aNumber [
^advance := aNumber
]
{ #category : #converting }
GlyphForm >> asFormOfDepth: d [
| newForm |
d = self depth ifTrue:[^self].
newForm := self class extent: self extent depth: d.
(BitBlt toForm: newForm)
colorMap: (self colormapIfNeededFor: newForm);
copy: (self boundingBox)
from: 0@0 in: self
fillColor: nil rule: Form over.
newForm
offset: offset;
advance:advance;
linearAdvance: linearAdvance.
^newForm
]
{ #category : #converting }
GlyphForm >> invertedAndAlphaMultiplied [
| result |
result := super invertedAndAlphaMultiplied.
^ (self class extent: result extent depth: result depth bits: result bits)
offset: offset;
advance: advance;
linearAdvance: linearAdvance;
yourself
]
{ #category : #accessing }
GlyphForm >> linearAdvance [
^linearAdvance
]
{ #category : #accessing }
GlyphForm >> linearAdvance: aNumber [
^linearAdvance := aNumber
]
{ #category : #converting }
GlyphForm >> withAlphaExtractedFromSubpixelRendering [
| result |
"Take the maximum of r,g,b as the alpha. Then multiply by a."
result := self collectColors: [:c |
| r g b a|
r := c red.
g := c green.
b := c blue.
a := c alpha.
a := ((r max: g) max: b) * a.
Color r: r g: g b: b alpha: a
].
^ (self class extent: result extent depth: result depth bits: result bits)
offset: offset;
advance: advance;
linearAdvance: linearAdvance;
yourself
]