X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcresources.C;h=b51843b11232047a2f229fbd2a9c76b0260da955;hp=58d3c5879cfc0b08a29f4038254cacdb69e43b68;hb=65eb7d06c462c2caaa7fabcb8956add9e6b8abc7;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/guicast/bcresources.C b/cinelerra-5.1/guicast/bcresources.C index 58d3c587..b51843b1 100644 --- a/cinelerra-5.1/guicast/bcresources.C +++ b/cinelerra-5.1/guicast/bcresources.C @@ -144,6 +144,34 @@ void BC_Resources::init_font_defs(double scale) set_font(large_font_xft2, default_font_xft2); set_font(big_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 [] small_fontset; + delete [] medium_fontset; + delete [] large_fontset; + delete [] big_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 [] small_font_xft2; + delete [] medium_font_xft2; + delete [] large_font_xft2; + delete [] big_font_xft2; +} suffix_to_type_t BC_Resources::suffix_to_type[] = { @@ -205,6 +233,47 @@ 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) @@ -829,9 +901,21 @@ 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, "find '%s'", search_path); + const char *bc_font_path = getenv("BC_FONT_PATH"); + if( bc_font_path ) { + const char *path = bc_font_path; + for( int len=0; *path; path+=len ) { + const char *cp = strchr(path,':'); + len = !cp ? strlen(path) : cp-path; + char font_path[BCTEXTLEN]; + memcpy(font_path, path, len); font_path[len] = 0; + if( cp ) ++len; + fp += snprintf(fp, ep-fp, " '%s'", font_path); + } + } + fp += snprintf(fp, ep-fp, " -name 'fonts.scale' -print -exec cat {} \\;"); FILE *in = popen(find_command, "r"); FT_Library freetype_library = 0; @@ -862,7 +946,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++; @@ -954,25 +1038,25 @@ 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); // printf("TitleMain::build_fonts %s: success\n", entry->path); @@ -1426,7 +1510,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; } } @@ -1489,7 +1573,7 @@ size_t BC_Resources::encode(const char *from_enc, const char *to_enc, { if((cd = iconv_open(to_enc, from_enc)) == (iconv_t)-1) { - printf(_("Conversion from %s to %s is not available"), + printf(_("Conversion from %s to %s is not available\n"), from_enc, to_enc); return 0; }