X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginserver.C;h=8feb6ed612ce35dfab061837d629aafb19915125;hb=ccd23c15fae578be22d48b1a1e8b09cb43d593ae;hp=94912ea51c6106752175216d39f808f8b99374fd;hpb=3ac8199743f244669cc87ceef9c3cd23710552f3;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginserver.C b/cinelerra-5.1/cinelerra/pluginserver.C index 94912ea5..8feb6ed6 100644 --- a/cinelerra-5.1/cinelerra/pluginserver.C +++ b/cinelerra-5.1/cinelerra/pluginserver.C @@ -271,7 +271,7 @@ int PluginServer::get_synthesis() void PluginServer::set_title(const char *string) { - if(title) delete [] title; + delete [] title; title = cstrdup(string); } @@ -1222,39 +1222,43 @@ Theme* PluginServer::get_theme() } -int PluginServer::get_plugin_png_path(char *png_path, const char *plugin_icons) +void PluginServer::get_plugin_png_name(char *png_name) { - char *pp = png_path, *ep = pp + BCTEXTLEN-1; - pp += snprintf(pp, ep-pp, "%s/picon", File::get_plugin_path()); - if( strcmp(DEFAULT_PICON, plugin_icons) ) - pp += snprintf(pp, ep-pp, "_%s", plugin_icons); - if( pp < ep ) *pp++ = '/'; + char *pp = png_name, *ep = pp + BCSTRLEN-1; char *cp = strrchr(path, '/'); cp = !cp ? path : cp+1; char *sp = strrchr(cp, '.'); if( !sp ) sp = cp+strlen(cp); while( pp < ep && cp < sp ) *pp++ = *cp++; - pp += snprintf(pp, ep-pp, ".png"); - *pp = 0; - struct stat st; - if( stat(png_path, &st) ) return 0; - if( !S_ISREG(st.st_mode) ) return 0; - if( st.st_size == 0 ) return 0; - return st.st_size; + snprintf(pp, ep-pp, ".png"); +} + +int PluginServer::get_plugin_png_path(char *png_path, const char *plugin_icons) +{ + char png_name[BCSTRLEN]; + get_plugin_png_name(png_name); + char *pp = png_path, *ep = pp + BCTEXTLEN-1; + pp += snprintf(pp, ep-pp, "%s/picon/%s/%s", + File::get_plugin_path(), plugin_icons, png_name); + return access(png_path,R_OK) ? 1 : 0; } int PluginServer::get_plugin_png_path(char *png_path) { - int len = get_plugin_png_path(png_path, mwindow->preferences->plugin_icons); - if( !len ) len = get_plugin_png_path(png_path, DEFAULT_PICON); - return len; + int ret = get_plugin_png_path(png_path, mwindow->preferences->plugin_icons); + if( ret ) ret = get_plugin_png_path(png_path, DEFAULT_PICON); + return ret; } VFrame *PluginServer::get_plugin_images() { char png_path[BCTEXTLEN]; - if( !get_plugin_png_path(png_path) ) return 0; - return VFramePng::vframe_png(png_path,0,0); + if( !get_plugin_png_path(png_path) ) + return VFramePng::vframe_png(png_path,0,0); + char png_name[BCSTRLEN]; + get_plugin_png_name(png_name); + unsigned char *data = mwindow->theme->get_image_data(png_name, 0); + return data ? new VFramePng(data, 0.) : 0; } VFrame *PluginServer::get_picon()