mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-06-01 13:11:55 +00:00
When the family changes, score all faces in the new family and select the one that differs the least from what we want.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@14504 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
5b7fd41ef0
commit
293ff83e71
2 changed files with 64 additions and 7 deletions
|
@ -1,4 +1,11 @@
|
||||||
2002-09-29 Richard Frith-Macdonald <rfm@gnu.org>
|
2002-09-21 17:48 Alexander Malmberg <alexander@malmberg.org>
|
||||||
|
|
||||||
|
* Source/NSFontPanel.m (-_familySelectionChanged:, score_difference):
|
||||||
|
If an exact match for the wanted weight and traits can't be found,
|
||||||
|
score all faces in the new family and select the one that differs
|
||||||
|
the least.
|
||||||
|
|
||||||
|
2002-09-19 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/GNUmakefile: Set flags to generate documentation using
|
* Source/GNUmakefile: Set flags to generate documentation using
|
||||||
templates.
|
templates.
|
||||||
|
|
|
@ -738,6 +738,31 @@ float sizes[] = {4.0, 6.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0,
|
||||||
|
|
||||||
@implementation NSFontPanel (NSBrowserDelegate)
|
@implementation NSFontPanel (NSBrowserDelegate)
|
||||||
|
|
||||||
|
|
||||||
|
static int score_difference(int weight1, int traits1,
|
||||||
|
int weight2, int traits2)
|
||||||
|
{
|
||||||
|
int score, t;
|
||||||
|
|
||||||
|
score = (weight1 - weight2);
|
||||||
|
score = 10 * score * score;
|
||||||
|
|
||||||
|
t = traits1 ^ traits2;
|
||||||
|
|
||||||
|
if (t & NSFixedPitchFontMask) score += 1000;
|
||||||
|
if (t & NSCompressedFontMask) score += 150;
|
||||||
|
if (t & NSPosterFontMask) score += 200;
|
||||||
|
if (t & NSSmallCapsFontMask) score += 200;
|
||||||
|
if (t & NSCondensedFontMask) score += 150;
|
||||||
|
if (t & NSExpandedFontMask) score += 150;
|
||||||
|
if (t & NSNarrowFontMask) score += 150;
|
||||||
|
if (t & NSBoldFontMask) score += 20;
|
||||||
|
if (t & NSItalicFontMask) score += 45;
|
||||||
|
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void) _familySelectionChanged: (id)sender
|
- (void) _familySelectionChanged: (id)sender
|
||||||
{
|
{
|
||||||
NSFontManager *fm = [NSFontManager sharedFontManager];
|
NSFontManager *fm = [NSFontManager sharedFontManager];
|
||||||
|
@ -749,16 +774,41 @@ float sizes[] = {4.0, 6.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0,
|
||||||
ASSIGN(_faceList, [fm availableMembersOfFontFamily:
|
ASSIGN(_faceList, [fm availableMembersOfFontFamily:
|
||||||
[_familyList objectAtIndex: row]]);
|
[_familyList objectAtIndex: row]]);
|
||||||
_family = row;
|
_family = row;
|
||||||
|
|
||||||
// Select a face with similar properties
|
// Select a face with the same properties
|
||||||
for (i = 0; i < [_faceList count]; i++)
|
for (i = 0; i < [_faceList count]; i++)
|
||||||
{
|
{
|
||||||
NSArray *font_info = [_faceList objectAtIndex: i];
|
NSArray *font_info = [_faceList objectAtIndex: i];
|
||||||
|
|
||||||
if (([[font_info objectAtIndex: 2] intValue] == _weight) &&
|
if (([[font_info objectAtIndex: 2] intValue] == _weight)
|
||||||
([[font_info objectAtIndex: 3] unsignedIntValue] == _traits))
|
&& ([[font_info objectAtIndex: 3] unsignedIntValue] == _traits))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find the face that differs the least from what we want
|
||||||
|
if (i == [_faceList count])
|
||||||
|
{
|
||||||
|
int best, best_score, score;
|
||||||
|
|
||||||
|
best_score = 1e6;
|
||||||
|
best = -1;
|
||||||
|
|
||||||
|
for (i = 0; i < [_faceList count]; i++)
|
||||||
|
{
|
||||||
|
NSArray *font_info = [_faceList objectAtIndex: i];
|
||||||
|
score = score_difference(_weight, _traits,
|
||||||
|
[[font_info objectAtIndex: 2] intValue],
|
||||||
|
[[font_info objectAtIndex: 3] unsignedIntValue]);
|
||||||
|
if (score < best_score)
|
||||||
|
{
|
||||||
|
best = i;
|
||||||
|
best_score = score;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (best != -1)
|
||||||
|
i = best;
|
||||||
|
}
|
||||||
|
|
||||||
if (i == [_faceList count])
|
if (i == [_faceList count])
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue