From 0d594319c1f423679c7e7cd712003921da103c70 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Tue, 3 Nov 2020 18:05:10 +0100 Subject: Add extra argument to Fl_SVG_File_Surface constructor. This makes processing of the underlying FILE object consistant by classes Fl_SVG_File_Surface, Fl_EPS_File_Surface and Fl_PostScript_File_Surface. --- src/drivers/SVG/Fl_SVG_File_Surface.cxx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/drivers/SVG/Fl_SVG_File_Surface.cxx b/src/drivers/SVG/Fl_SVG_File_Surface.cxx index ae0172fc4..2a48ac8f6 100644 --- a/src/drivers/SVG/Fl_SVG_File_Surface.cxx +++ b/src/drivers/SVG/Fl_SVG_File_Surface.cxx @@ -305,7 +305,8 @@ int Fl_SVG_Graphics_Driver::descent() { return Fl_Display_Device::display_device()->driver()->descent(); } -Fl_SVG_File_Surface::Fl_SVG_File_Surface(int w, int h, FILE *f) : Fl_Widget_Surface(new Fl_SVG_Graphics_Driver(f)) { +Fl_SVG_File_Surface::Fl_SVG_File_Surface(int w, int h, FILE *f, int (*closef)(FILE*)) : Fl_Widget_Surface(new Fl_SVG_Graphics_Driver(f)) { + closef_ = closef; Fl_Window *win = Fl::first_window(); float s = (win ? Fl::screen_scale(win->screen_num()) : 1); int sw = w * s, sh = h * s; @@ -321,12 +322,7 @@ Fl_SVG_File_Surface::Fl_SVG_File_Surface(int w, int h, FILE *f) : Fl_Widget_Surf } Fl_SVG_File_Surface::~Fl_SVG_File_Surface() { - Fl_SVG_Graphics_Driver *driver = (Fl_SVG_Graphics_Driver*)this->driver(); - if (driver) { - fputs("\n", driver->file()); - fflush(driver->file()); - delete driver; - } + if (driver()) close(); } FILE *Fl_SVG_File_Surface::file() { @@ -337,7 +333,7 @@ FILE *Fl_SVG_File_Surface::file() { int Fl_SVG_File_Surface::close() { Fl_SVG_Graphics_Driver *driver = (Fl_SVG_Graphics_Driver*)this->driver(); fputs("\n", driver->file()); - int retval = fclose(driver->file()); + int retval = (closef_ ? closef_(driver->file()) : fclose(driver->file())); delete driver; this->driver(NULL); return retval; -- cgit v1.2.3