mirror of
https://github.com/openbsd/ports.git
synced 2026-06-17 23:13:55 +02:00
Update inkscape to 1.4.4
This commit is contained in:
@@ -1,8 +1,7 @@
|
|||||||
COMMENT = SVG vector drawing application
|
COMMENT = SVG vector drawing application
|
||||||
|
|
||||||
VERSION = 1.4.3
|
VERSION = 1.4.4
|
||||||
DISTNAME = inkscape-${VERSION}
|
DISTNAME = inkscape-${VERSION}
|
||||||
REVISION = 1
|
|
||||||
|
|
||||||
CATEGORIES = graphics
|
CATEGORIES = graphics
|
||||||
|
|
||||||
@@ -10,7 +9,7 @@ HOMEPAGE = https://www.inkscape.org/
|
|||||||
|
|
||||||
MAINTAINER = Rafael Sadowski <rsadowski@openbsd.org>
|
MAINTAINER = Rafael Sadowski <rsadowski@openbsd.org>
|
||||||
|
|
||||||
SHARED_LIBS += inkscape_base 3.0 # 0.0
|
SHARED_LIBS += inkscape_base 4.0 # 0.0
|
||||||
|
|
||||||
# GPLv2 and LGPLv2.1
|
# GPLv2 and LGPLv2.1
|
||||||
PERMIT_PACKAGE = Yes
|
PERMIT_PACKAGE = Yes
|
||||||
@@ -88,7 +87,7 @@ RUN_DEPENDS = devel/desktop-file-utils \
|
|||||||
www/py-requests \
|
www/py-requests \
|
||||||
x11/gtk+4,-guic
|
x11/gtk+4,-guic
|
||||||
|
|
||||||
WRKDIST = ${WRKDIR}/inkscape-${VERSION}_2025-12-25_0d15f75042
|
WRKDIST = ${WRKDIR}/inkscape-${VERSION}_2026-05-05_dcaf3e7d9e
|
||||||
|
|
||||||
SUBST_VARS += RUBY MODRUBY_REV
|
SUBST_VARS += RUBY MODRUBY_REV
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
SHA256 (inkscape-1.4.3.tar.xz) = 6DosPbVwtsWh/w/M/nCYg3s/a9dLEzVnk3yKkXEO0dE=
|
SHA256 (inkscape-1.4.4.tar.xz) = u85XU6Hgi4caXPFsZl6wYHAKqrmmo3ncY/TE2bO4hW4=
|
||||||
SIZE (inkscape-1.4.3.tar.xz) = 53907460
|
SIZE (inkscape-1.4.4.tar.xz) = 53861940
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/pdf-input.cpp
|
|
||||||
--- src/extension/internal/pdfinput/pdf-input.cpp.orig
|
|
||||||
+++ src/extension/internal/pdfinput/pdf-input.cpp
|
|
||||||
@@ -33,6 +33,7 @@
|
|
||||||
#include <poppler/glib/poppler.h>
|
|
||||||
#include <poppler/glib/poppler-document.h>
|
|
||||||
#include <poppler/glib/poppler-page.h>
|
|
||||||
+#include <poppler/goo/gmem.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gdkmm/general.h>
|
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
--- src/extension/internal/pdfinput/pdf-parser.cpp.orig
|
|
||||||
+++ src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
@@ -653,7 +653,11 @@ void PdfParser::opSetFlat(Object args[], int /*numArgs
|
|
||||||
void PdfParser::opSetLineJoin(Object args[], int /*numArgs*/)
|
|
||||||
{
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
+#if POPPLER_CHECK_VERSION(26,2,0)
|
|
||||||
+ state->setLineJoin((GfxState::LineJoinStyle) args[0].getInt());
|
|
||||||
+#else
|
|
||||||
state->setLineJoin(args[0].getInt());
|
|
||||||
+#endif
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -661,7 +665,11 @@ void PdfParser::opSetLineJoin(Object args[], int /*num
|
|
||||||
void PdfParser::opSetLineCap(Object args[], int /*numArgs*/)
|
|
||||||
{
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
+#if POPPLER_CHECK_VERSION(26,2,0)
|
|
||||||
+ state->setLineCap((GfxState::LineCapStyle) args[0].getInt());
|
|
||||||
+#else
|
|
||||||
state->setLineCap(args[0].getInt());
|
|
||||||
+#endif
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1565,7 +1573,13 @@ void PdfParser::doShadingPatternFillFallback(GfxShadin
|
|
||||||
|
|
||||||
// restore graphics state
|
|
||||||
restoreState();
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 2, 0)
|
|
||||||
+ state->clearPath();
|
|
||||||
+ GfxPath *currPath = const_cast<GfxPath*>(state->getPath());
|
|
||||||
+ currPath->append(savedPath);
|
|
||||||
+#else
|
|
||||||
state->setPath(savedPath);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO not good that numArgs is ignored but args[] is used:
|
|
||||||
@@ -1626,7 +1640,13 @@ void PdfParser::opShFill(Object args[], int /*numArgs*
|
|
||||||
// restore graphics state
|
|
||||||
if (savedState) {
|
|
||||||
restoreState();
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 2, 0)
|
|
||||||
+ state->clearPath();
|
|
||||||
+ GfxPath *currPath = const_cast<GfxPath*>(state->getPath());
|
|
||||||
+ currPath->append(savedPath);
|
|
||||||
+#else
|
|
||||||
state->setPath(savedPath);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2213,7 +2233,7 @@ void PdfParser::opShowSpaceText(Object args[], int /*n
|
|
||||||
{
|
|
||||||
Array *a = nullptr;
|
|
||||||
Object obj;
|
|
||||||
- int wMode = 0; // Writing mode (horizontal/vertical).
|
|
||||||
+ _POPPLER_WMODE wMode = _POPPLER_WMODE_HORIZONTAL; // Writing mode (horizontal/vertical).
|
|
||||||
|
|
||||||
if (!state->getFont()) {
|
|
||||||
error(errSyntaxError, getPos(), "No font in show/space");
|
|
||||||
@@ -2227,7 +2247,7 @@ void PdfParser::opShowSpaceText(Object args[], int /*n
|
|
||||||
if (obj.isNum()) {
|
|
||||||
// this uses the absolute value of the font size to match
|
|
||||||
// Acrobat's behavior
|
|
||||||
- if (wMode) {
|
|
||||||
+ if (wMode != _POPPLER_WMODE_HORIZONTAL) {
|
|
||||||
state->textShift(0, -obj.getNum() * 0.001 *
|
|
||||||
fabs(state->getFontSize()));
|
|
||||||
} else {
|
|
||||||
@@ -2248,15 +2268,11 @@ void PdfParser::opShowSpaceText(Object args[], int /*n
|
|
||||||
* This adds a string from a PDF file that is contained in one command ('Tj', ''', '"')
|
|
||||||
* or is one string in ShowSpacetext ('TJ').
|
|
||||||
*/
|
|
||||||
-#if POPPLER_CHECK_VERSION(0,64,0)
|
|
||||||
-void PdfParser::doShowText(const GooString *s) {
|
|
||||||
-#else
|
|
||||||
-void PdfParser::doShowText(GooString *s) {
|
|
||||||
-#endif
|
|
||||||
+void PdfParser::doShowText(const std::string &s) {
|
|
||||||
auto font = state->getFont();
|
|
||||||
- int wMode = font->getWMode(); // Vertical/Horizontal/Invalid
|
|
||||||
+ _POPPLER_WMODE wMode = font->getWMode(); // Vertical/Horizontal/Invalid
|
|
||||||
|
|
||||||
- builder->beginString(state, get_goostring_length(*s));
|
|
||||||
+ builder->beginString(state, s.size());
|
|
||||||
|
|
||||||
// handle a Type 3 char
|
|
||||||
if (font->getType() == fontType3) {
|
|
||||||
@@ -2266,8 +2282,8 @@ void PdfParser::doShowText(GooString *s) {
|
|
||||||
double riseX, riseY;
|
|
||||||
state->textTransformDelta(0, state->getRise(), &riseX, &riseY);
|
|
||||||
|
|
||||||
- auto p = s->getCString(); // char* or const char*
|
|
||||||
- int len = get_goostring_length(*s);
|
|
||||||
+ auto p = s.c_str(); // char* or const char*
|
|
||||||
+ int len = s.size();
|
|
||||||
|
|
||||||
while (len > 0) {
|
|
||||||
|
|
||||||
@@ -2289,7 +2305,7 @@ void PdfParser::doShowText(GooString *s) {
|
|
||||||
auto ax = dx;
|
|
||||||
auto ay = dy;
|
|
||||||
|
|
||||||
- if (wMode != 0) {
|
|
||||||
+ if (wMode != _POPPLER_WMODE_HORIZONTAL) {
|
|
||||||
// Vertical text (or invalid value).
|
|
||||||
dy += state->getCharSpace();
|
|
||||||
if (n == 1 && *p == ' ') {
|
|
||||||
@@ -2324,7 +2340,16 @@ void PdfParser::doShowText(GooString *s) {
|
|
||||||
builder->endString(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if POPPLER_CHECK_VERSION(0,64,0)
|
|
||||||
+void PdfParser::doShowText(const GooString *s) {
|
|
||||||
+#else
|
|
||||||
+void PdfParser::doShowText(GooString *s) {
|
|
||||||
+#endif
|
|
||||||
+ const std::string str = s->toStr();
|
|
||||||
+ doShowText(str);
|
|
||||||
+}
|
|
||||||
|
|
||||||
+
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
// XObject operators
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
@@ -2931,7 +2956,11 @@ Stream *PdfParser::buildImageStream() {
|
|
||||||
|
|
||||||
// build dictionary
|
|
||||||
#if defined(POPPLER_NEW_OBJECT_API)
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 3, 0)
|
|
||||||
+ dict = Object(std::make_unique<Dict>(xref));
|
|
||||||
+#else
|
|
||||||
dict = Object(new Dict(xref));
|
|
||||||
+#endif
|
|
||||||
#else
|
|
||||||
dict.initDict(xref);
|
|
||||||
#endif
|
|
||||||
@@ -2964,7 +2993,11 @@ Stream *PdfParser::buildImageStream() {
|
|
||||||
// make stream
|
|
||||||
#if defined(POPPLER_NEW_OBJECT_API)
|
|
||||||
str = new EmbedStream(parser->getStream(), dict.copy(), gFalse, 0);
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 2, 0)
|
|
||||||
+ str = str->addFilters(std::unique_ptr<Stream>(str), dict.getDict()).release();
|
|
||||||
+#else
|
|
||||||
str = str->addFilters(dict.getDict());
|
|
||||||
+#endif
|
|
||||||
#else
|
|
||||||
str = new EmbedStream(parser->getStream(), &dict, gFalse, 0);
|
|
||||||
str = str->addFilters(&dict);
|
|
||||||
@@ -3137,10 +3170,17 @@ void PdfParser::loadOptionalContentLayers(Dict *resour
|
|
||||||
auto visible = true;
|
|
||||||
// Normally we'd use poppler optContentIsVisible, but these dict
|
|
||||||
// objects don't retain their references so can't be used directly.
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 2, 0)
|
|
||||||
for (auto &[ref, ocg] : ocgs->getOCGs()) {
|
|
||||||
+ if (ocg->getName()->toStr() == label)
|
|
||||||
+ visible = ocg->getState() == OptionalContentGroup::On;
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
+ for (auto &[ref, ocg] : ocgs->getOCGs()) {
|
|
||||||
if (ocg->getName()->cmp(label) == 0)
|
|
||||||
visible = ocg->getState() == OptionalContentGroup::On;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
builder->addOptionalGroup(dict->getKey(j), label, visible);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
--- src/extension/internal/pdfinput/pdf-parser.h.orig
|
|
||||||
+++ src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
@@ -283,10 +283,11 @@ class PdfParser { (private)
|
|
||||||
void opMoveShowText(Object args[], int numArgs);
|
|
||||||
void opMoveSetShowText(Object args[], int numArgs);
|
|
||||||
void opShowSpaceText(Object args[], int numArgs);
|
|
||||||
+ void doShowText(const std::string &s);
|
|
||||||
#if POPPLER_CHECK_VERSION(0,64,0)
|
|
||||||
- void doShowText(const GooString *s);
|
|
||||||
+ void doShowText(const GooString *s);
|
|
||||||
#else
|
|
||||||
- void doShowText(GooString *s);
|
|
||||||
+ void doShowText(GooString *s);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
--- src/extension/internal/pdfinput/poppler-transition-api.h.orig
|
|
||||||
+++ src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
@@ -15,6 +15,16 @@
|
|
||||||
#include <glib/poppler-features.h>
|
|
||||||
#include <poppler/UTF.h>
|
|
||||||
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 2, 0)
|
|
||||||
+#define _POPPLER_WMODE GfxFont::WritingMode
|
|
||||||
+#define _POPPLER_WMODE_HORIZONTAL GfxFont::WritingMode::Horizontal
|
|
||||||
+#define _POPPLER_WMODE_VERTICAL GfxFont::WritingMode::Vertical
|
|
||||||
+#else
|
|
||||||
+#define _POPPLER_WMODE int
|
|
||||||
+#define _POPPLER_WMODE_HORIZONTAL 0
|
|
||||||
+#define _POPPLER_WMODE_VERTICAL 1
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if POPPLER_CHECK_VERSION(25, 7, 0)
|
|
||||||
#define _POPPLER_TEXT_SHIFT_WITH_USER_COORDS(dx, dy) textShiftWithUserCoords(dx, dy)
|
|
||||||
#define _POPPLER_FOFI_TRUETYPE_MAKE(font_data, faceIndex) FoFiTrueType::make(std::span(font_data), faceIndex)
|
|
||||||
@@ -62,11 +72,11 @@
|
|
||||||
#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()))
|
|
||||||
+#define _POPPLER_HAS_UNICODE_BOM(value) (hasUnicodeByteOrderMark(value))
|
|
||||||
+#define _POPPLER_HAS_UNICODE_BOMLE(value) (hasUnicodeByteOrderMarkLE(value))
|
|
||||||
#else
|
|
||||||
-#define _POPPLER_HAS_UNICODE_BOM(value) (value->hasUnicodeMarker())
|
|
||||||
-#define _POPPLER_HAS_UNICODE_BOMLE(value) (value->hasUnicodeMarkerLE())
|
|
||||||
+#define _POPPLER_HAS_UNICODE_BOM(value) (GooString(value).hasUnicodeMarker())
|
|
||||||
+#define _POPPLER_HAS_UNICODE_BOMLE(value) (GooString(value).hasUnicodeMarkerLE())
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if POPPLER_CHECK_VERSION(24, 3, 0)
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/poppler-utils.cpp
|
|
||||||
--- src/extension/internal/pdfinput/poppler-utils.cpp.orig
|
|
||||||
+++ src/extension/internal/pdfinput/poppler-utils.cpp
|
|
||||||
@@ -88,7 +88,11 @@ InkFontDict::InkFontDict(XRef *xref, Ref *fontDictRef,
|
|
||||||
r.num = hashFontObject(&obj2);
|
|
||||||
}
|
|
||||||
// Newer poppler will require some reworking as it gives a shared ptr.
|
|
||||||
+#if POPPLER_CHECK_VERSION(26,3,0)
|
|
||||||
+ fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i), r, *obj2.getDict());
|
|
||||||
+#else
|
|
||||||
fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i), r, obj2.getDict());
|
|
||||||
+#endif
|
|
||||||
if (fonts[i] && !fonts[i]->isOk()) {
|
|
||||||
fonts[i] = nullptr;
|
|
||||||
}
|
|
||||||
@@ -145,7 +149,6 @@ int InkFontDict::hashFontObject(Object *obj)
|
|
||||||
|
|
||||||
void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h)
|
|
||||||
{
|
|
||||||
- const GooString *s;
|
|
||||||
const char *p;
|
|
||||||
double r;
|
|
||||||
int n, i;
|
|
||||||
@@ -165,11 +168,16 @@ void InkFontDict::hashFontObject1(const Object *obj, F
|
|
||||||
r = obj->getReal();
|
|
||||||
h->hash((char *)&r, sizeof(double));
|
|
||||||
break;
|
|
||||||
- case objString:
|
|
||||||
+ case objString: {
|
|
||||||
h->hash('s');
|
|
||||||
- s = obj->getString();
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 4, 0)
|
|
||||||
+ const auto &s = obj->getString();
|
|
||||||
+ h->hash(s.c_str(), s.size());
|
|
||||||
+#else
|
|
||||||
+ const GooString* s = obj->getString();
|
|
||||||
h->hash(s->c_str(), get_goostring_length(*s));
|
|
||||||
- break;
|
|
||||||
+#endif
|
|
||||||
+ } break;
|
|
||||||
case objName:
|
|
||||||
h->hash('n');
|
|
||||||
p = obj->getName();
|
|
||||||
@@ -583,23 +591,45 @@ std::string getDictString(Dict *dict, const char *key)
|
|
||||||
if (!obj.isString()) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
+ std::cout << obj.getString() << std::endl;
|
|
||||||
return getString(obj.getString());
|
|
||||||
}
|
|
||||||
|
|
||||||
+std::string getString(const std::unique_ptr<GooString> &value)
|
|
||||||
+{
|
|
||||||
+ return getString(value.get());
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+std::string getString(const GooString *value)
|
|
||||||
+{
|
|
||||||
+ if (value) {
|
|
||||||
+ return getString(value->toStr());
|
|
||||||
+ }
|
|
||||||
+ return "";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* Convert PDF strings, which can be formatted as UTF8, UTF16BE or UTF16LE into
|
|
||||||
* a predictable UTF8 string consistant with svg requirements.
|
|
||||||
*/
|
|
||||||
-std::string getString(const GooString *value)
|
|
||||||
+std::string getString(const std::string &value)
|
|
||||||
{
|
|
||||||
+ char *str = nullptr;
|
|
||||||
+
|
|
||||||
if (_POPPLER_HAS_UNICODE_BOM(value)) {
|
|
||||||
- return g_convert(value->getCString () + 2, get_goostring_length(*value) - 2,
|
|
||||||
- "UTF-8", "UTF-16BE", NULL, NULL, NULL);
|
|
||||||
+ str = g_convert(value.c_str() + 2, value.size() - 2,
|
|
||||||
+ "UTF-8", "UTF-16BE", NULL, NULL, NULL);
|
|
||||||
} else if (_POPPLER_HAS_UNICODE_BOMLE(value)) {
|
|
||||||
- return g_convert(value->getCString () + 2, get_goostring_length(*value) - 2,
|
|
||||||
- "UTF-8", "UTF-16LE", NULL, NULL, NULL);
|
|
||||||
+ str = g_convert(value.c_str() + 2, value.size() - 2,
|
|
||||||
+ "UTF-8", "UTF-16LE", NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
- return value->toStr();
|
|
||||||
+ if (str) {
|
|
||||||
+ std::string copy = str;
|
|
||||||
+ g_free(str);
|
|
||||||
+ return copy;
|
|
||||||
+ }
|
|
||||||
+ g_warning("Couldn't parse text in PDF from UTF16.");
|
|
||||||
+ return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pdf_debug_array(const Array *array, int depth, XRef *xref)
|
|
||||||
@@ -656,7 +686,11 @@ void pdf_debug_object(const Object *obj, int depth, XR
|
|
||||||
} else if (obj->isArray()) {
|
|
||||||
pdf_debug_array(obj->getArray(), depth, xref);
|
|
||||||
} else if (obj->isString()) {
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 4, 0)
|
|
||||||
+ std::cout << " STR '" << obj->getString().c_str() << "'";
|
|
||||||
+#else
|
|
||||||
std::cout << " STR '" << obj->getString()->getCString() << "'";
|
|
||||||
+#endif
|
|
||||||
} else if (obj->isName()) {
|
|
||||||
std::cout << " NAME '" << obj->getName() << "'";
|
|
||||||
} else if (obj->isBool()) {
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/poppler-utils.h
|
|
||||||
--- src/extension/internal/pdfinput/poppler-utils.h.orig
|
|
||||||
+++ src/extension/internal/pdfinput/poppler-utils.h
|
|
||||||
@@ -83,6 +83,8 @@ typedef std::shared_ptr<std::map<FontPtr, FontData>> F
|
|
||||||
FontList getPdfFonts(std::shared_ptr<PDFDoc> pdf_doc);
|
|
||||||
std::string getNameWithoutSubsetTag(std::string name);
|
|
||||||
std::string getDictString(Dict *dict, const char *key);
|
|
||||||
+std::string getString(const std::string &value);
|
|
||||||
+std::string getString(const std::unique_ptr<GooString> &value);
|
|
||||||
std::string getString(const GooString *value);
|
|
||||||
std::string validateString(std::string const &in);
|
|
||||||
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
Fix with poppler-26.01.0 -- poppler-26.04.0.
|
|
||||||
|
|
||||||
From https://gitlab.com/KrIr17/inkscape/-/commits/poppler_26_04_1.4.3
|
|
||||||
|
|
||||||
Index: src/extension/internal/pdfinput/svg-builder.cpp
|
|
||||||
--- src/extension/internal/pdfinput/svg-builder.cpp.orig
|
|
||||||
+++ src/extension/internal/pdfinput/svg-builder.cpp
|
|
||||||
@@ -32,6 +32,7 @@
|
|
||||||
#include <poppler/GfxState.h>
|
|
||||||
#include <poppler/Page.h>
|
|
||||||
#include <poppler/Stream.h>
|
|
||||||
+#include <poppler/goo/gmem.h>
|
|
||||||
|
|
||||||
#include "color.h"
|
|
||||||
#include "color/cms-util.h"
|
|
||||||
@@ -1385,7 +1386,7 @@ void SvgBuilder::updateFont(GfxState *state, std::shar
|
|
||||||
sp_repr_css_set_property(_css_font, "font-variant", "normal");
|
|
||||||
|
|
||||||
// Writing mode
|
|
||||||
- if ( font->getWMode() == 0 ) {
|
|
||||||
+ if ( font->getWMode() == _POPPLER_WMODE_HORIZONTAL ) {
|
|
||||||
sp_repr_css_set_property(_css_font, "writing-mode", "lr");
|
|
||||||
} else {
|
|
||||||
sp_repr_css_set_property(_css_font, "writing-mode", "tb");
|
|
||||||
@@ -1397,7 +1398,7 @@ void SvgBuilder::updateFont(GfxState *state, std::shar
|
|
||||||
*/
|
|
||||||
void SvgBuilder::updateTextShift(GfxState *state, double shift) {
|
|
||||||
double shift_value = -shift * 0.001 * fabs(state->getFontSize());
|
|
||||||
- if (state->getFont()->getWMode()) {
|
|
||||||
+ if (state->getFont()->getWMode() != _POPPLER_WMODE_HORIZONTAL) {
|
|
||||||
_text_position[1] += shift_value;
|
|
||||||
} else {
|
|
||||||
_text_position[0] += shift_value;
|
|
||||||
@@ -1451,7 +1452,7 @@ Inkscape::XML::Node* SvgBuilder::_flushTextText(GfxSta
|
|
||||||
|
|
||||||
// Text direction is a property of the <text> element.
|
|
||||||
auto font = state->getFont();
|
|
||||||
- if (font->getWMode() == 1) {
|
|
||||||
+ if (font->getWMode() == _POPPLER_WMODE_VERTICAL) {
|
|
||||||
// Only set if vertical.
|
|
||||||
auto css_text = sp_repr_css_attr_new();
|
|
||||||
sp_repr_css_set_property(css_text, "writing-mode", "tb");
|
|
||||||
@@ -1545,8 +1546,8 @@ Inkscape::XML::Node* SvgBuilder::_flushTextText(GfxSta
|
|
||||||
bool output_tspan =
|
|
||||||
next_it == _glyphs.end() ||
|
|
||||||
next_it->style_changed ||
|
|
||||||
- (writing_mode == 0 && std::abs(glyph.text_position[1] - next_it->text_position[1]) > 0.1) ||
|
|
||||||
- (writing_mode == 1 && std::abs(glyph.text_position[0] - next_it->text_position[0]) > 0.1);
|
|
||||||
+ (writing_mode == _POPPLER_WMODE_HORIZONTAL && std::abs(glyph.text_position[1] - next_it->text_position[1]) > 0.1) ||
|
|
||||||
+ (writing_mode == _POPPLER_WMODE_VERTICAL && std::abs(glyph.text_position[0] - next_it->text_position[0]) > 0.1);
|
|
||||||
|
|
||||||
if (output_tspan) {
|
|
||||||
|
|
||||||
@@ -2093,7 +2094,21 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *
|
|
||||||
} else {
|
|
||||||
image_stream = new ImageStream(str, width, 1, 1);
|
|
||||||
}
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 0, 0)
|
|
||||||
+ if(!image_stream->rewind())
|
|
||||||
+ {
|
|
||||||
+ g_warning("ImageStream: Failed to rewind image stream");
|
|
||||||
+ png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
||||||
+ if (!_embed_images) {
|
|
||||||
+ fclose(fp);
|
|
||||||
+ g_free(file_name);
|
|
||||||
+ }
|
|
||||||
+ delete image_stream;
|
|
||||||
+ return nullptr;
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
image_stream->reset();
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// Convert grayscale values
|
|
||||||
unsigned char *buffer = new unsigned char[width];
|
|
||||||
@@ -2119,7 +2134,21 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *
|
|
||||||
image_stream = new ImageStream(str, width,
|
|
||||||
color_map->getNumPixelComps(),
|
|
||||||
color_map->getBits());
|
|
||||||
+#if POPPLER_CHECK_VERSION(26, 0, 0)
|
|
||||||
+ if(!image_stream->rewind())
|
|
||||||
+ {
|
|
||||||
+ g_warning("ImageStream: Failed to rewind image stream");
|
|
||||||
+ png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
||||||
+ if (!_embed_images) {
|
|
||||||
+ fclose(fp);
|
|
||||||
+ g_free(file_name);
|
|
||||||
+ }
|
|
||||||
+ delete image_stream;
|
|
||||||
+ return nullptr;
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
image_stream->reset();
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// Convert RGB values
|
|
||||||
unsigned int *buffer = new unsigned int[width];
|
|
||||||
@@ -932,9 +932,7 @@ share/inkscape/extensions/inkex/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}${MO
|
|||||||
share/inkscape/extensions/inkex/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
|
share/inkscape/extensions/inkex/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
|
||||||
share/inkscape/extensions/inkex/base.py
|
share/inkscape/extensions/inkex/base.py
|
||||||
share/inkscape/extensions/inkex/bezier.py
|
share/inkscape/extensions/inkex/bezier.py
|
||||||
share/inkscape/extensions/inkex/colors/
|
|
||||||
share/inkscape/extensions/inkex/colors.py
|
share/inkscape/extensions/inkex/colors.py
|
||||||
share/inkscape/extensions/inkex/colors/spaces/
|
|
||||||
share/inkscape/extensions/inkex/command.py
|
share/inkscape/extensions/inkex/command.py
|
||||||
share/inkscape/extensions/inkex/css/
|
share/inkscape/extensions/inkex/css/
|
||||||
share/inkscape/extensions/inkex/css/__init__.py
|
share/inkscape/extensions/inkex/css/__init__.py
|
||||||
@@ -4833,6 +4831,7 @@ share/inkscape/palettes/Tango-Palette.gpl
|
|||||||
share/inkscape/palettes/Topographic.gpl
|
share/inkscape/palettes/Topographic.gpl
|
||||||
share/inkscape/palettes/Ubuntu.gpl
|
share/inkscape/palettes/Ubuntu.gpl
|
||||||
share/inkscape/palettes/echo-palette.gpl
|
share/inkscape/palettes/echo-palette.gpl
|
||||||
|
share/inkscape/palettes/elementary.gpl
|
||||||
share/inkscape/palettes/inkscape.gpl
|
share/inkscape/palettes/inkscape.gpl
|
||||||
share/inkscape/palettes/svg.gpl
|
share/inkscape/palettes/svg.gpl
|
||||||
share/inkscape/palettes/webhex.gpl
|
share/inkscape/palettes/webhex.gpl
|
||||||
@@ -5364,6 +5363,7 @@ share/inkscape/tutorials/tutorial-tracing-pixelart.sl.svg
|
|||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.sr.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.sr.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.sv.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.sv.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.svg
|
||||||
|
share/inkscape/tutorials/tutorial-tracing-pixelart.tr.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.uk.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.uk.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.zh_CN.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.zh_CN.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing-pixelart.zh_TW.svg
|
share/inkscape/tutorials/tutorial-tracing-pixelart.zh_TW.svg
|
||||||
@@ -5390,6 +5390,7 @@ share/inkscape/tutorials/tutorial-tracing.sl.svg
|
|||||||
share/inkscape/tutorials/tutorial-tracing.sr.svg
|
share/inkscape/tutorials/tutorial-tracing.sr.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing.sv.svg
|
share/inkscape/tutorials/tutorial-tracing.sv.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing.svg
|
share/inkscape/tutorials/tutorial-tracing.svg
|
||||||
|
share/inkscape/tutorials/tutorial-tracing.tr.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing.uk.svg
|
share/inkscape/tutorials/tutorial-tracing.uk.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing.vi.svg
|
share/inkscape/tutorials/tutorial-tracing.vi.svg
|
||||||
share/inkscape/tutorials/tutorial-tracing.zh_CN.svg
|
share/inkscape/tutorials/tutorial-tracing.zh_CN.svg
|
||||||
|
|||||||
Reference in New Issue
Block a user