Use a tri-state to mark the fonts which didn't get blocked but were just
missing an element, to distinguish them from the fonts that do match the element. reviewed by: plam
This commit is contained in:
parent
f11a184104
commit
9e07e0a77b
|
@ -1,3 +1,11 @@
|
||||||
|
2006-02-10 Takashi Iwai <tiwai@suse.de>
|
||||||
|
reviewed by: plam
|
||||||
|
* src/fcmatch.c (FcFontSetMatch):
|
||||||
|
|
||||||
|
Use a tri-state to mark the fonts which didn't get blocked but
|
||||||
|
were just missing an element, to distinguish them from the
|
||||||
|
fonts that do match the element.
|
||||||
|
|
||||||
2006-02-10 Takashi Iwai <tiwai@suse.de>
|
2006-02-10 Takashi Iwai <tiwai@suse.de>
|
||||||
reviewed by: plam
|
reviewed by: plam
|
||||||
* src/fcmatch.c (FcFontSetMatch):
|
* src/fcmatch.c (FcFontSetMatch):
|
||||||
|
|
|
@ -524,7 +524,7 @@ FcFontSetMatch (FcConfig *config,
|
||||||
FcMatcher *weak_matchers[NUM_MATCH_VALUES];
|
FcMatcher *weak_matchers[NUM_MATCH_VALUES];
|
||||||
FcPatternElt *pat_elts[NUM_MATCH_VALUES];
|
FcPatternElt *pat_elts[NUM_MATCH_VALUES];
|
||||||
int pat_elt;
|
int pat_elt;
|
||||||
FcBool *match_blocked;
|
int *match_blocked;
|
||||||
int block_start;
|
int block_start;
|
||||||
|
|
||||||
if (!nsets || !sets || !p)
|
if (!nsets || !sets || !p)
|
||||||
|
@ -560,7 +560,7 @@ FcFontSetMatch (FcConfig *config,
|
||||||
|
|
||||||
fonts_left = nfonts;
|
fonts_left = nfonts;
|
||||||
|
|
||||||
match_blocked = (FcBool*)calloc(nfonts, sizeof(FcBool));
|
match_blocked = (int*)calloc(nfonts, sizeof(int));
|
||||||
|
|
||||||
/* Find out all necessary matchers first, so we don't need to find them
|
/* Find out all necessary matchers first, so we don't need to find them
|
||||||
* in every loop.
|
* in every loop.
|
||||||
|
@ -631,7 +631,7 @@ FcFontSetMatch (FcConfig *config,
|
||||||
int cand_elt;
|
int cand_elt;
|
||||||
FcPatternElt *cand_elts;
|
FcPatternElt *cand_elts;
|
||||||
|
|
||||||
if (match_blocked[f + sets_offset[set]])
|
if (match_blocked[f + sets_offset[set]] == 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
score = 1e99;
|
score = 1e99;
|
||||||
|
@ -675,8 +675,11 @@ FcFontSetMatch (FcConfig *config,
|
||||||
|
|
||||||
/* We had no matching, just try the next one */
|
/* We had no matching, just try the next one */
|
||||||
if (score == 1e99)
|
if (score == 1e99)
|
||||||
|
{
|
||||||
|
match_blocked[f + sets_offset[set]] = 2;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
match_blocked[f + sets_offset[set]] = 0;
|
||||||
/* If there's a previous champion, and current score
|
/* If there's a previous champion, and current score
|
||||||
* beats previous best score, on this element, then
|
* beats previous best score, on this element, then
|
||||||
* knock out the previous champion and anything
|
* knock out the previous champion and anything
|
||||||
|
@ -691,20 +694,21 @@ FcFontSetMatch (FcConfig *config,
|
||||||
for (b = block_start; b < f + sets_offset[set]; ++b)
|
for (b = block_start; b < f + sets_offset[set]; ++b)
|
||||||
if (!match_blocked[b])
|
if (!match_blocked[b])
|
||||||
{
|
{
|
||||||
match_blocked[b] = FcTrue;
|
match_blocked[b] = 1;
|
||||||
--fonts_left;
|
--fonts_left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bestscore = score;
|
bestscore = score;
|
||||||
best = s->fonts[f];
|
best = s->fonts[f];
|
||||||
block_start = f + sets_offset[set];
|
/* This kills too many fonts, unfortunately. */
|
||||||
|
/* block_start = f + sets_offset[set]; */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If f loses, then it's out too. */
|
/* If f loses, then it's out too. */
|
||||||
if (best && score > bestscore)
|
if (best && score > bestscore)
|
||||||
{
|
{
|
||||||
match_blocked[f + sets_offset[set]] = FcTrue;
|
match_blocked[f + sets_offset[set]] = 1;
|
||||||
--fonts_left;
|
--fonts_left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue