--- a/FileBrowser.st Sat Feb 14 21:14:18 2004 +0100
+++ b/FileBrowser.st Sat Feb 14 21:24:04 2004 +0100
@@ -6006,7 +6006,9 @@
"if required, query user if he/she wants to change to another font,
which is able to display text encoded as specified by newEncoding"
- |fontsEncoding msg filter f defaultFont pref|
+ |fontsEncoding msg filter f defaultFont pref matchingFonts
+ matchingFamilyFonts matchingFamilyFaceFonts matchingFamilyFaceStyleFonts
+ matchingFamilyFaceStyleSizeFonts|
fontsEncoding := subView font encoding.
@@ -6015,52 +6017,41 @@
(pref match:fontsEncoding) ifTrue:[
^ self
].
- "/ stupid ...
- pref = 'ascii*' ifTrue:[
- (fontsEncoding match:'iso8859*') ifTrue:[
- ^ self
- ]
+ (CharacterEncoder isEncoding:pref subSetOf:fontsEncoding) ifTrue:[
+ ^ self
].
filter := [:f | |coding|
(coding := f encoding) notNil
and:[pref match:coding]].
- defaultFont := FontDescription
- family:subView font family
- face:subView font face
- style:subView font style
- size:subView font size
- encoding:pref.
-
- defaultFont := TextView defaultFont onDevice:device.
- (pref match:(defaultFont encoding)) ifFalse:[
- defaultFont := nil.
- ].
-
+ device flushListOfAvailableFonts.
+ matchingFonts := device listOfAvailableFonts select:filter.
+ matchingFamilyFonts := matchingFonts select:[:f | f family = subView font family].
+ matchingFamilyFaceFonts := matchingFamilyFonts select:[:f | f face = subView font face].
+ matchingFamilyFaceStyleFonts := matchingFamilyFaceFonts select:[:f | f style = subView font style].
+ matchingFamilyFaceStyleSizeFonts := matchingFamilyFaceStyleFonts select:[:f | f size = subView font size].
+ matchingFamilyFaceStyleSizeFonts size > 0 ifTrue:[
+ defaultFont := matchingFamilyFaceStyleSizeFonts first
+ ] ifFalse:[
+ matchingFamilyFaceStyleFonts size > 0 ifTrue:[
+ defaultFont := matchingFamilyFaceStyleFonts first
+ ] ifFalse:[
+ matchingFamilyFaceFonts size > 0 ifTrue:[
+ defaultFont := matchingFamilyFaceFonts first
+ ] ifFalse:[
+ matchingFamilyFonts size > 0 ifTrue:[
+ defaultFont := matchingFamilyFonts first
+ ] ifFalse:[
+ matchingFonts size > 0 ifTrue:[
+ defaultFont := matchingFonts first
+ ].
+ ].
+ ].
+ ].
+ ].
+
defaultFont isNil ifTrue:[
- (pref = 'ascii*' or:[pref = 'iso8859*']) ifTrue:[
- defaultFont := FontDescription family:'courier' face:'medium' style:'roman' size:12
- ]
- ].
-
- defaultFont isNil ifTrue:[
- defaultFont := device
- listOfAvailableFonts
- detect:[:f | filter value:f]
- ifNone:nil.
- defaultFont isNil ifTrue:[
-
- "/ flush list, and refetch font list
- "/ (in case someone just changed the font path ...)
-
- device flushListOfAvailableFonts.
- defaultFont := device
- listOfAvailableFonts
- detect:[:f | filter value:f]
- ifNone:nil.
- ].
-
defaultFont isNil ifTrue:[
self warn:'Your display does not seem to provide any ' , newEncoding allBold , ' encoded font.\\Please select an appropriate font (iso10646-Unicode recommended)'.
pref := #'iso10646-1'.
@@ -7605,5 +7596,5 @@
!FileBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.572 2004-02-14 20:14:18 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.573 2004-02-14 20:24:04 cg Exp $'
! !