projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixes and upgrades to guicast
[goodguy/history.git]
/
cinelerra-5.0
/
guicast
/
bcresources.C
diff --git
a/cinelerra-5.0/guicast/bcresources.C
b/cinelerra-5.0/guicast/bcresources.C
index d95a35b1496ed04ecffde988e134644e24702743..58d3c5879cfc0b08a29f4038254cacdb69e43b68 100644
(file)
--- a/
cinelerra-5.0/guicast/bcresources.C
+++ b/
cinelerra-5.0/guicast/bcresources.C
@@
-1401,13
+1401,20
@@
int BC_Resources::init_fontconfig(const char *search_path)
return 0;
}
return 0;
}
-BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, int mask)
+#define STYLE_MATCH(fst, stl, msk) ((fst) & (msk) & (stl)) && \
+ !((fst) & ~(style) & (msk))
+
+BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style,
+ int mask, int preferred)
{
{
- BC_FontEntry *entry, *style_match, *
displayname
_match;
+ BC_FontEntry *entry, *style_match, *
preferred
_match;
if(!fontlist)
return 0;
if(!fontlist)
return 0;
+ style_match = 0;
+ preferred_match = 0;
+
if(displayname)
{
for(int i = 0; i < fontlist->total; i++)
if(displayname)
{
for(int i = 0; i < fontlist->total; i++)
@@
-1415,34
+1422,49
@@
BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, i
entry = fontlist->values[i];
if(strcmp(entry->displayname, displayname) == 0 &&
entry = fontlist->values[i];
if(strcmp(entry->displayname, displayname) == 0 &&
- (entry->style & mask) == style)
- return entry;
+ STYLE_MATCH(entry->style, style, mask))
+ {
+ if(!style_match)
+ style_match = entry;
+ if(!preferred_match && (entry->style & preferred))
+ preferred_match = entry;
+ }
}
}
+ if(preferred_match)
+ return preferred_match;
+
+ if(style_match)
+ return style_match;
}
}
+
// No exact match - assume normal width font
style |= FL_WIDTH_NORMAL;
mask |= FL_WIDTH_MASK;
// No exact match - assume normal width font
style |= FL_WIDTH_NORMAL;
mask |= FL_WIDTH_MASK;
- style_match = 0; displayname_match = 0;
+ style_match = 0;
+ preferred_match = 0;
+
for(int i = 0; i < fontlist->total; i++)
{
entry = fontlist->values[i];
for(int i = 0; i < fontlist->total; i++)
{
entry = fontlist->values[i];
- if(!strncasecmp(displayname, entry->family,
- strlen(entry->family)))
- {
- if((entry->style & mask) == style)
- return entry;
- if(!displayname_match)
- displayname_match = entry;
- }
-
- if((entry->style & mask) == style)
+ if(STYLE_MATCH(entry->style, style, mask))
{
if(!style_match)
style_match = entry;
{
if(!style_match)
style_match = entry;
+
+ if(!preferred_match && (entry->style & preferred))
+ preferred_match = entry;
+
+ if(!strncasecmp(displayname, entry->family,
+ strlen(entry->family)))
+ return entry;
}
}
}
}
- return displayname_match ? displayname_match : style_match;
+
+ if(preferred_match)
+ return preferred_match;
+
+ return style_match;
}
size_t BC_Resources::encode(const char *from_enc, const char *to_enc,
}
size_t BC_Resources::encode(const char *from_enc, const char *to_enc,
@@
-1493,6
+1515,14
@@
size_t BC_Resources::encode(const char *from_enc, const char *to_enc,
return inbytes;
}
return inbytes;
}
+void BC_Resources::encode_to_utf8(char *buffer, int buflen)
+{
+ if(BC_Resources::locale_utf8) return;
+ char lbuf[buflen];
+ encode(encoding, 0, buffer, buflen, lbuf, buflen);
+ strcpy(buffer, lbuf);
+}
+
int BC_Resources::find_font_by_char(FT_ULong char_code, char *path_new, const FT_Face oldface)
{
FcPattern *font, *ofont;
int BC_Resources::find_font_by_char(FT_ULong char_code, char *path_new, const FT_Face oldface)
{
FcPattern *font, *ofont;