X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fguicast%2Fbcresources.C;h=7ac9096b470f68956f7822a27728aa987b61a602;hb=e919ce8a71cdc99bb7344cc192e13a2c2db9e1c0;hp=ef77752355491a20c1aaf6f3877e692d77b7a703;hpb=2d99bb8ce591f05a31464b517d85dc2bc35b2abe;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/guicast/bcresources.C b/cinelerra-5.0/guicast/bcresources.C index ef777523..7ac9096b 100644 --- a/cinelerra-5.0/guicast/bcresources.C +++ b/cinelerra-5.0/guicast/bcresources.C @@ -1,7 +1,7 @@ /* * CINELERRA - * Copyright (C) 2009 Adam Williams + * Copyright (C) 2009-2015 Adam Williams * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -329,6 +329,10 @@ BC_Resources::BC_Resources() }; #endif +#include "images/check_png.h" + static VFrame* default_check_image = new VFrame(check_png); + check = default_check_image; + #include "images/file_text_up_png.h" #include "images/file_text_hi_png.h" #include "images/file_text_dn_png.h" @@ -954,12 +958,51 @@ int BC_Resources::init_fontconfig(const char *search_path) sprintf(line, "%s (%s)", entry->family, entry->foundry); entry->displayname = cstrdup(line); - if(!strcasecmp(entry->weight, "demibold") || - !strcasecmp(entry->weight, "bold")) + if(!strcasecmp(entry->weight, "demibold")) { + entry->fixed_style |= BC_FONT_BOLD; + entry->style |= FL_WEIGHT_DEMIBOLD; + } + else if(!strcasecmp(entry->weight, "bold")) { entry->fixed_style |= BC_FONT_BOLD; - if(!strcasecmp(entry->slant, "i") || - !strcasecmp(entry->slant, "o")) + entry->style |= FL_WEIGHT_BOLD; + } + else { + entry->style |= FL_WEIGHT_NORMAL; + } + + if(!strcasecmp(entry->slant, "r")) { + entry->style |= FL_SLANT_ROMAN; + } + else if(!strcasecmp(entry->slant, "i")) { + entry->style |= FL_SLANT_ITALIC; + entry->fixed_style |= BC_FONT_ITALIC; + } + else if(!strcasecmp(entry->slant, "o")) { + entry->style |= FL_SLANT_OBLIQUE; entry->fixed_style |= BC_FONT_ITALIC; + } + + if(!strcasecmp(entry->swidth, "normal")) + entry->style = FL_WIDTH_NORMAL; + else if(!strcasecmp(entry->swidth, "ultracondensed")) + entry->style = FL_WIDTH_ULTRACONDENSED; + else if(!strcasecmp(entry->swidth, "extracondensed")) + entry->style = FL_WIDTH_EXTRACONDENSED; + else if(!strcasecmp(entry->swidth, "condensed")) + entry->style = FL_WIDTH_CONDENSED; + else if(!strcasecmp(entry->swidth, "semicondensed")) + entry->style = FL_WIDTH_SEMICONDENSED; + else if(!strcasecmp(entry->swidth, "semiexpanded")) + entry->style = FL_WIDTH_SEMIEXPANDED; + else if(!strcasecmp(entry->swidth, "expanded")) + entry->style = FL_WIDTH_EXPANDED; + else if(!strcasecmp(entry->swidth, "extraexpanded")) + entry->style = FL_WIDTH_EXTRAEXPANDED; + else if(!strcasecmp(entry->swidth, "ultraexpanded")) + entry->style = FL_WIDTH_ULTRAEXPANDED; + else + entry->style = FL_WIDTH_NORMAL; + fontlist->append(entry); // printf("TitleMain::build_fonts %s: success\n", entry->path); //printf("TitleMain::build_fonts 2\n"); @@ -974,7 +1017,8 @@ int BC_Resources::init_fontconfig(const char *search_path) FcChar8 *family, *file, *foundry, *style, *format; int slant, spacing, width, weight; int force_style = 0; - int limit_to_trutype = 0; // if you want limit search to TrueType put 1 +// if you want limit search to TrueType put 1 + int limit_to_trutype = 1; FcConfig *config; int i; char tmpstring[BCTEXTLEN]; @@ -1012,7 +1056,7 @@ int BC_Resources::init_fontconfig(const char *search_path) force_style = 0; FcPatternGetString(font, FC_FONTFORMAT, 0, &format); //on this point you can limit font search - if(!limit_to_trutype || !strcmp((char *)format, "TrueType")) + if(limit_to_trutype && strcmp((char *)format, "TrueType")) continue; sprintf(tmpstring, "%s", format); @@ -1065,13 +1109,16 @@ int BC_Resources::init_fontconfig(const char *search_path) case FC_SLANT_ROMAN: default: entry->slant = cstrdup("r"); + entry->style |= FL_SLANT_ROMAN; break; case FC_SLANT_ITALIC: entry->slant = cstrdup("i"); + entry->style |= FL_SLANT_ITALIC; entry->fixed_style |= BC_FONT_ITALIC; break; case FC_SLANT_OBLIQUE: entry->slant = cstrdup("o"); + entry->style |= FL_SLANT_OBLIQUE; entry->fixed_style |= BC_FONT_ITALIC; break; } @@ -1250,25 +1297,6 @@ int BC_Resources::init_fontconfig(const char *search_path) } } - if(FcPatternGetInteger(font, FC_SLANT, 0, &intvalue) == FcResultMatch) - { - switch(intvalue) - { - case FC_SLANT_ROMAN: - default: - entry->style |= FL_SLANT_ROMAN; - break; - - case FC_SLANT_ITALIC: - entry->style |= FL_SLANT_ITALIC; - break; - - case FC_SLANT_OBLIQUE: - entry->style |= FL_SLANT_OBLIQUE; - break; - } - } - if(FcPatternGetInteger(font, FC_WEIGHT, 0, &intvalue) == FcResultMatch) { switch(intvalue) @@ -1404,7 +1432,7 @@ int BC_Resources::init_fontconfig(const char *search_path) BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, int mask) { - BC_FontEntry *entry, *style_match; + BC_FontEntry *entry, *style_match, *displayname_match; if(!fontlist) return 0; @@ -1423,22 +1451,27 @@ BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, i // No exact match - assume normal width font style |= FL_WIDTH_NORMAL; mask |= FL_WIDTH_MASK; - style_match = 0; + style_match = 0; displayname_match = 0; 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) style_match = entry; - - if(!strncasecmp(displayname, entry->family, - strlen(entry->family))) - return entry; } } - return style_match; + return displayname_match ? displayname_match : style_match; } size_t BC_Resources::encode(const char *from_enc, const char *to_enc, @@ -1569,3 +1602,15 @@ FcPattern* BC_Resources::find_similar_font(FT_ULong char_code, FcPattern *oldfon return pat; } +void BC_Resources::dump_fonts(FILE *fp) +{ + for( int i=0; itotal; ++i ) { + BC_FontEntry *ep = fontlist->values[i]; + fprintf(fp,"%s = %s\n",ep->displayname,ep->path); + fprintf(fp," %s:%s:%s:%s:%s:%s:%d:%d:%d:%d:%d:%s:%d:%s:%s:%d\n", + ep->foundry, ep->family, ep->weight, ep->slant, ep->swidth, ep->adstyle, + ep->pixelsize, ep->pointsize, ep->xres, ep->yres, ep->style, ep->spacing, + ep->avg_width, ep->registry, ep->encoding, ep->fixed_style); + } +} +