"
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
Object subclass:#FontDescription
instanceVariableNames:'family face style size encoding'
classVariableNames:''
poolDictionaries:''
category:'Graphics-Support'
!
!FontDescription class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
documentation
"
FontDescription is just a place-holder for scanned font names.
Instance variables:
family <String> the fonts family ('courier', 'helvetica' etc)
face <String> the fonts face ('bold', 'medium' etc)
style <String> the fonts style ('roman', 'italic', 'oblique')
size <String> the fonts size (not in pixels)
encoding <Symbol> the fonts encoding (usually #iso8859)
"
! !
!FontDescription class methodsFor:'instance creation'!
family:familyString
"returns a font for given family and default (12pt) size
with unspecified encoding.
Face is taken as medium, style as roman.
The returned font is not associated to a specific device"
^ self family:familyString
face:'medium'
style:'roman'
size:12
encoding:nil
"
Font family:'helvetica'
Font family:'courier'
"
!
family:familyString face:faceString size:sizeNum
"returns a font for given family and size with unspecified encoding.
Style is taken as roman.
The returned font is not associated to a specific device"
^ self family:familyString
face:faceString
style:'roman'
size:sizeNum
encoding:nil
"
Font family:'helvetica' face:'medium' size:10
Font family:'helvetica' face:'bold' size:10
Font family:'courier' face:'bold' size:10
"
!
family:familyString face:faceString style:styleString size:sizeNum
"returns a font for given family, face, style and size with
unspecified encoding.
The returned font is not associated to a specific device"
^ self family:familyString
face:faceString
style:styleString
size:sizeNum
encoding:nil
"
Font family:'helvetica' face:'medium' style:'roman' size:10
Font family:'helvetica' face:'medium' style:'italic' size:10
Font family:'helvetica' face:'bold' style:'roman' size:10
Font family:'courier' face:'bold' style:'italic' size:10
"
!
family:familyString face:faceString style:styleString size:sizeNum encoding:encodingSym
"returns a font for given family, face, style, size and
the specified encoding.
The returned font is not associated to a specific device"
^ self new
family:familyString
face:faceString
style:styleString
size:sizeNum
encoding:encodingSym
"Modified: 20.4.1996 / 23:19:04 / cg"
!
family:familyString size:sizeNum
"returns a font for given family and size with unspecified encoding.
Face is taken as medium, style as roman.
The returned font is not associated to a specific device"
^ self family:familyString
face:'medium'
style:'roman'
size:sizeNum
encoding:nil
"
Font family:'helvetica' size:10
Font family:'courier' size:10
"
!
name:aFontName
"returns a font with the given explicit name.
You shuld not use explicit naming, since font names vary
with operatingSystems, devices and architecture.
This interface is provided for special purposes only.
On X, the name given should be according the X fontname conventions;
i.e. something like: '-*-times-bold-r-normal-*-*-240-*-*-*-*-iso8859-1'."
^ self family:aFontName
face:nil
style:nil
size:nil
encoding:nil
"
Font name:'-*-times-bold-r-normal-*-*-240-*-*-*-*-iso8859-1'
"
! !
!FontDescription methodsFor:'accessing'!
encoding
"return the fonts encoding, as a symbol
such as #'iso8859', #'jis0208.1983' or #ascii.
If the fonts encoding is not known, return nil;
You should assume ascii-encoding then."
^ encoding
"Modified: 20.4.1996 / 23:14:36 / cg"
!
face
"return the face, a string"
^ face
!
family
"return the family, a string"
^ family
!
family:familyString face:faceString style:styleString size:sizeNum encoding:encodingString
"set the instance values"
family := familyString asSymbol.
(faceString notNil and:[faceString notEmpty]) ifTrue:[
face := faceString asSymbol.
].
(styleString notNil and:[styleString notEmpty]) ifTrue:[
style := styleString asSymbol.
].
size := sizeNum.
(encodingString notNil and:[encodingString notEmpty]) ifTrue:[
encoding := encodingString asSymbol.
]
"Modified: 20.4.1996 / 23:19:25 / cg"
!
size
"return the size, a number"
^ size
!
style
"return the style, a string"
^ style
! !
!FontDescription methodsFor:'comparing'!
= aFont
"two fonts are considered equal, if the font-name components are;
independent of the device, the font is on"
(aFont species == self species) ifTrue:[
(size == aFont size) ifTrue:[
(family = aFont family) ifTrue:[
(face = aFont face) ifTrue:[
(style = aFont style) ifTrue:[
(encoding == aFont encoding) ifTrue:[
^ true
]
]
]
]
]
].
^ false
! !
!FontDescription methodsFor:'converting'!
asBold
"return the bold font corresponding to the receiver"
^ self class
family:family
face:'bold'
style:style
size:size
encoding:encoding
!
asItalic
"return the italic font corresponding to the receiver"
^ self class
family:family
face:face
style:'oblique'
size:size
encoding:encoding
!
on:aDevice
"given the receiver, return a device Font"
^ (Font
family:family
face:face
style:style
size:size
encoding:encoding) on:aDevice
"Modified: 29.2.1996 / 04:45:11 / cg"
!
size:newSize
"return a font corresponding to the receiver, but with different size."
^ self class
family:family
face:face
style:style
size:newSize
encoding:encoding
! !
!FontDescription methodsFor:'errors'!
errorNoDevice
"a query was made for device-specific info"
"
this happens, when you ask a font for its height or width,
ascent or any other dimension which depends on the device on
which the font is rendered, AND the receiver font is not (yet)
associated to a device.
You should always use
font := font on:someDevice
to get a device font, before asking for device specifics.
"
self error:'query device independent font for for device specific info'
! !
!FontDescription methodsFor:'queries'!
bold
"return true, if the receiver is a bold font -
for st-80 compatibility"
^ face = 'bold'
!
boldness
"return the boldness of the characters in this font 0 .. 1 -
for st-80 compatibility"
style = 'roman' ifTrue:[^ 0.5].
style = 'normal' ifTrue:[^ 0.5].
style = 'bold' ifTrue:[^ 0.75].
style = 'light' ifTrue:[^ 0.25].
^ 0.5
!
fullName
^ nil
"Created: 23.2.1996 / 00:45:45 / cg"
!
italic
"return true if this is an italic font -
for st-80 compatibility"
face = 'italic' ifTrue:[^ true].
face = 'obligue' ifTrue:[^ true].
^ false
!
serif
"return true, if this font has serifs"
"this should be done in a better way ..."
family = 'Times' ifTrue:[^ true].
family = 'times' ifTrue:[^ true].
^ false.
!
species
^ Font
! !
!FontDescription methodsFor:'queries-encoding'!
isASCII
"return true, if the receivers encoding is
compatible with ascii (i.e. its ascii or iso8859)"
^ (encoding == #iso8859) or:[encoding == #ascii]
"Created: 24.2.1996 / 22:47:30 / cg"
"Modified: 20.4.1996 / 23:20:01 / cg"
!
isISO8859
"return true, if the receivers encoding is
compatible with iso8859 (i.e. iso8859)"
^ encoding == #iso8859
"Created: 24.2.1996 / 22:47:12 / cg"
"Modified: 20.4.1996 / 23:20:13 / cg"
!
isJIS
"return true, if the receivers encoding is
compatible with jis (i.e. jisXXX)"
^ (encoding startsWith:'jis')
"Created: 24.2.1996 / 22:47:47 / cg"
"Modified: 20.4.1996 / 23:20:30 / cg"
! !
!FontDescription class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libview/FontDescription.st,v 1.11 1996-04-20 21:20:38 cg Exp $'
! !