summaryrefslogtreecommitdiff
path: root/src/nanosvg.cxx
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2024-03-18 18:15:06 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2024-03-18 19:36:16 +0100
commit1d43ae0b0a01fdd90486c616d5dddd318a8fb9f0 (patch)
tree05f98ee918f8faafc452e6a70068986d4db0e198 /src/nanosvg.cxx
parent81d47f71d64caaaed7013b3f494dbae33267e70d (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.
Diffstat (limited to 'src/nanosvg.cxx')
-rw-r--r--src/nanosvg.cxx60
1 files changed, 60 insertions, 0 deletions
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