#ifdef __LINK_AT_RUNTIME__ DEFINE_SYMBOL(long, bfd_canonicalize_reloc, bfd *abfd, asection *sec, arelent **loc, asymbol **syms); DEFINE_SYMBOL(bfd_boolean, bfd_close, bfd *abfd); DEFINE_SYMBOL(bfd_boolean, bfd_check_format, bfd *abfd, bfd_format format); DEFINE_SYMBOL(const char *, bfd_errmsg, bfd_error_type error_tag); DEFINE_SYMBOL(enum bfd_architecture, bfd_get_arch, bfd *abfd); DEFINE_SYMBOL(bfd_error_type, bfd_get_error, void); DEFINE_SYMBOL(unsigned long, bfd_get_mach, bfd *abfd); DEFINE_SYMBOL(long, bfd_get_reloc_upper_bound, bfd *abfd, asection *sect); DEFINE_SYMBOL(bfd_boolean, bfd_get_section_contents, bfd *abfd, asection *section, void *location, file_ptr offset, bfd_size_type count); DEFINE_SYMBOL(asection *, bfd_make_section, bfd *, const char *name); DEFINE_SYMBOL(asection *, bfd_make_section_anyway_with_flags, bfd *abfd, const char *name, flagword flags); DEFINE_SYMBOL(bfd *, bfd_openr, const char *filename, const char *target); DEFINE_SYMBOL(bfd *, bfd_openw, const char *filename, const char *target); DEFINE_SYMBOL(bfd_boolean, bfd_set_file_flags, bfd *abfd, flagword flags); DEFINE_SYMBOL(void, bfd_set_reloc, bfd *abfd, asection *sec, arelent **rel, unsigned int count); DEFINE_SYMBOL(bfd_boolean, bfd_set_section_contents, bfd *abfd, asection *section, const void *data, file_ptr offset, bfd_size_type count); DEFINE_SYMBOL(bfd_boolean, bfd_set_format, bfd *abfd, bfd_format format); DEFINE_SYMBOL(bfd_boolean, bfd_set_section_flags, bfd *abfd, asection *sec, flagword flags); DEFINE_SYMBOL(bfd_boolean, bfd_set_section_size, bfd *abfd, asection *sec, bfd_size_type val); DEFINE_SYMBOL(bfd_boolean, bfd_set_start_address, bfd *abfd, bfd_vma vma); DEFINE_SYMBOL(bfd_boolean, bfd_set_symtab, bfd *abfd, asymbol **location, unsigned int count); #define bfd_canonicalize_reloc OVERRIDE_SYMBOL(bfd_canonicalize_reloc) #define bfd_close OVERRIDE_SYMBOL(bfd_close) #define bfd_check_format OVERRIDE_SYMBOL(bfd_check_format) #define bfd_errmsg OVERRIDE_SYMBOL(bfd_errmsg) #define bfd_get_arch OVERRIDE_SYMBOL(bfd_get_arch) #define bfd_get_error OVERRIDE_SYMBOL(bfd_get_error) #define bfd_get_mach OVERRIDE_SYMBOL(bfd_get_mach) #define bfd_get_reloc_upper_bound OVERRIDE_SYMBOL(bfd_get_reloc_upper_bound) #define bfd_get_section_contents OVERRIDE_SYMBOL(bfd_get_section_contents) #define bfd_make_section OVERRIDE_SYMBOL(bfd_make_section) #define bfd_make_section_anyway_with_flags OVERRIDE_SYMBOL(bfd_make_section_anyway_with_flags) #define bfd_openr OVERRIDE_SYMBOL(bfd_openr) #define bfd_openw OVERRIDE_SYMBOL(bfd_openw) #define bfd_set_file_flags OVERRIDE_SYMBOL(bfd_set_file_flags) #define bfd_set_format OVERRIDE_SYMBOL(bfd_set_format) #define bfd_set_reloc OVERRIDE_SYMBOL(bfd_set_reloc) #define bfd_set_section_contents OVERRIDE_SYMBOL(bfd_set_section_contents) #define bfd_set_section_flags OVERRIDE_SYMBOL(bfd_set_section_flags) #define bfd_set_section_size OVERRIDE_SYMBOL(bfd_set_section_size) #define bfd_set_start_address OVERRIDE_SYMBOL(bfd_set_start_address) #define bfd_set_symtab OVERRIDE_SYMBOL(bfd_set_symtab) SYMBOL_TABLE(libbfd_symbols, SYMBOL(bfd_openr), SYMBOL(bfd_set_format), ); #endif #include DEFINE_SYMBOL(void, rsvg_init, void); DEFINE_SYMBOL(RsvgHandle *, rsvg_handle_new, void); DEFINE_SYMBOL(GdkPixbuf *, rsvg_handle_get_pixbuf, RsvgHandle *handle); DEFINE_SYMBOL(gboolean, rsvg_handle_close, RsvgHandle * handle, GError ** error); DEFINE_SYMBOL(void, rsvg_handle_get_dimensions, RsvgHandle * handle, RsvgDimensionData * dimension_data); DEFINE_SYMBOL(gboolean, rsvg_handle_write, RsvgHandle * handle, const guchar * buf, gsize count, GError ** error); DEFINE_SYMBOL(void, rsvg_handle_set_size_callback, RsvgHandle * handle, RsvgSizeFunc size_func, gpointer user_data, GDestroyNotify user_data_destroy); #define rsvg_init OVERRIDE_SYMBOL(rsvg_init) #define rsvg_handle_new OVERRIDE_SYMBOL(rsvg_handle_new) #define rsvg_handle_get_pixbuf OVERRIDE_SYMBOL(rsvg_handle_get_pixbuf) #define rsvg_handle_close OVERRIDE_SYMBOL(rsvg_handle_close) #define rsvg_handle_write OVERRIDE_SYMBOL(rsvg_handle_write) #define rsvg_handle_set_size_callback OVERRIDE_SYMBOL(rsvg_handle_set_size_callback) #define rsvg_handle_get_dimensions OVERRIDE_SYMBOL(rsvg_handle_get_dimensions) SYMBOL_TABLE(librsvg_symbols, SYMBOL(rsvg_init), SYMBOL(rsvg_handle_new), SYMBOL(rsvg_handle_close), SYMBOL(rsvg_handle_write), SYMBOL(rsvg_handle_get_pixbuf), SYMBOL(rsvg_handle_get_dimensions), SYMBOL(rsvg_handle_set_size_callback), ); /* * Scale the SVG image to the required icon size */ static void rsvg_set_iconsize(int *width, int *height, gpointer data) { float multiplier = *(float*)data; (*width) *= multiplier; (*height) *= multiplier; } if(!rsvg_linked) { if(!LOAD_SYMBOLS("librsvg-2.so", librsvg_symbols)) { // libr_icon_gtk requires that your application be linked to librsvg return NULL; } } RsvgHandle *rsvg = NULL; libr_icontype_t type; type = icon_handle->type; if(type == LIBR_SVG) { RsvgHandle *rsvg = rsvg_handle_new(); if(rsvg != NULL) { if(rsvg_handle_write(rsvg, iconfile, iconfile_size, NULL)) { if(rsvg_handle_close(rsvg, NULL)) { RsvgDimensionData dim; float multiplier; int old_size; rsvg_handle_get_dimensions(rsvg, &dim); if(dim.width > dim.height) old_size = dim.width; else old_size = dim.height; multiplier = ((float)sizes[i])/old_size; rsvg_handle_set_size_callback(rsvg, rsvg_set_iconsize, (void *) &multiplier, NULL); icon = rsvg_handle_get_pixbuf(rsvg); icons = g_list_append(icons, icon); } } } free(iconfile); } else if(type == LIBR_PNG) { } else { /* Unhandled image type */ continue; }