You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libr/TRASH

178 lines
6.1 KiB

#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 <librsvg/rsvg.h>
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;
}