diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2024-03-18 18:15:06 +0100 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2024-03-18 19:36:16 +0100 |
| commit | 1d43ae0b0a01fdd90486c616d5dddd318a8fb9f0 (patch) | |
| tree | 05f98ee918f8faafc452e6a70068986d4db0e198 | |
| parent | 81d47f71d64caaaed7013b3f494dbae33267e70d (diff) | |
Move nanosvg to a separate file, don't use 'roundf()' (#937)
Replacement of roundf() with nsvg__roundf() fixes one aspect of
issue #937.
Having the nanosvg implementation in its own module was planned anyway.
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/Fl_SVG_Image.cxx | 21 | ||||
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/nanosvg.cxx | 60 |
4 files changed, 63 insertions, 20 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 00cd2d4b3..062078ef6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -507,6 +507,7 @@ set(IMGCPPFILES Fl_PNM_Image.cxx Fl_Image_Reader.cxx Fl_SVG_Image.cxx + nanosvg.cxx drivers/SVG/Fl_SVG_File_Surface.cxx ) diff --git a/src/Fl_SVG_Image.cxx b/src/Fl_SVG_Image.cxx index 3df44ad67..1e3a05d06 100644 --- a/src/Fl_SVG_Image.cxx +++ b/src/Fl_SVG_Image.cxx @@ -1,7 +1,7 @@ // // SVG image code for the Fast Light Tool Kit (FLTK). // -// Copyright 2017-2022 by Bill Spitzak and others. +// Copyright 2017-2024 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -28,28 +28,9 @@ #include <stdio.h> #include <stdlib.h> -#if !defined(HAVE_LONG_LONG) -static double strtoll(const char *str, char **endptr, int base) { - return (double)strtol(str, endptr, base); -} -#endif - -#ifdef _MSC_VER -#pragma warning (push) // Save #pragma warning status -#pragma warning (disable: 4244) // Switch off conversion warnings -#endif - -#define NANOSVG_ALL_COLOR_KEYWORDS // Include full list of color keywords. -#define NANOSVG_IMPLEMENTATION // Expands implementation #include "../nanosvg/nanosvg.h" - -#define NANOSVGRAST_IMPLEMENTATION // Expands implementation #include "../nanosvg/nanosvgrast.h" -#ifdef _MSC_VER -#pragma warning (pop) // Restore #pragma warning status -#endif - #if defined(HAVE_LIBZ) #include <zlib.h> #endif diff --git a/src/Makefile b/src/Makefile index 4bed068fc..9fc209013 100644 --- a/src/Makefile +++ b/src/Makefile @@ -241,6 +241,7 @@ IMGCPPFILES = \ Fl_PNM_Image.cxx \ Fl_Image_Reader.cxx \ Fl_SVG_Image.cxx \ + nanosvg.cxx \ drivers/SVG/Fl_SVG_File_Surface.cxx CFILES = flstring.c numericsort.c vsnprintf.c diff --git a/src/nanosvg.cxx b/src/nanosvg.cxx new file mode 100644 index 000000000..abb98310b --- /dev/null +++ b/src/nanosvg.cxx @@ -0,0 +1,60 @@ +// +// Implementation of the nanosvg library for the Fast Light Tool Kit (FLTK). +// +// Copyright 2017-2024 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +// This code includes the header-only nanosvg library and builds a +// separate object file comprised of the nanosvg library and nothing +// else. Moved here from Fl_SVG_Image.cxx for better code separation. + +#include <config.h> + +#if defined(FLTK_USE_SVG) || defined(FL_DOXYGEN) + +// GitHub Issue #937: "Support for HP-UX" (version 11.11, Dec. 2000) +// +// C90 does not provide roundf() but nanosvg.h uses it although +// nanosvgrast.h has a replacement function: nsvg__roundf() +// +// Solution: use nsvg_roundf() instead. +// Advantage: we don't need to check system macros. +// +// Note: using nsvg__roundf() in nanosvg.h should be applied upstream. +// Once this is available we can remove this comment block and +// the following 3-line "fix": + +#include <math.h> // must be before #define below ! +static float nsvg__roundf(float x); // prototype (see nanosvgrast.h) +#define roundf nsvg__roundf // redefinition (#937) + +// End of GitHub Issue #937. Remove this entire block when upstream is patched. + +#if !defined(HAVE_LONG_LONG) +static double strtoll(const char *str, char **endptr, int base) { + return (double)strtol(str, endptr, base); +} +#endif + +#ifdef _MSC_VER +#pragma warning (disable: 4244) // Switch off conversion warnings +#endif + +#define NANOSVG_ALL_COLOR_KEYWORDS // include full list of color keywords +#define NANOSVG_IMPLEMENTATION // use nanosvg.h implementation +#define NANOSVGRAST_IMPLEMENTATION // use nanosvgrast.h implementation + +#include "../nanosvg/nanosvg.h" +#include "../nanosvg/nanosvgrast.h" + +#endif // FLTK_USE_SVG |
