Submitted by: Pierre Labastie Date: 2026-06-10 Initial Package Version: 1.4.4 Upstream Status: Pending Origin: Upstream (PR #7968) Description: Fixes building Inkscape 1.4.4 with poppler 26.06 and later because of type changes in Page.h From b95f70db09072bb60600d2f6de103608750ef247 Mon Sep 17 00:00:00 2001 From: KrIr17 Date: Mon, 8 Jun 2026 20:16:32 +0200 Subject: [PATCH] Fix Building with Poppler 26.06.0 - pdfparser: Some `const PDFRectangle *` to `const PDFRectangle &` [1] - pdfparser: Some `const GfxColor *` to `const GfxColor &` [2] - pdf-utils: Add a `getRect(const PDFRectangle &)` alongside `getRect(const PDFRectangle *)` - poppler-cairo-font-engine: `getKey()` now returns std::string and not char[], so change `strcmp` to `std::string(...).compare(...)` [3] - poppler-utils: `obj->dictGetKey()` etc. were removed; use `obj->dict()->getKey()` instead (these have also existed in poppler since the beginning, so shouldn't break any old poppler) [4,5] - svg-builder: `convertGfxColor` now takes `const GfxColor &` as input. A convenience function taking `const GfxColor *` (for older poppler) now calls the new one after confirming `color` is a valid pointer - svg-builder: `_addStopToGradient` now takes `const GfxColor &` as input. This was used only in `convertGfxColor` and therefore doesn't need a helper function for compatibility - testfiles pdf-utils-test: `` to `<*.h>` (see e3eb1210) - testfiles pdf-utils-test: Some `const PDFRectangle *` to `const PDFRectangle &` [1] Fixes https://gitlab.com/inkscape/inkscape/-/work_items/6210 Upstream Commits: [1] https://gitlab.freedesktop.org/poppler/poppler/-/commit/d50a4510 [2] https://gitlab.freedesktop.org/poppler/poppler/-/commit/0f94f530 [3] https://gitlab.freedesktop.org/poppler/poppler/-/commit/a3de7f8a [4] https://gitlab.freedesktop.org/poppler/poppler/-/commit/bb13b0f5 [5] https://gitlab.freedesktop.org/poppler/poppler/-/commit/8ae0f8e7 --- src/extension/internal/pdfinput/pdf-input.cpp | 14 +++++- .../internal/pdfinput/pdf-parser.cpp | 43 ++++++++++--------- src/extension/internal/pdfinput/pdf-parser.h | 4 +- src/extension/internal/pdfinput/pdf-utils.cpp | 5 +++ src/extension/internal/pdfinput/pdf-utils.h | 3 ++ .../pdfinput/poppler-cairo-font-engine.cpp | 2 +- .../pdfinput/poppler-transition-api.h | 16 +++++++ .../internal/pdfinput/poppler-utils.cpp | 20 +++++---- .../internal/pdfinput/svg-builder.cpp | 29 ++++++++----- src/extension/internal/pdfinput/svg-builder.h | 3 +- 10 files changed, 94 insertions(+), 45 deletions(-) diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp index 45df931f00..441871bb10 100644 --- a/src/extension/internal/pdfinput/pdf-input.cpp +++ b/src/extension/internal/pdfinput/pdf-input.cpp @@ -808,7 +808,11 @@ PdfInput::add_builder_page(std::shared_ptrpdf_doc, SvgBuilder *builder, } // Apply crop settings +#if POPPLER_CHECK_VERSION(26, 2, 0) + std::optional clipToBox; +#else _POPPLER_CONST PDFRectangle *clipToBox = nullptr; +#endif if (crop_to == "media-box") { clipToBox = page->getMediaBox(); @@ -822,8 +826,16 @@ PdfInput::add_builder_page(std::shared_ptrpdf_doc, SvgBuilder *builder, clipToBox = page->getArtBox(); } + std::optional cropBox; +#if POPPLER_CHECK_VERSION(26, 2, 0) + cropBox = clipToBox; +#else + if (clipToBox) { + cropBox = *clipToBox; + } +#endif // Create parser (extension/internal/pdfinput/pdf-parser.h) - auto pdf_parser = PdfParser(pdf_doc, builder, page, clipToBox); + auto pdf_parser = PdfParser(pdf_doc, builder, page, cropBox); // Set up approximation precision for parser. Used for converting Mesh Gradients into tiles. if ( color_delta <= 0.0 ) { diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index d24dc05dab..e32fa24b32 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -266,7 +267,7 @@ GfxPatch blankPatch() //------------------------------------------------------------------------ PdfParser::PdfParser(std::shared_ptr pdf_doc, Inkscape::Extension::Internal::SvgBuilder *builderA, Page *page, - _POPPLER_CONST PDFRectangle *cropBox) + const std::optional &cropBox) : _pdf_doc(pdf_doc) , xref(pdf_doc->getXRef()) , builder(builderA) @@ -307,8 +308,8 @@ PdfParser::PdfParser(std::shared_ptr pdf_doc, Inkscape::Extension::Inter builder->setMargins(getRect(page->getTrimBox()) * scale, getRect(page->getArtBox()) * scale, getRect(page->getBleedBox()) * scale); - if (cropBox && getRect(cropBox) != page_box) { - builder->cropPage(getRect(cropBox) * scale); + if (cropBox && getRect(*cropBox) != page_box) { + builder->cropPage(getRect(*cropBox) * scale); } saveState(); @@ -325,7 +326,7 @@ PdfParser::PdfParser(XRef *xrefA, Inkscape::Extension::Internal::SvgBuilder *bui , printCommands(false) , res(new GfxResources(xref, resDict, nullptr)) , // start the resource stack - state(new GfxState(72, 72, box, 0, false)) + state(new _POPPLER_GFX_STATE(72, 72, *box, 0, false)) , fontChanged(gFalse) , clip(clipNone) , ignoreUndef(0) @@ -992,7 +993,7 @@ void PdfParser::opSetFillGray(Object args[], int /*numArgs*/) state->setFillPattern(nullptr); state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique())); color.c[0] = dblToCol(args[0].getNum()); - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } @@ -1004,7 +1005,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*numArgs*/) state->setStrokePattern(nullptr); state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique())); color.c[0] = dblToCol(args[0].getNum()); - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } @@ -1019,7 +1020,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int /*numArgs*/) for (i = 0; i < 4; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } @@ -1033,7 +1034,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int /*numArgs*/) for (int i = 0; i < 4; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } @@ -1047,7 +1048,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /*numArgs*/) for (int i = 0; i < 3; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } @@ -1060,7 +1061,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) { for (int i = 0; i < 3; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } @@ -1076,7 +1077,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs) GfxColor color; colorSpace->getDefaultColor(&color); state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace)); - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } else { error(errSyntaxError, getPos(), "Bad color space (fill)"); @@ -1097,7 +1098,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs) GfxColor color; colorSpace->getDefaultColor(&color); state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace)); - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } else { error(errSyntaxError, getPos(), "Bad color space (stroke)"); @@ -1117,7 +1118,7 @@ void PdfParser::opSetFillColor(Object args[], int numArgs) { for (i = 0; i < numArgs; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } @@ -1134,7 +1135,7 @@ void PdfParser::opSetStrokeColor(Object args[], int numArgs) { for (i = 0; i < numArgs; ++i) { color.c[i] = dblToCol(args[i].getNum()); } - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } @@ -1155,7 +1156,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { color.c[i] = dblToCol(args[i].getNum()); } } - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) { @@ -1174,7 +1175,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { color.c[i] = dblToCol(args[i].getNum()); } } - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); builder->updateStyle(state); } } @@ -1198,7 +1199,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { color.c[i] = dblToCol(args[i].getNum()); } } - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) { @@ -1217,7 +1218,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { color.c[i] = dblToCol(args[i].getNum()); } } - state->setStrokeColor(&color); + state->_POPPLER_SET_STROKE_COLOR(color); builder->updateStyle(state); } } @@ -1700,7 +1701,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading *shading, // use the center color shading->getColor(xM, yM, &fillColor); - state->setFillColor(&fillColor); + state->_POPPLER_SET_FILL_COLOR(fillColor); // fill the rectangle state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4], @@ -1799,7 +1800,7 @@ void PdfParser::gouraudFillTriangle(double x0, double y0, GfxColor *color0, } } if (i == nComps || depth == maxDepths[pdfGouraudTriangleShading-1]) { - state->setFillColor(color0); + state->_POPPLER_SET_FILL_COLOR(*color0); state->moveTo(x0, y0); state->lineTo(x1, y1); state->lineTo(x2, y2); @@ -1877,7 +1878,7 @@ void PdfParser::fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth) color.c[i] = GfxColorComp(patch->color[0][0].c[i]); } if (i == nComps || depth == maxDepths[pdfPatchMeshShading-1]) { - state->setFillColor(&color); + state->_POPPLER_SET_FILL_COLOR(color); state->moveTo(patch->x[0][0], patch->y[0][0]); state->curveTo(patch->x[0][1], patch->y[0][1], patch->x[0][2], patch->y[0][2], diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h index c136ebf1ef..58044fb518 100644 --- a/src/extension/internal/pdfinput/pdf-parser.h +++ b/src/extension/internal/pdfinput/pdf-parser.h @@ -112,8 +112,8 @@ struct OpHistoryEntry { class PdfParser { public: - // Constructor for regular output. - PdfParser(std::shared_ptr pdf_doc, SvgBuilder *builderA, Page *page, _POPPLER_CONST PDFRectangle *cropBox); + // Constructor for regular output. + PdfParser(std::shared_ptr pdf_doc, SvgBuilder *builderA, Page *page, const std::optional &cropBox); // Constructor for a sub-page object. PdfParser(XRef *xrefA, SvgBuilder *builderA, Dict *resDict, _POPPLER_CONST PDFRectangle *box); diff --git a/src/extension/internal/pdfinput/pdf-utils.cpp b/src/extension/internal/pdfinput/pdf-utils.cpp index d126426b62..28c1678f2d 100644 --- a/src/extension/internal/pdfinput/pdf-utils.cpp +++ b/src/extension/internal/pdfinput/pdf-utils.cpp @@ -133,6 +133,11 @@ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box) return Geom::Rect(box->x1, box->y1, box->x2, box->y2); } +Geom::Rect getRect(const PDFRectangle &box) +{ + return Geom::Rect(box.x1, box.y1, box.x2, box.y2); +} + Geom::PathVector getPathV(GfxPath *path) { if (!path) { diff --git a/src/extension/internal/pdfinput/pdf-utils.h b/src/extension/internal/pdfinput/pdf-utils.h index 59efdeae27..d5b3020d61 100644 --- a/src/extension/internal/pdfinput/pdf-utils.h +++ b/src/extension/internal/pdfinput/pdf-utils.h @@ -59,6 +59,9 @@ private: }; Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box); +Geom::Rect getRect(_POPPLER_CONST PDFRectangle &box); Geom::PathVector getPathV(GfxPath *gPath); +Geom::PathVector maybeIntersect(Geom::PathVector const &v1, Geom::PathVector const &v2, + FillRule fill1 = FillRule::fill_nonZero, FillRule fill2 = FillRule::fill_nonZero); #endif /* PDF_UTILS_H */ diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp index 9d908a33e3..af132ad735 100644 --- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp +++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp @@ -712,7 +712,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontE codeToGID[i] = 0; if (charProcs && (name = enc[i])) { for (int j = 0; j < charProcs->getLength(); j++) { - if (strcmp(name, charProcs->getKey(j)) == 0) { + if (std::string(charProcs->getKey(j)).compare(name) == 0) { codeToGID[i] = j; } } diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h index 7f299bd05a..bf42f54142 100644 --- a/src/extension/internal/pdfinput/poppler-transition-api.h +++ b/src/extension/internal/pdfinput/poppler-transition-api.h @@ -15,6 +15,22 @@ #include #include +#if POPPLER_CHECK_VERSION(26, 6, 0) +#define _POPPLER_GET_GRAY(color, gray) getGray(color, gray) +#define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb) +#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(color, cmyk) +#define _POPPLER_SET_FILL_COLOR(color) setFillColor(color) +#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(color) +#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, Rect, rotateA, upsideDown) +#else +#define _POPPLER_GET_GRAY(color, gray) getGray(&color, gray) +#define _POPPLER_GET_RGB(color, rgb) getRGB(&color, rgb) +#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(&color, cmyk) +#define _POPPLER_SET_FILL_COLOR(color) setFillColor(&color) +#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(&color) +#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, &Rect, rotateA, upsideDown) +#endif + #if POPPLER_CHECK_VERSION(26, 2, 0) #define _POPPLER_WMODE GfxFont::WritingMode #define _POPPLER_WMODE_HORIZONTAL GfxFont::WritingMode::Horizontal diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp index a65a5780ee..902736281a 100644 --- a/src/extension/internal/pdfinput/poppler-utils.cpp +++ b/src/extension/internal/pdfinput/poppler-utils.cpp @@ -195,15 +195,17 @@ void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h) hashFontObject1(&obj2, h); } break; - case objDict: - h->hash('d'); - n = obj->dictGetLength(); - h->hash((char *)&n, sizeof(int)); - for (i = 0; i < n; ++i) { - p = obj->dictGetKey(i); - h->hash(p, (int)strlen(p)); - const Object &obj2 = obj->dictGetValNF(i); - hashFontObject1(&obj2, h); + case objDict: { + h->hash('d'); + auto objdict = obj->getDict(); + n = objdict->getLength(); + h->hash((char *)&n, sizeof(int)); + for (i = 0; i < n; ++i) { + auto p = std::string(objdict->getKey(i)); + h->hash(p.c_str(), p.length()); + const Object &obj2 = objdict->getValNF(i); + hashFontObject1(&obj2, h); + } } break; case objStream: diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp index d854ed8a2e..c308561319 100644 --- a/src/extension/internal/pdfinput/svg-builder.cpp +++ b/src/extension/internal/pdfinput/svg-builder.cpp @@ -384,6 +384,7 @@ static gchar *svgConvertRGBToText(double r, double g, double b) { return (gchar *)&tmp; } +// for poppler < 26.06.0 static std::string svgConvertGfxRGB(GfxRGB *color) { double r = (double)color->r / 65535.0; @@ -393,6 +394,14 @@ static std::string svgConvertGfxRGB(GfxRGB *color) } std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *space) +{ + if (!color) { + return ""; + } + return convertGfxColor(*color, space); +} + +std::string SvgBuilder::convertGfxColor(const GfxColor &color, GfxColorSpace *space) { std::string icc = ""; switch (space->getMode()) { @@ -412,14 +421,14 @@ std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *sp } GfxRGB rgb; - space->getRGB(color, &rgb); + space->_POPPLER_GET_RGB(color, &rgb); auto rgb_color = svgConvertGfxRGB(&rgb); if (!icc.empty()) { Inkscape::CSSOStringStream icc_color; icc_color << rgb_color << " icc-color(" << icc; for (int i = 0; i < space->getNComps(); ++i) { - icc_color << ", " << colToDbl((*color).c[i]); + icc_color << ", " << colToDbl((color).c[i]); } icc_color << ");"; return icc_color.str(); @@ -1204,7 +1213,7 @@ gchar *SvgBuilder::_createGradient(GfxShading *shading, const Geom::Affine pat_m /** * \brief Adds a stop with the given properties to the gradient's representation */ -void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space, +void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space, double opacity) { Inkscape::XML::Node *stop = _xml_doc->createElement("svg:stop"); @@ -1214,7 +1223,7 @@ void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset if (space->getMode() == csDeviceGray) { // This is a transparency mask. GfxRGB rgb; - space->getRGB(color, &rgb); + space->_POPPLER_GET_RGB(color, &rgb); double gray = (double)rgb.r / 65535.0; gray = CLAMP(gray, 0.0, 1.0); os_opacity << gray; @@ -1255,8 +1264,8 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh if (!svgGetShadingColor(shading, 0.0, &stop1) || !svgGetShadingColor(shading, 1.0, &stop2)) { return false; } else { - _addStopToGradient(gradient, 0.0, &stop1, space, 1.0); - _addStopToGradient(gradient, 1.0, &stop2, space, 1.0); + _addStopToGradient(gradient, 0.0, stop1, space, 1.0); + _addStopToGradient(gradient, 1.0, stop2, space, 1.0); } } else if (type == _POPPLER_FUNCTION_TYPE_STITCHING) { auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func); @@ -1269,7 +1278,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh // Add stops from all the stitched functions GfxColor prev_color, color; svgGetShadingColor(shading, bounds[0], &prev_color); - _addStopToGradient(gradient, bounds[0], &prev_color, space, 1.0); + _addStopToGradient(gradient, bounds[0], prev_color, space, 1.0); for ( int i = 0 ; i < num_funcs ; i++ ) { svgGetShadingColor(shading, bounds[i + 1], &color); // Add stops @@ -1279,14 +1288,14 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1 if (encode[2*i] == 0) { // normal sequence auto offset = (bounds[i + 1] - expE) / max_bound; - _addStopToGradient(gradient, offset, &prev_color, space, 1.0); + _addStopToGradient(gradient, offset, prev_color, space, 1.0); } else { // reflected sequence auto offset = (bounds[i] + expE) / max_bound; - _addStopToGradient(gradient, offset, &color, space, 1.0); + _addStopToGradient(gradient, offset, color, space, 1.0); } } } - _addStopToGradient(gradient, bounds[i + 1] / max_bound, &color, space, 1.0); + _addStopToGradient(gradient, bounds[i + 1] / max_bound, color, space, 1.0); prev_color = color; } } else { // Unsupported function type diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h index b814a67807..4041c95a9f 100644 --- a/src/extension/internal/pdfinput/svg-builder.h +++ b/src/extension/internal/pdfinput/svg-builder.h @@ -186,7 +186,7 @@ private: // Pattern creation gchar *_createPattern(GfxPattern *pattern, GfxState *state, bool is_stroke=false); gchar *_createGradient(GfxShading *shading, const Geom::Affine pat_matrix, bool for_shading = false); - void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space, + void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space, double opacity); bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading, _POPPLER_CONST Function *func); @@ -239,6 +239,7 @@ private: static bool _attrEqual(Inkscape::XML::Node *a, Inkscape::XML::Node *b, char const *attr); // Colors + std::string convertGfxColor(const GfxColor &color, GfxColorSpace *space); std::string convertGfxColor(const GfxColor *color, GfxColorSpace *space); std::string _getColorProfile(cmsHPROFILE hp); -- 2.54.0