mirror of
https://github.com/lxsang/Diya-API.git
synced 2024-12-27 03:48:21 +01:00
Add freetype font manager
This commit is contained in:
parent
1ebd4a748c
commit
a2af81994c
@ -214,6 +214,7 @@ DiyaBoot >> startx [
|
||||
context delete.
|
||||
renderer destroy.
|
||||
window destroy.
|
||||
DiyaFontManager reset.
|
||||
SDL2 quit.
|
||||
]
|
||||
|
||||
|
47
Diya/DiyaFontFamily.class.st
Normal file
47
Diya/DiyaFontFamily.class.st
Normal file
@ -0,0 +1,47 @@
|
||||
Class {
|
||||
#name : #DiyaFontFamily,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#instVars : [
|
||||
'faces',
|
||||
'name'
|
||||
],
|
||||
#category : #'Diya-Fonts'
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaFontFamily class >> fromFace: face [
|
||||
^self new addFace: face; yourself.
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontFamily >> addFace: face [
|
||||
name ifNil: [ name := face familyName ].
|
||||
faces at: face styleName ifAbsentPut: face.
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontFamily >> faces [
|
||||
^ faces
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontFamily >> initialize [
|
||||
super initialize.
|
||||
faces := Dictionary new.
|
||||
name := nil
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontFamily >> name [
|
||||
^ name
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontFamily >> name: anObject [
|
||||
name := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontFamily >> styleNames [
|
||||
^faces keys
|
||||
]
|
90
Diya/DiyaFontManager.class.st
Normal file
90
Diya/DiyaFontManager.class.st
Normal file
@ -0,0 +1,90 @@
|
||||
Class {
|
||||
#name : #DiyaFontManager,
|
||||
#superclass : #DiyaSingleton,
|
||||
#instVars : [
|
||||
'families'
|
||||
],
|
||||
#category : #'Diya-Fonts'
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaFontManager class >> cleanUpInstance: singleton [
|
||||
singleton reset.
|
||||
]
|
||||
|
||||
{ #category : #'class initialization' }
|
||||
DiyaFontManager class >> initialize [
|
||||
self uniqueInstance reset.
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
DiyaFontManager class >> searchPaths [
|
||||
^ {
|
||||
Smalltalk imageDirectory / 'fonts'
|
||||
}
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontManager >> families [
|
||||
^ families
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaFontManager >> familyNames [
|
||||
^ families keys
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> initialize [
|
||||
super initialize.
|
||||
families := Dictionary new.
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> loadFace: face [
|
||||
|family|
|
||||
family := families at: face familyName ifAbsentPut:[DiyaFontFamily fromFace: face].
|
||||
family addFace: face
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> loadFile: aFile [
|
||||
| path face i numfaces |
|
||||
path := aFile fullName convertToWithConverter: UTF8TextConverter new.
|
||||
i := 0.
|
||||
numfaces := nil.
|
||||
[ face := FreeTypeFace basicNew
|
||||
filename: path;
|
||||
index: i.
|
||||
face newFaceFromFile: path index: i.
|
||||
face loadFields.
|
||||
numfaces ifNil: [ numfaces := face numFaces ].
|
||||
self loadFace: face.
|
||||
i := i + 1.
|
||||
i < numfaces ] whileTrue: [ ]
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> loadFonts [
|
||||
self loadFonts: false.
|
||||
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> loadFonts: force [
|
||||
force ifTrue:[self reset].
|
||||
self class searchPaths do:[:path| self loadPath: path].
|
||||
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> loadPath: path [
|
||||
path entries do:[:entry| entry isFile ifTrue:[self loadFile: entry ]].
|
||||
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaFontManager >> reset [
|
||||
"reset all stored faces"
|
||||
families := Dictionary new.
|
||||
]
|
Loading…
Reference in New Issue
Block a user