X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcresources.C;h=38053d0943d67970ebaf45fdbdd760788cbfad65;hp=c97e802fe444431784d357347ab33679b5094cd3;hb=296147f865b3572c7e2ecdb47a5d827956221188;hpb=d85ee0843fbbd79a0a7d2ffa0aac57968e24f6d7 diff --git a/cinelerra-5.1/guicast/bcresources.C b/cinelerra-5.1/guicast/bcresources.C index c97e802f..38053d09 100644 --- a/cinelerra-5.1/guicast/bcresources.C +++ b/cinelerra-5.1/guicast/bcresources.C @@ -27,7 +27,7 @@ #include "bcsignals.h" #include "bcsynchronous.h" #include "bcwindowbase.h" -#include "colors.h" +#include "bccolors.h" #include "bccmodels.h" #include "cstrdup.h" #include "fonts.h" @@ -59,6 +59,7 @@ char BC_Resources::region[LEN_LANG] = {0}; char BC_Resources::encoding[LEN_ENCOD] = {0}; const char *BC_Resources::wide_encoding = 0; ArrayList *BC_Resources::fontlist = 0; +int BC_Resources::font_debug = 0; const char *BC_Resources::fc_properties[] = { FC_SLANT, FC_WEIGHT, FC_WIDTH }; #define LEN_FCPROP (sizeof(BC_Resources::fc_properties) / sizeof(const char*)) @@ -72,10 +73,14 @@ static const char *def_big_font = "-*-bitstream charter-bold-r-normal-*-*-0-%d-%d-p-0-iso8859-1"; // 160 static const char *def_big_font2 = "-*-nimbus sans l-bold-r-normal-*-*-0-%d-%d-p-0-iso8859-1"; // 160 +static const char *def_clock_font = "-*-helvetica-bold-r-normal-*-%d-*"; // 16 +static const char *def_clock_font2 = "-*-helvetica-bold-r-normal-*-%d-*"; // 18 static const char *def_small_fontset = "-*-helvetica-medium-r-normal-*-%d-*";// 10 static const char *def_medium_fontset = "-*-helvetica-bold-r-normal-*-%d-*"; // 14 static const char *def_large_fontset = "-*-helvetica-bold-r-normal-*-%d-*"; // 18 static const char *def_big_fontset = "-*-helvetica-bold-r-normal-*-%d-*"; // 24 +static const char *def_clock_fontset = "-*-helvetica-bold-r-normal-*-%d-*"; // 16 + static const char *def_small_font_xft = "Sans:pixelsize=%.4f"; // 10.6667 static const char *def_small_b_font_xft = "Sans:bold:pixelsize=%.4f"; // 10.6667 static const char *def_medium_font_xft = "Sans:pixelsize=%.4f"; // 13.3333 @@ -84,6 +89,7 @@ static const char *def_large_font_xft = "Sans:pixelsize=%.4f"; // 21.3 static const char *def_large_b_font_xft = "Sans:bold:pixelsize=%.4f"; // 21.3333 static const char *def_big_font_xft = "Sans:pixelsize=37.3333"; // 37.3333 static const char *def_big_b_font_xft = "Sans:bold:pixelsize=37.33333"; // 37.3333 +static const char *def_clock_font_xft = "Sans:pixelsize=%.4f"; // 16 #define default_font_xft2 "-microsoft-verdana-*-*-*-*-*-*-*-*-*-*-*-*" @@ -95,10 +101,13 @@ const char* BC_Resources::large_font = 0; const char* BC_Resources::large_font2 = 0; const char* BC_Resources::big_font = 0; const char* BC_Resources::big_font2 = 0; +const char* BC_Resources::clock_font = 0; +const char* BC_Resources::clock_font2 = 0; const char* BC_Resources::small_fontset = 0; const char* BC_Resources::medium_fontset = 0; const char* BC_Resources::large_fontset = 0; const char* BC_Resources::big_fontset = 0; +const char* BC_Resources::clock_fontset = 0; const char* BC_Resources::small_font_xft = 0; const char* BC_Resources::small_font_xft2 = 0; const char* BC_Resources::small_b_font_xft = 0; @@ -111,6 +120,8 @@ const char* BC_Resources::large_b_font_xft = 0; const char* BC_Resources::big_font_xft = 0; const char* BC_Resources::big_font_xft2 = 0; const char* BC_Resources::big_b_font_xft = 0; +const char* BC_Resources::clock_font_xft = 0; +const char* BC_Resources::clock_font_xft2 = 0; #define def_font(v, s...) do { sprintf(string,def_##v,s); v = cstrdup(string); } while(0) #define set_font(v, s) do { sprintf(string, "%s", s); v = cstrdup(string); } while(0) @@ -125,11 +136,14 @@ void BC_Resources::init_font_defs(double scale) def_font(large_font, iround(scale*18)); def_font(large_font2, iround(scale*20)); def_font(big_font, iround(scale*160), iround(scale*160)); - def_font(big_font2, iround(scale*160), iround(scale*160)); + def_font(big_font2, iround(scale*16), iround(scale*16)); + def_font(clock_font, iround(scale*16)); + def_font(clock_font2, iround(scale*18)); def_font(small_fontset, iround(scale*10)); def_font(medium_fontset, iround(scale*14)); def_font(large_fontset, iround(scale*18)); def_font(big_fontset, iround(scale*24)); + def_font(clock_fontset, iround(scale*16)); def_font(small_font_xft, (scale*10.6667)); def_font(small_b_font_xft, (scale*10.6667)); def_font(medium_font_xft, (scale*13.3333)); @@ -138,26 +152,123 @@ void BC_Resources::init_font_defs(double scale) def_font(large_b_font_xft, (scale*21.3333)); def_font(big_font_xft, (scale*37.3333)); def_font(big_b_font_xft, (scale*37.3333)); + def_font(clock_font_xft, (scale*16.)); set_font(small_font_xft2, default_font_xft2); set_font(medium_font_xft2, default_font_xft2); set_font(large_font_xft2, default_font_xft2); set_font(big_font_xft2, default_font_xft2); + set_font(clock_font_xft2, default_font_xft2); +} +void BC_Resources::finit_font_defs() +{ + delete [] small_font; + delete [] small_font2; + delete [] medium_font; + delete [] medium_font2; + delete [] large_font; + delete [] large_font2; + delete [] big_font; + delete [] big_font2; + delete [] clock_font; + delete [] clock_font2; + delete [] small_fontset; + delete [] medium_fontset; + delete [] large_fontset; + delete [] big_fontset; + delete [] clock_fontset; + delete [] small_font_xft; + delete [] small_b_font_xft; + delete [] medium_font_xft; + delete [] medium_b_font_xft; + delete [] large_font_xft; + delete [] large_b_font_xft; + delete [] big_font_xft; + delete [] big_b_font_xft; + delete [] clock_font_xft; + + delete [] small_font_xft2; + delete [] medium_font_xft2; + delete [] large_font_xft2; + delete [] big_font_xft2; + delete [] clock_font_xft2; } + suffix_to_type_t BC_Resources::suffix_to_type[] = { - { "m2v", ICON_FILM }, - { "mov", ICON_FILM }, - { "mp2", ICON_SOUND }, - { "mp3", ICON_SOUND }, - { "ac3", ICON_SOUND }, - { "mpg", ICON_FILM }, - { "vob", ICON_FILM }, - { "ifo", ICON_FILM }, - { "ts", ICON_FILM }, - { "vts", ICON_FILM }, - { "wav", ICON_SOUND } + { "aac", ICON_SOUND }, + { "ac3", ICON_SOUND }, + { "dts", ICON_SOUND }, + { "f4a", ICON_SOUND }, + { "flac", ICON_SOUND }, + { "m4a", ICON_SOUND }, + { "mp2", ICON_SOUND }, + { "mp3", ICON_SOUND }, + { "mpc", ICON_SOUND }, + { "oga", ICON_SOUND }, + { "ogg", ICON_SOUND }, + { "opus", ICON_SOUND }, + { "ra", ICON_SOUND }, + { "tta", ICON_SOUND }, + { "vox", ICON_SOUND }, + { "wav", ICON_SOUND }, + { "wma", ICON_SOUND }, + { "3gp", ICON_FILM }, + { "avi", ICON_FILM }, + { "bmp", ICON_FILM }, + { "cr2", ICON_FILM }, + { "dnxhd", ICON_FILM }, + { "drc", ICON_FILM }, + { "dv", ICON_FILM }, + { "dvd", ICON_FILM }, + { "exr", ICON_FILM }, + { "f4v", ICON_FILM }, + { "flv", ICON_FILM }, + { "gif", ICON_FILM }, + { "gxf", ICON_FILM }, + { "h263", ICON_FILM }, + { "h264", ICON_FILM }, + { "h265", ICON_FILM }, + { "hevc", ICON_FILM }, + { "ifo", ICON_FILM }, + { "jpeg", ICON_FILM }, + { "jpg", ICON_FILM }, + { "m2t", ICON_FILM }, + { "m2ts", ICON_FILM }, + { "m2v", ICON_FILM }, + { "m4p", ICON_FILM }, + { "m4v", ICON_FILM }, + { "mkv", ICON_FILM }, + { "mov", ICON_FILM }, + { "mp4", ICON_FILM }, + { "mpe", ICON_FILM }, + { "mpeg", ICON_FILM }, + { "mpg", ICON_FILM }, + { "mpv", ICON_FILM }, + { "mts", ICON_FILM }, + { "mxf", ICON_FILM }, + { "ogv", ICON_FILM }, + { "pcm", ICON_FILM }, + { "pgm", ICON_FILM }, + { "png", ICON_FILM }, + { "ppm", ICON_FILM }, + { "qt", ICON_FILM }, + { "rm", ICON_FILM }, + { "rmvb", ICON_FILM }, + { "rv", ICON_FILM }, + { "swf", ICON_FILM }, + { "tif", ICON_FILM }, + { "tiff", ICON_FILM }, + { "ts", ICON_FILM }, + { "vob", ICON_FILM }, + { "vts", ICON_FILM }, + { "webm", ICON_FILM }, + { "webp", ICON_FILM }, + { "wmv", ICON_FILM }, + { "xml", ICON_FILM }, + { "y4m", ICON_FILM }, + { 0, 0 }, }; BC_Signals* BC_Resources::signal_handler = 0; @@ -205,12 +316,55 @@ int BC_Resources::get_machine_cpus() return cpus; } +void BC_Resources::new_vframes(int n, VFrame *vframes[], ...) +{ + va_list ap; + va_start(ap, vframes); + for( int i=0; i= 0 ) delete vframes[n]; +} + BC_Resources::~BC_Resources() { + delete id_lock; + delete create_window_lock; + del_vframes(default_type_to_icon, 6); + delete default_bar; + del_vframes(default_cancel_images, 3); + del_vframes(default_ok_images, 3); + del_vframes(default_usethis_images, 3); +#if 0 + del_vframes(default_checkbox_images, 5); + del_vframes(default_radial_images, 5); + del_vframes(default_label_images, 5); +#endif + del_vframes(default_menuitem_data, 3); + del_vframes(default_menubar_data, 3); + delete default_menu_popup_bg; + delete default_menu_bar_bg; + delete default_check_image; + del_vframes(default_filebox_text_images, 3); + del_vframes(default_filebox_icons_images, 3); + del_vframes(default_filebox_updir_images, 3); + del_vframes(default_filebox_newfolder_images, 3); + del_vframes(default_filebox_rename_images, 3); + del_vframes(default_filebox_delete_images, 3); + del_vframes(default_filebox_reload_images, 3); + del_vframes(default_listbox_button, 4); + delete default_listbox_bg; + del_vframes(default_listbox_expand, 5); + del_vframes(default_listbox_column, 3); + delete default_listbox_up; + delete default_listbox_dn; + del_vframes(default_pot_images, 3); + del_vframes(default_progress_images, 2); + del_vframes(default_medium_7segment, 20); + if( fontlist ) { + fontlist->remove_all_objects(); + delete fontlist; + } + finit_font_defs(); } int BC_Resources::initialize_display(BC_WindowBase *window) @@ -831,9 +985,27 @@ int BC_Resources::init_fontconfig(const char *search_path) } while(0) char find_command[BCTEXTLEN]; - sprintf(find_command, - "find %s -name 'fonts.dir' -print -exec cat {} \\;", - search_path); + char *fp = find_command, *ep = fp+sizeof(find_command)-1; + fp += snprintf(fp, ep-fp, "%s", "find"); + const char *bc_font_path = getenv("BC_FONT_PATH"); +// if BC_FONT_PATH starts with ':', omit default path + if( !(bc_font_path && bc_font_path[0] == ':') ) + fp += snprintf(fp, ep-fp, " '%s'", search_path); + if( bc_font_path ) { + const char *path = bc_font_path; + while( *path ) { + char font_path[BCTEXTLEN]; + const char *cp = strchr(path,':'); + int len = !cp ? strlen(path) : cp-path; + if( len > 0 ) { + memcpy(font_path, path, len); + font_path[len] = 0; path += len; + fp += snprintf(fp, ep-fp, " '%s'", font_path); + } + if( cp ) ++path; + } + } + fp += snprintf(fp, ep-fp, " -name 'fonts.scale' -print -exec cat {} \\;"); FILE *in = popen(find_command, "r"); FT_Library freetype_library = 0; @@ -864,7 +1036,7 @@ int BC_Resources::init_fontconfig(const char *search_path) entry->path = cstrcat(2, current_dir, string); // Foundary skip_str(" -", in_ptr); - get_str(string, " -\n", in_ptr, 1); + get_str(string, "-\n", in_ptr, 1); if( !string[0] ) { delete entry; continue; } entry->foundry = cstrdup(string); if(*in_ptr == '-') in_ptr++; @@ -956,32 +1128,37 @@ int BC_Resources::init_fontconfig(const char *search_path) } if(!strcasecmp(entry->swidth, "normal")) - entry->style = FL_WIDTH_NORMAL; + entry->style |= FL_WIDTH_NORMAL; else if(!strcasecmp(entry->swidth, "ultracondensed")) - entry->style = FL_WIDTH_ULTRACONDENSED; + entry->style |= FL_WIDTH_ULTRACONDENSED; else if(!strcasecmp(entry->swidth, "extracondensed")) - entry->style = FL_WIDTH_EXTRACONDENSED; + entry->style |= FL_WIDTH_EXTRACONDENSED; else if(!strcasecmp(entry->swidth, "condensed")) - entry->style = FL_WIDTH_CONDENSED; + entry->style |= FL_WIDTH_CONDENSED; else if(!strcasecmp(entry->swidth, "semicondensed")) - entry->style = FL_WIDTH_SEMICONDENSED; + entry->style |= FL_WIDTH_SEMICONDENSED; else if(!strcasecmp(entry->swidth, "semiexpanded")) - entry->style = FL_WIDTH_SEMIEXPANDED; + entry->style |= FL_WIDTH_SEMIEXPANDED; else if(!strcasecmp(entry->swidth, "expanded")) - entry->style = FL_WIDTH_EXPANDED; + entry->style |= FL_WIDTH_EXPANDED; else if(!strcasecmp(entry->swidth, "extraexpanded")) - entry->style = FL_WIDTH_EXTRAEXPANDED; + entry->style |= FL_WIDTH_EXTRAEXPANDED; else if(!strcasecmp(entry->swidth, "ultraexpanded")) - entry->style = FL_WIDTH_ULTRAEXPANDED; + entry->style |= FL_WIDTH_ULTRAEXPANDED; else - entry->style = FL_WIDTH_NORMAL; + entry->style |= FL_WIDTH_NORMAL; fontlist->append(entry); + if( font_debug ) + dump_font_entry(stdout, "font 0: ", entry); + // printf("TitleMain::build_fonts %s: success\n", entry->path); //printf("TitleMain::build_fonts 2\n"); } pclose(in); + if( bc_font_path && bc_font_path[0] == ':' ) + return 0; // Load all the fonts from fontconfig FcPattern *pat; @@ -1189,6 +1366,8 @@ int BC_Resources::init_fontconfig(const char *search_path) } fontlist->append(entry); + if( font_debug ) + dump_font_entry(stdout, "font 1: ", entry); } FcFontSetDestroy(fs); @@ -1398,6 +1577,8 @@ int BC_Resources::init_fontconfig(const char *search_path) strcpy(entry->displayname, entry->family); } fontlist->append(entry); + if( font_debug ) + dump_font_entry(stdout, "font 2: ", entry); } FcFontSetDestroy(fs); return 0; @@ -1428,7 +1609,7 @@ BC_FontEntry *BC_Resources::find_fontentry(const char *displayname, int style, { if(!style_match) style_match = entry; - if(!preferred_match && (entry->style & preferred)) + if(!preferred_match && entry->fixed_style == preferred) preferred_match = entry; } } @@ -1607,13 +1788,16 @@ FcPattern* BC_Resources::find_similar_font(FT_ULong char_code, FcPattern *oldfon 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); - } + for( int i=0; itotal; ++i ) + dump_font_entry(fp, "", fontlist->values[i]); +} + +void BC_Resources::dump_font_entry(FILE *fp, const char *cp, BC_FontEntry *ep) +{ + fprintf(fp,"%s%s = %s\n",cp,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); }