Merge pull request #16490 from suvari/master

inkscape: version bump to 1.4
This commit is contained in:
Kamil ATLI
2025-04-30 04:32:55 +03:00
committed by GitHub
7 changed files with 811 additions and 2 deletions
@@ -0,0 +1,47 @@
From e412149bd1da7b30846e87c09813f0b719a61089 Mon Sep 17 00:00:00 2001
From: Marc Jeanmougin <marc@jeanmougin.fr>
Date: Mon, 3 Feb 2025 19:40:11 +0100
Subject: [PATCH] Bump cmake requirements
---
CMakeLists.txt | 12 ++++--------
CMakeScripts/DefineDependsandFlags.cmake | 2 +-
2 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3765ed4bd92..79bfa42a842 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,13 +1,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
-cmake_minimum_required(VERSION 3.1.0)
+cmake_minimum_required(VERSION 3.12.0)
-cmake_policy(SET CMP0003 NEW) # don't be prolific with library paths
-cmake_policy(SET CMP0005 NEW) # proper define quoting
-cmake_policy(SET CMP0009 NEW) # don't follow symbolic links when using GLOB
-
-if(POLICY CMP0075)
- cmake_policy(SET CMP0075 NEW) # link check-executable to CMAKE_REQUIRED_LIBRARIES (CMake 3.12.1)
-endif(POLICY CMP0075)
+if(POLICY CMP0167)
+ cmake_policy(SET CMP0167 NEW) # use FindBoost from boost 1.70+ (cmake 3.30+)
+endif()
message("------------------------------")
message("Building Makefile for Inkscape")
diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake
index bebb49e5e05..744e9787c34 100644
--- a/CMakeScripts/DefineDependsandFlags.cmake
+++ b/CMakeScripts/DefineDependsandFlags.cmake
@@ -164,7 +164,7 @@ add_definitions(${Intl_DEFINITIONS})
# Check for system-wide version of 2geom and fallback to internal copy if not found
if(NOT WITH_INTERNAL_2GEOM)
- pkg_check_modules(2Geom QUIET IMPORTED_TARGET GLOBAL 2geom>=1.4.0)
+ pkg_check_modules(2Geom QUIET IMPORTED_TARGET GLOBAL 2geom>=${INKSCAPE_VERSION_MAJOR}.${INKSCAPE_VERSION_MINOR})
if(2Geom_FOUND)
add_library(2Geom::2geom ALIAS PkgConfig::2Geom)
else()
--
GitLab
@@ -0,0 +1,21 @@
https://bugs.gentoo.org/941674
https://gitlab.com/inkscape/inkscape/-/commit/eb6dadcf1a5c660167ba43f3606c8e7cc6529787
From eb6dadcf1a5c660167ba43f3606c8e7cc6529787 Mon Sep 17 00:00:00 2001
From: Liam <byteslice@airmail.cc>
Date: Sat, 12 Oct 2024 05:22:29 -0400
Subject: [PATCH] gobjectptr: fix member name
--- a/src/util/gobjectptr.h
+++ b/src/util/gobjectptr.h
@@ -20,7 +20,7 @@ public:
GObjectPtr() = default;
explicit GObjectPtr(T *p, bool add_ref = false) : _p(p) { if (add_ref) _ref(); }
GObjectPtr(GObjectPtr const &other) : _p(other._p) { _ref(); }
- GObjectPtr &operator=(GObjectPtr const &other) { if (&other != this) { _unref(); _p = other.p; _ref(); } return *this; }
+ GObjectPtr &operator=(GObjectPtr const &other) { if (&other != this) { _unref(); _p = other._p; _ref(); } return *this; }
GObjectPtr(GObjectPtr &&other) noexcept : _p(other._p) { other._p = nullptr; }
GObjectPtr &operator=(GObjectPtr &&other) { if (&other != this) { _unref(); _p = other._p; other._p = nullptr; } return *this; }
~GObjectPtr() { _unref(); }
--
GitLab
@@ -0,0 +1,431 @@
https://bugs.gentoo.org/941933
From 22304ae8034d067670a9f95022083a75fac92b4c Mon Sep 17 00:00:00 2001
From: PBS <pbs3141@gmail.com>
Date: Tue, 22 Oct 2024 14:48:31 +0100
Subject: [PATCH] Future-proof against poppler 24.10 changes
---
.../internal/pdfinput/pdf-parser.cpp | 120 ++++++++----------
src/extension/internal/pdfinput/pdf-parser.h | 4 +-
.../pdfinput/poppler-transition-api.h | 6 +
3 files changed, 61 insertions(+), 69 deletions(-)
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
index 97b2909218a..28000a87b0c 100644
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
@@ -817,11 +817,11 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
_POPPLER_FREE(obj3);
if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "G").isStream()) {
if (_POPPLER_CALL_ARGS_DEREF(obj4, obj3.streamGetDict()->lookup, "Group").isDict()) {
- GfxColorSpace *blendingColorSpace = nullptr;
+ std::unique_ptr<GfxColorSpace> blendingColorSpace;
GBool isolated = gFalse;
GBool knockout = gFalse;
if (!_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "CS").isNull()) {
- blendingColorSpace = GfxColorSpace::parse(nullptr, &obj5, nullptr, state);
+ blendingColorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj5, nullptr, state));
}
_POPPLER_FREE(obj5);
if (_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "I").isBool()) {
@@ -842,7 +842,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
}
}
}
- doSoftMask(&obj3, alpha, blendingColorSpace, isolated, knockout, funcs[0], &backdropColor);
+ doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout, funcs[0], &backdropColor);
if (funcs[0]) {
delete funcs[0];
}
@@ -927,9 +927,6 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
alpha, transferFunc, backdropColor);
--formDepth;
- if (blendingColorSpace) {
- delete blendingColorSpace;
- }
_POPPLER_FREE(obj1);
}
@@ -946,42 +943,43 @@ void PdfParser::opSetRenderingIntent(Object /*args*/[], int /*numArgs*/)
*
* Maintains a cache for named color spaces to avoid expensive re-parsing.
*/
-GfxColorSpace *PdfParser::lookupColorSpaceCopy(Object &arg)
+std::unique_ptr<GfxColorSpace> PdfParser::lookupColorSpaceCopy(Object &arg)
{
assert(!arg.isNull());
- GfxColorSpace *colorSpace = nullptr;
if (char const *name = arg.isName() ? arg.getName() : nullptr) {
auto const cache_name = std::to_string(formDepth) + "-" + name;
- if ((colorSpace = colorSpacesCache[cache_name].get())) {
- return colorSpace->copy();
+ if (auto cached = colorSpacesCache[cache_name].get()) {
+ return std::unique_ptr<GfxColorSpace>(cached->copy());
}
- Object obj = res->lookupColorSpace(name);
- if (obj.isNull()) {
- colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
+ std::unique_ptr<GfxColorSpace> colorSpace;
+ if (auto obj = res->lookupColorSpace(name); !obj.isNull()) {
+ colorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &obj, nullptr, state));
} else {
- colorSpace = GfxColorSpace::parse(res, &obj, nullptr, state);
+ colorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, nullptr, state));
}
if (colorSpace && colorSpace->getMode() != csPattern) {
- colorSpacesCache[cache_name].reset(colorSpace->copy());
+ colorSpacesCache[cache_name] = std::unique_ptr<GfxColorSpace>(colorSpace->copy());
}
+
+ return colorSpace;
} else {
// We were passed in an object directly.
- colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
+ return std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, nullptr, state));
}
- return colorSpace;
}
/**
* Look up pattern/gradients from the GfxResource dictionary
*/
-GfxPattern *PdfParser::lookupPattern(Object *obj, GfxState *state)
+std::unique_ptr<GfxPattern> PdfParser::lookupPattern(Object *obj, GfxState *state)
{
- if (!obj->isName())
- return nullptr;
- return res->lookupPattern(obj->getName(), nullptr, state);
+ if (!obj->isName()) {
+ return {};
+ }
+ return std::unique_ptr<GfxPattern>(res->lookupPattern(obj->getName(), nullptr, state));
}
// TODO not good that numArgs is ignored but args[] is used:
@@ -990,7 +988,7 @@ void PdfParser::opSetFillGray(Object args[], int /*numArgs*/)
GfxColor color;
builder->beforeStateChange(state);
state->setFillPattern(nullptr);
- state->setFillColorSpace(new GfxDeviceGrayColorSpace());
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
color.c[0] = dblToCol(args[0].getNum());
state->setFillColor(&color);
builder->updateStyle(state);
@@ -1002,7 +1000,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*numArgs*/)
GfxColor color;
builder->beforeStateChange(state);
state->setStrokePattern(nullptr);
- state->setStrokeColorSpace(new GfxDeviceGrayColorSpace());
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
color.c[0] = dblToCol(args[0].getNum());
state->setStrokeColor(&color);
builder->updateStyle(state);
@@ -1015,7 +1013,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int /*numArgs*/)
int i;
builder->beforeStateChange(state);
state->setFillPattern(nullptr);
- state->setFillColorSpace(new GfxDeviceCMYKColorSpace());
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
for (i = 0; i < 4; ++i) {
color.c[i] = dblToCol(args[i].getNum());
}
@@ -1029,7 +1027,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int /*numArgs*/)
GfxColor color;
builder->beforeStateChange(state);
state->setStrokePattern(nullptr);
- state->setStrokeColorSpace(new GfxDeviceCMYKColorSpace());
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
for (int i = 0; i < 4; ++i) {
color.c[i] = dblToCol(args[i].getNum());
}
@@ -1043,7 +1041,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /*numArgs*/)
GfxColor color;
builder->beforeStateChange(state);
state->setFillPattern(nullptr);
- state->setFillColorSpace(new GfxDeviceRGBColorSpace());
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
for (int i = 0; i < 3; ++i) {
color.c[i] = dblToCol(args[i].getNum());
}
@@ -1056,7 +1054,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
GfxColor color;
builder->beforeStateChange(state);
state->setStrokePattern(nullptr);
- state->setStrokeColorSpace(new GfxDeviceRGBColorSpace());
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
for (int i = 0; i < 3; ++i) {
color.c[i] = dblToCol(args[i].getNum());
}
@@ -1068,14 +1066,14 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
void PdfParser::opSetFillColorSpace(Object args[], int numArgs)
{
assert(numArgs >= 1);
- GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
+ auto colorSpace = lookupColorSpaceCopy(args[0]);
builder->beforeStateChange(state);
state->setFillPattern(nullptr);
if (colorSpace) {
GfxColor color;
- state->setFillColorSpace(colorSpace);
colorSpace->getDefaultColor(&color);
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
state->setFillColor(&color);
builder->updateStyle(state);
} else {
@@ -1089,14 +1087,14 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs)
assert(numArgs >= 1);
builder->beforeStateChange(state);
- GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
+ auto colorSpace = lookupColorSpaceCopy(args[0]);
state->setStrokePattern(nullptr);
if (colorSpace) {
GfxColor color;
- state->setStrokeColorSpace(colorSpace);
colorSpace->getDefaultColor(&color);
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
state->setStrokeColor(&color);
builder->updateStyle(state);
} else {
@@ -1159,7 +1157,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
builder->updateStyle(state);
}
if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
- state->setFillPattern(pattern);
+ state->setFillPattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
builder->updateStyle(state);
}
@@ -1202,7 +1200,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
builder->updateStyle(state);
}
if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
- state->setStrokePattern(pattern);
+ state->setStrokePattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
builder->updateStyle(state);
}
@@ -1579,11 +1577,11 @@ void PdfParser::doShadingPatternFillFallback(GfxShadingPattern *sPat,
// TODO not good that numArgs is ignored but args[] is used:
void PdfParser::opShFill(Object args[], int /*numArgs*/)
{
- GfxShading *shading = nullptr;
GfxPath *savedPath = nullptr;
bool savedState = false;
- if (!(shading = res->lookupShading(args[0].getName(), nullptr, state))) {
+ auto shading = std::unique_ptr<GfxShading>(res->lookupShading(args[0].getName(), nullptr, state));
+ if (!shading) {
return;
}
@@ -1615,19 +1613,19 @@ void PdfParser::opShFill(Object args[], int /*numArgs*/)
// do shading type-specific operations
switch (shading->getType()) {
case 1: // Function-based shading
- doFunctionShFill(static_cast<GfxFunctionShading *>(shading));
+ doFunctionShFill(static_cast<GfxFunctionShading *>(shading.get()));
break;
case 2: // Axial shading
case 3: // Radial shading
- builder->addClippedFill(shading, stateToAffine(state));
+ builder->addClippedFill(shading.get(), stateToAffine(state));
break;
case 4: // Free-form Gouraud-shaded triangle mesh
case 5: // Lattice-form Gouraud-shaded triangle mesh
- doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading *>(shading));
+ doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading *>(shading.get()));
break;
case 6: // Coons patch mesh
case 7: // Tensor-product patch mesh
- doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading));
+ doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading.get()));
break;
}
@@ -1636,8 +1634,6 @@ void PdfParser::opShFill(Object args[], int /*numArgs*/)
restoreState();
state->setPath(savedPath);
}
-
- delete shading;
}
void PdfParser::doFunctionShFill(GfxFunctionShading *shading) {
@@ -2528,7 +2524,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
} else {
// get color space and color map
- GfxColorSpace *colorSpace;
+ std::unique_ptr<GfxColorSpace> colorSpace;
_POPPLER_CALL_ARGS(obj1, dict->lookup, "ColorSpace");
if (obj1.isNull()) {
_POPPLER_FREE(obj1);
@@ -2537,13 +2533,11 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
if (!obj1.isNull()) {
colorSpace = lookupColorSpaceCopy(obj1);
} else if (csMode == streamCSDeviceGray) {
- colorSpace = new GfxDeviceGrayColorSpace();
+ colorSpace = std::make_unique<GfxDeviceGrayColorSpace>();
} else if (csMode == streamCSDeviceRGB) {
- colorSpace = new GfxDeviceRGBColorSpace();
+ colorSpace = std::make_unique<GfxDeviceRGBColorSpace>();
} else if (csMode == streamCSDeviceCMYK) {
- colorSpace = new GfxDeviceCMYKColorSpace();
- } else {
- colorSpace = nullptr;
+ colorSpace = std::make_unique<GfxDeviceCMYKColorSpace>();
}
_POPPLER_FREE(obj1);
if (!colorSpace) {
@@ -2554,10 +2548,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
_POPPLER_FREE(obj1);
_POPPLER_CALL_ARGS(obj1, dict->lookup, "D");
}
- GfxImageColorMap *colorMap = new GfxImageColorMap(bits, &obj1, colorSpace);
+ auto colorMap = std::make_unique<GfxImageColorMap>(bits, &obj1, _POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
_POPPLER_FREE(obj1);
if (!colorMap->isOk()) {
- delete colorMap;
goto err1;
}
@@ -2568,7 +2561,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
int maskWidth = 0;
int maskHeight = 0;
maskInvert = gFalse;
- GfxImageColorMap *maskColorMap = nullptr;
+ std::unique_ptr<GfxImageColorMap> maskColorMap;
_POPPLER_CALL_ARGS(maskObj, dict->lookup, "Mask");
_POPPLER_CALL_ARGS(smaskObj, dict->lookup, "SMask");
Dict* maskDict;
@@ -2624,7 +2617,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
_POPPLER_FREE(obj1);
_POPPLER_CALL_ARGS(obj1, maskDict->lookup, "CS");
}
- GfxColorSpace *maskColorSpace = lookupColorSpaceCopy(obj1);
+ auto maskColorSpace = lookupColorSpaceCopy(obj1);
_POPPLER_FREE(obj1);
if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) {
goto err1;
@@ -2634,10 +2627,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
_POPPLER_FREE(obj1);
_POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D");
}
- maskColorMap = new GfxImageColorMap(maskBits, &obj1, maskColorSpace);
+ maskColorMap = std::make_unique<GfxImageColorMap>(maskBits, &obj1, _POPPLER_CONSUME_UNIQPTR_ARG(maskColorSpace));
_POPPLER_FREE(obj1);
if (!maskColorMap->isOk()) {
- delete maskColorMap;
goto err1;
}
//~ handle the Matte entry
@@ -2718,17 +2710,15 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
// draw it
if (haveSoftMask) {
- builder->addSoftMaskedImage(state, str, width, height, colorMap, interpolate,
- maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate);
- delete maskColorMap;
+ builder->addSoftMaskedImage(state, str, width, height, colorMap.get(), interpolate,
+ maskStr, maskWidth, maskHeight, maskColorMap.get(), maskInterpolate);
} else if (haveExplicitMask) {
- builder->addMaskedImage(state, str, width, height, colorMap, interpolate,
+ builder->addMaskedImage(state, str, width, height, colorMap.get(), interpolate,
maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate);
} else {
- builder->addImage(state, str, width, height, colorMap, interpolate,
- haveColorKeyMask ? maskColors : static_cast<int *>(nullptr));
+ builder->addImage(state, str, width, height, colorMap.get(), interpolate,
+ haveColorKeyMask ? maskColors : nullptr);
}
- delete colorMap;
_POPPLER_FREE(maskObj);
_POPPLER_FREE(smaskObj);
@@ -2746,7 +2736,6 @@ void PdfParser::doForm(Object *str, double *offset)
{
Dict *dict;
GBool transpGroup, isolated, knockout;
- GfxColorSpace *blendingColorSpace;
Object matrixObj, bboxObj;
double m[6], bbox[4];
Object resObj;
@@ -2812,12 +2801,12 @@ void PdfParser::doForm(Object *str, double *offset)
// check for a transparency group
transpGroup = isolated = knockout = gFalse;
- blendingColorSpace = nullptr;
+ std::unique_ptr<GfxColorSpace> blendingColorSpace;
if (_POPPLER_CALL_ARGS_DEREF(obj1, dict->lookup, "Group").isDict()) {
if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "S").isName("Transparency")) {
transpGroup = gTrue;
if (!_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "CS").isNull()) {
- blendingColorSpace = GfxColorSpace::parse(nullptr, &obj3, nullptr, state);
+ blendingColorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj3, nullptr, state));
}
_POPPLER_FREE(obj3);
if (_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "I").isBool()) {
@@ -2835,12 +2824,9 @@ void PdfParser::doForm(Object *str, double *offset)
// draw it
++formDepth;
- doForm1(str, resDict, m, bbox, transpGroup, gFalse, blendingColorSpace, isolated, knockout);
+ doForm1(str, resDict, m, bbox, transpGroup, gFalse, blendingColorSpace.get(), isolated, knockout);
--formDepth;
- if (blendingColorSpace) {
- delete blendingColorSpace;
- }
_POPPLER_FREE(resObj);
}
diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
index c7c10caefed..8325ea24364 100644
--- a/src/extension/internal/pdfinput/pdf-parser.h
+++ b/src/extension/internal/pdfinput/pdf-parser.h
@@ -137,7 +137,7 @@ public:
void loadPatternColorProfiles(Dict *resources);
void loadColorProfile();
void loadColorSpaceProfile(GfxColorSpace *space, Object *obj);
- GfxPattern *lookupPattern(Object *obj, GfxState *state);
+ std::unique_ptr<GfxPattern> lookupPattern(Object *obj, GfxState *state);
std::shared_ptr<CairoFontEngine> getFontEngine();
@@ -176,7 +176,7 @@ private:
//! Caches color spaces by name
std::map<std::string, std::unique_ptr<GfxColorSpace>> colorSpacesCache;
- GfxColorSpace *lookupColorSpaceCopy(Object &);
+ std::unique_ptr<GfxColorSpace> lookupColorSpaceCopy(Object &);
void setDefaultApproximationPrecision(); // init color deltas
void pushOperator(const char *name);
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
index 481aefadf46..8f03aa17779 100644
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
@@ -15,6 +15,12 @@
#include <glib/poppler-features.h>
#include <poppler/UTF.h>
+#if POPPLER_CHECK_VERSION(24, 10, 0)
+#define _POPPLER_CONSUME_UNIQPTR_ARG(value) std::move(value)
+#else
+#define _POPPLER_CONSUME_UNIQPTR_ARG(value) value.release()
+#endif
+
#if POPPLER_CHECK_VERSION(24, 5, 0)
#define _POPPLER_HAS_UNICODE_BOM(value) (hasUnicodeByteOrderMark(value->toStr()))
#define _POPPLER_HAS_UNICODE_BOMLE(value) (hasUnicodeByteOrderMarkLE(value->toStr()))
--
GitLab
@@ -0,0 +1,58 @@
From 0399372ec240d23e0e70548237a541f2b5bf0f34 Mon Sep 17 00:00:00 2001
From: KrIr17 <elendil.krir17@gmail.com>
Date: Tue, 5 Nov 2024 00:40:15 +0100
Subject: [PATCH] Fix building with Poppler 24.11
Poppler 24.11 no longer sets the default value for faceIndex to 0 in
`FoFiTrueType::make()` and `FoFiTrueType::load()` [1], so we do it
on our end instead.
Fixes https://gitlab.com/inkscape/inkscape/-/issues/5370
[1] https://gitlab.freedesktop.org/poppler/poppler/-/commit/94467509a013dd5cf46c942baa598f2b296571f4
---
.../internal/pdfinput/poppler-cairo-font-engine.cpp | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
index 34a8eed682d..728b1d1aac4 100644
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
@@ -419,9 +419,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
FoFiTrueType *ff;
#endif
if (!font_data.empty()) {
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
} else {
- ff = FoFiTrueType::load(fileName.c_str());
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
}
if (!ff) {
goto err2;
@@ -444,9 +444,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
FoFiTrueType *ff;
#endif
if (!font_data.empty()) {
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
} else {
- ff = FoFiTrueType::load(fileName.c_str());
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
}
if (!ff) {
error(errSyntaxError, -1, "failed to load truetype font\n");
@@ -512,9 +512,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
FoFiTrueType *ff;
#endif
if (!font_data.empty()) {
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
} else {
- ff = FoFiTrueType::load(fileName.c_str());
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
}
if (ff) {
if (ff->isOpenTypeCFF()) {
--
GitLab
@@ -0,0 +1,52 @@
From c9046810d899a408bfbd489aad91872b1203ee6d Mon Sep 17 00:00:00 2001
From: KrIr17 <elendil.krir17@gmail.com>
Date: Thu, 5 Dec 2024 15:03:47 +0100
Subject: [PATCH] Fix building with poppler 24.12.0
Fixes https://gitlab.com/inkscape/inkscape/-/issues/5415
---
src/extension/internal/pdfinput/pdf-parser.cpp | 4 +++-
src/extension/internal/pdfinput/poppler-transition-api.h | 6 ++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
index 28000a87b0c..9ea30b90a48 100644
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
@@ -2403,6 +2403,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
int bits;
GBool interpolate;
StreamColorSpaceMode csMode;
+ GBool hasAlpha;
GBool mask;
GBool invert;
Object maskObj, smaskObj;
@@ -2414,7 +2415,8 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
// get info from the stream
bits = 0;
csMode = streamCSNone;
- str->getImageParams(&bits, &csMode);
+ hasAlpha = false;
+ str->_POPPLER_GET_IMAGE_PARAMS(&bits, &csMode, &hasAlpha);
// get stream dict
dict = str->getDict();
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
index 8f03aa17779..b7a54828e74 100644
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
@@ -39,6 +39,12 @@
#define _POPPLER_FUNCTION_TYPE_STITCHING 3
#endif
+#if POPPLER_CHECK_VERSION(24,12,0)
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
+#else
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
+#endif
+
#if POPPLER_CHECK_VERSION(22, 4, 0)
#define _POPPLER_FONTPTR_TO_GFX8(font_ptr) ((Gfx8BitFont *)font_ptr.get())
#else
--
GitLab
@@ -0,0 +1,178 @@
From 5c4c6d116dae5250d75d34a45f0d9220824d2e20 Mon Sep 17 00:00:00 2001
From: KrIr17 <elendil.krir17@gmail.com>
Date: Sun, 9 Feb 2025 22:52:53 +0530
Subject: [PATCH] Fix building with poppler 25.02.0
1. `getCodeToGIDMap`, `getCIDToGID`, `getCIDToGIDMap` are now `std::vector`
2. `pdfDocEncodingToUTF16` returns an `std::string`
---
.../pdfinput/poppler-cairo-font-engine.cpp | 50 +++++++++++++++----
.../pdfinput/poppler-transition-api.h | 20 +++++---
3 files changed, 63 insertions(+), 16 deletions(-)
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
index 728b1d1aac4..bd1d4e49367 100644
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
@@ -405,14 +405,22 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
break;
case fontCIDType2:
case fontCIDType2OT:
+#if POPPLER_CHECK_VERSION(25,2,0)
+ if (!gfxcid->getCIDToGID().empty()) {
+ const auto src = gfxcid->getCIDToGID();
+ codeToGID = std::move(src);
+ }
+#else
if (gfxcid->getCIDToGID()) {
n = gfxcid->getCIDToGIDLen();
if (n) {
- const int *src = gfxcid->getCIDToGID();
+ const auto src = gfxcid->getCIDToGID();
codeToGID.reserve(n);
codeToGID.insert(codeToGID.begin(), src, src + n);
}
- } else {
+ }
+#endif
+ else {
#if POPPLER_CHECK_VERSION(22, 1, 0)
std::unique_ptr<FoFiTrueType> ff;
#else
@@ -427,13 +435,18 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
goto err2;
}
#if POPPLER_CHECK_VERSION(22, 1, 0)
- int *src = gfxcid->getCodeToGIDMap(ff.get(), &n);
+ auto src = gfxcid->_POPPLER_GET_CODE_TO_GID_MAP(ff.get(), &n);
#else
- int *src = gfxcid->getCodeToGIDMap(ff, &n);
+ auto src = gfxcid->_POPPLER_GET_CODE_TO_GID_MAP(ff, &n);
#endif
+
+#if POPPLER_CHECK_VERSION(25,2,0)
+ codeToGID = std::move(src);
+#else
codeToGID.reserve(n);
codeToGID.insert(codeToGID.begin(), src, src + n);
gfree(src);
+#endif
}
/* Fall through */
case fontTrueType:
@@ -455,13 +468,17 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
/* This might be set already for the CIDType2 case */
if (fontType == fontTrueType || fontType == fontTrueTypeOT) {
#if POPPLER_CHECK_VERSION(22, 1, 0)
- int *src = gfx8bit->getCodeToGIDMap(ff.get());
+ auto src = gfx8bit->getCodeToGIDMap(ff.get());
#else
- int *src = gfx8bit->getCodeToGIDMap(ff);
+ auto src = gfx8bit->getCodeToGIDMap(ff);
#endif
+#if POPPLER_CHECK_VERSION(25,2,0)
+ codeToGID = std::move(src);
+#else
codeToGID.reserve(256);
codeToGID.insert(codeToGID.begin(), src, src + 256);
gfree(src);
+#endif
}
font_face = getFreeTypeFontFace(fontEngine, lib, fileName, std::move(font_data));
if (!font_face) {
@@ -479,10 +496,14 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
ff1c = FoFiType1C::load(fileName.c_str());
}
if (ff1c) {
- int *src = ff1c->getCIDToGIDMap(&n);
+ auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n);
+#if POPPLER_CHECK_VERSION(25,2,0)
+ codeToGID = std::move(src);
+#else
codeToGID.reserve(n);
codeToGID.insert(codeToGID.begin(), src, src + n);
gfree(src);
+#endif
delete ff1c;
}
}
@@ -495,14 +516,21 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
break;
case fontCIDType0COT:
+#if POPPLER_CHECK_VERSION(25,2,0)
+ if (!gfxcid->getCIDToGID().empty()) {
+ const auto src = gfxcid->getCIDToGID();
+ codeToGID = std::move(src);
+ }
+#else
if (gfxcid->getCIDToGID()) {
n = gfxcid->getCIDToGIDLen();
if (n) {
- const int *src = gfxcid->getCIDToGID();
+ const auto src = gfxcid->getCIDToGID();
codeToGID.reserve(n);
codeToGID.insert(codeToGID.begin(), src, src + n);
}
}
+#endif
if (codeToGID.empty()) {
if (!useCIDs) {
@@ -518,10 +546,14 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
}
if (ff) {
if (ff->isOpenTypeCFF()) {
- int *src = ff->getCIDToGIDMap(&n);
+ auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n);
+#if POPPLER_CHECK_VERSION(25,2,0)
+ codeToGID = std::move(src);
+#else
codeToGID.reserve(n);
codeToGID.insert(codeToGID.begin(), src, src + n);
gfree(src);
+#endif
}
}
}
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
index b7a54828e74..a67132ba6bd 100644
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
@@ -15,6 +15,20 @@
#include <glib/poppler-features.h>
#include <poppler/UTF.h>
+#if POPPLER_CHECK_VERSION(25,2,0)
+#define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff)
+#define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap()
+#else
+#define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff, len)
+#define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap(len)
+#endif
+
+#if POPPLER_CHECK_VERSION(24,12,0)
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
+#else
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
+#endif
+
#if POPPLER_CHECK_VERSION(24, 10, 0)
#define _POPPLER_CONSUME_UNIQPTR_ARG(value) std::move(value)
#else
@@ -39,12 +53,6 @@
#define _POPPLER_FUNCTION_TYPE_STITCHING 3
#endif
-#if POPPLER_CHECK_VERSION(24,12,0)
-#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
-#else
-#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
-#endif
-
#if POPPLER_CHECK_VERSION(22, 4, 0)
#define _POPPLER_FONTPTR_TO_GFX8(font_ptr) ((Gfx8BitFont *)font_ptr.get())
#else
--
GitLab
+24 -2
View File
@@ -11,11 +11,12 @@
<PartOf>multimedia.graphics</PartOf>
<License>GPL-2</License>
<License>LGPL-2.1</License>
<Icon>inkscape</Icon>
<IsA>app:gui</IsA>
<Summary>SVG vector graphics application.</Summary>
<Description>Inkscape is an application to create, edit, and convert SVG vector graphics images that can also import from and export to bitmap image files.</Description>
<Archive sha1sum="7a071422e9300c5006707d57bc28245cce2aa2a3" type="tarxz">
https://inkscape.org/gallery/item/42328/inkscape-1.3.tar.xz
<Archive sha1sum="d4db06230fdd069c11bf50abc40725148cc6876a" type="tarxz">
https://inkscape.org/gallery/item/53679/inkscape-1.4.tar.xz
</Archive>
<BuildDependencies>
<Dependency>cmake</Dependency>
@@ -27,6 +28,7 @@
<Dependency>intltool</Dependency>
<Dependency>gsl-devel</Dependency>
<Dependency>gdl-devel</Dependency>
<Dependency>glib2-devel</Dependency>
<!-- stable deps. -->
<Dependency>libXt-devel</Dependency>
<Dependency>libXv-devel</Dependency>
@@ -37,10 +39,13 @@
<Dependency>libXres-devel</Dependency>
<Dependency>libXtst-devel</Dependency>
<Dependency>ncurses-devel</Dependency>
<!-- <Dependency>libcroco-devel</Dependency> -->
<Dependency>xcb-util-devel</Dependency>
<Dependency>readline-devel</Dependency>
<Dependency>libepoxy-devel</Dependency>
<!-- <Dependency>lib2geom-devel</Dependency> -->
<Dependency>libxkbfile-devel</Dependency>
<Dependency>gtksourceview4-devel</Dependency>
<!-- -->
<Dependency>dbus-devel</Dependency>
<Dependency>gtk3-devel</Dependency>
@@ -75,6 +80,14 @@
<Dependency>double-conversion-devel</Dependency>
<Dependency>python3-pygobject3-devel</Dependency>
</BuildDependencies>
<Patches>
<Patch>inkscape-1.4-cmake4.patch</Patch>
<Patch>inkscape-1.4-gcc15.patch</Patch>
<Patch>inkscape-1.4-poppler-24.10-fix-backport.patch</Patch>
<Patch>inkscape-1.4-poppler-24.11.0.patch</Patch>
<Patch>inkscape-1.4-poppler-24.12.0.patch</Patch>
<Patch>inkscape-1.4-poppler-25.02.0.patch</Patch>
</Patches>
</Source>
<Package>
@@ -126,11 +139,13 @@
<!-- <Dependency>imagemagick6</Dependency> -->
<Dependency>poppler-glib</Dependency>
<Dependency>python3-lxml</Dependency>
<Dependency>python3-numpy</Dependency>
<Dependency>python3-scour</Dependency>
<Dependency>boost-python3</Dependency>
<Dependency>libjpeg-turbo</Dependency>
<Dependency>GraphicsMagick</Dependency>
<Dependency>gtksourceview4</Dependency>
<Dependency>python3-appdirs</Dependency>
<Dependency>python3-cssselect</Dependency>
<!-- <Dependency>double-conversion</Dependency> -->
@@ -177,6 +192,13 @@
</Package>
<History>
<Update release="21">
<Date>2025-04-29</Date>
<Version>1.4</Version>
<Comment>Version bump</Comment>
<Name>Kamil Atlı</Name>
<Email>suvari@pisilinux.org</Email>
</Update>
<Update release="20">
<Date>2023-11-01</Date>
<Version>1.3</Version>