From fb00794923d19cfbb2ca4adca3ae8971553a06be Mon Sep 17 00:00:00 2001 From: Sam James Date: Fri, 2 Sep 2022 06:21:28 +0100 Subject: [PATCH] Fix build with Poppler 22.09.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With Poppler 22.09.0, inkscape fails to build with: ``` /var/tmp/portage/media-gfx/inkscape-1.2.1/work/inkscape-1.2.1/src/extension/internal/pdfinput/svg-builder.cpp:394:23: error: no matching function for call to ‘GfxState::getLineDash(double**, int*, double*)’ 394 | state->getLineDash(&dash_pattern, &dash_length, &dash_start); | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /var/tmp/portage/media-gfx/inkscape-1.2.1/work/inkscape-1.2.1/src/extension/internal/pdfinput/svg-builder.cpp:44: /usr/include/poppler/GfxState.h:1506:32: note: candidate: ‘const std::vector& GfxState::getLineDash(double*)’ 1506 | const std::vector &getLineDash(double *start) | ^~~~~~~~~~~ [...] /var/tmp/portage/media-gfx/inkscape-1.2.1/work/inkscape-1.2.1/src/extension/internal/pdfinput/pdf-parser.cpp:700:21: error: no matching function for call to ‘GfxState::setLineDash(double*&, int&, double)’ 700 | state->setLineDash(dash, length, args[1].getNum()); | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` Poppler changed the getLineDash interface: ``` - void getLineDash(double **dash, int *length, double *start) + const std::vector &getLineDash(double *start) ``` ... and the setLineDash interface: ```` - void setLineDash(double *dash, int length, double start); + void setLineDash(std::vector &&dash, double start); ``` Signed-off-by: Sam James --- src/extension/internal/pdfinput/pdf-parser.cpp | 4 ++++ src/extension/internal/pdfinput/svg-builder.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index cca1e84096..80d64c9b86 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -697,7 +697,11 @@ void PdfParser::opSetDash(Object args[], int /*numArgs*/) _POPPLER_FREE(obj); } } +#if POPPLER_CHECK_VERSION(22, 9, 0) + state->setLineDash(std::vector (dash, dash + length), args[1].getNum()); +#else state->setLineDash(dash, length, args[1].getNum()); +#endif builder->updateStyle(state); } diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp index 12f71dd921..9fc56fe63c 100644 --- a/src/extension/internal/pdfinput/svg-builder.cpp +++ b/src/extension/internal/pdfinput/svg-builder.cpp @@ -389,10 +389,17 @@ void SvgBuilder::_setStrokeStyle(SPCSSAttr *css, GfxState *state) { sp_repr_css_set_property(css, "stroke-miterlimit", os_ml.str().c_str()); // Line dash - double *dash_pattern; int dash_length; double dash_start; +#if POPPLER_CHECK_VERSION(22, 9, 0) + const double *dash_pattern; + const std::vector &dash = state->getLineDash(&dash_start); + dash_pattern = dash.data(); + dash_length = dash.size(); +#else + double *dash_pattern; state->getLineDash(&dash_pattern, &dash_length, &dash_start); +#endif if ( dash_length > 0 ) { Inkscape::CSSOStringStream os_array; for ( int i = 0 ; i < dash_length ; i++ ) { -- GitLab