X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginserver.C;h=aff809f39da4768b205d655d37494ec15665f05d;hb=4c463964715f67d36cc3ecb92f414cb9f7ba720d;hp=9995a4a7a47dc43de079e8a044666786aa74cebf;hpb=26fe9e12d6d42ae8f7087ac7f08242769d77a84a;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginserver.C b/cinelerra-5.1/cinelerra/pluginserver.C index 9995a4a7..aff809f3 100644 --- a/cinelerra-5.1/cinelerra/pluginserver.C +++ b/cinelerra-5.1/cinelerra/pluginserver.C @@ -1222,48 +1222,43 @@ Theme* PluginServer::get_theme() } -int PluginServer::get_theme_png_path(char *png_path, const char *theme_dir) -{ - char *bp = strrchr(path, '/'); - if( !bp ) bp = path; else ++bp; - char *sp = strrchr(bp,'.'); - if( !sp ) sp = bp + strlen(bp); - char *cp = png_path, *dp = bp; - cp += sprintf(cp,"%s/%s/", mwindow->preferences->plugin_dir, theme_dir); - while( dp < sp ) *cp++ = *dp++; - strcpy(cp, ".png"); - 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; -} - -int PluginServer::get_theme_png_path(char *png_path, Theme *theme) -{ - char *bp = strrchr(theme->path, '/'); - if( !bp ) bp = theme->path; else ++bp; - char *sp = strrchr(bp,'.'); - if( !sp || ( strcmp(sp, ".plugin") && strcmp(sp,".so") ) ) return 0; - char theme_dir[BCTEXTLEN], *cp = theme_dir; - while( bp < sp ) *cp++ = *bp++; - *cp = 0; - return get_theme_png_path(png_path, theme_dir); +void PluginServer::get_plugin_png_name(char *png_name) +{ + 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++; + 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_theme_png_path(png_path, mwindow->theme); - if( !len ) - len = get_theme_png_path(png_path, "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()