84 lines
3.5 KiB
Diff
84 lines
3.5 KiB
Diff
![]() |
From fb00794923d19cfbb2ca4adca3ae8971553a06be Mon Sep 17 00:00:00 2001
|
|||
|
From: Sam James <sam@gentoo.org>
|
|||
|
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<double>& GfxState::getLineDash(double*)’
|
|||
|
1506 | const std::vector<double> &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<double> &getLineDash(double *start)
|
|||
|
```
|
|||
|
|
|||
|
... and the setLineDash interface:
|
|||
|
````
|
|||
|
- void setLineDash(double *dash, int length, double start);
|
|||
|
+ void setLineDash(std::vector<double> &&dash, double start);
|
|||
|
```
|
|||
|
|
|||
|
Signed-off-by: Sam James <sam@gentoo.org>
|
|||
|
---
|
|||
|
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<double> (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<double> &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
|
|||
|
|