diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-12-27 08:13:20 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-12-27 08:13:20 -0600 |
commit | 9b92536e6c51b66406d593745a938975e226f95e (patch) | |
tree | a40b0066dc774827f602f5e372c2f53656007553 /TRASH | |
download | libr-9b92536e6c51b66406d593745a938975e226f95e.tar.gz libr-9b92536e6c51b66406d593745a938975e226f95e.zip |
Initial import
Diffstat (limited to 'TRASH')
-rw-r--r-- | TRASH | 177 |
1 files changed, 177 insertions, 0 deletions
@@ -0,0 +1,177 @@ + +#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; + } + + |