From da96fa0ddfd605f5d726c14d18beb1b07b6b3e7b Mon Sep 17 00:00:00 2001 From: Etorth Date: Fri, 4 Nov 2022 05:30:09 -0700 Subject: support svg (#489) --- fluid/Fluid_Image.cxx | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/fluid/Fluid_Image.cxx b/fluid/Fluid_Image.cxx index 58f5b8dfb..69a75f8b8 100644 --- a/fluid/Fluid_Image.cxx +++ b/fluid/Fluid_Image.cxx @@ -48,6 +48,7 @@ static int pixmap_header_written = 0; static int bitmap_header_written = 0; static int image_header_written = 0; static int jpeg_header_written = 0; +static int svg_header_written = 0; void Fluid_Image::write_static() { if (!img) return; @@ -121,6 +122,33 @@ void Fluid_Image::write_static() { write_c(";\n"); write_initializer("Fl_JPEG_Image", "\"%s\", %s", fl_filename_name(name()), idata_name); + } else if (strcmp(fl_filename_ext(name()), ".svg")==0) { + // Write svg image data... + write_c("\n"); + if (svg_header_written != write_number) { + write_c("#include \n"); + svg_header_written = write_number; + } + write_c("static const char %s[] =\n", idata_name); + + FILE *f = fl_fopen(name(), "rb"); + if (!f) { + // message = "Can't inline file into source code. Can't open"; + } else { + fseek(f, 0, SEEK_END); + size_t nData = ftell(f); + fseek(f, 0, SEEK_SET); + if (nData) { + char *data = (char*)calloc(nData+1, 1); + if (fread(data, nData, 1, f)==0) { /* ignore */ } + write_cstring(data, (int)nData); + free(data); + } + fclose(f); + } + + write_c(";\n"); + write_initializer("Fl_SVG_Image", "NULL, %s", idata_name); } else { // Write image data... write_c("\n"); @@ -252,7 +280,7 @@ const char *ui_find_image_name; Fluid_Image *ui_find_image(const char *oldname) { goto_source_dir(); fl_file_chooser_ok_label("Use Image"); - const char *name = fl_file_chooser("Image?","Image Files (*.{bm,bmp,gif,jpg,pbm,pgm,png,ppm,xbm,xpm})",oldname,1); + const char *name = fl_file_chooser("Image?","Image Files (*.{bm,bmp,gif,jpg,pbm,pgm,png,ppm,xbm,xpm,svg})",oldname,1); fl_file_chooser_ok_label(NULL); ui_find_image_name = name; Fluid_Image *ret = (name && *name) ? Fluid_Image::find(name) : 0; -- cgit v1.2.3