https://gitlab.com/inkscape/inkscape/-/merge_requests/7321 From 7f4f106b5438be1546052ebeebcfe3e8196d5884 Mon Sep 17 00:00:00 2001 From: KrIr17 Date: Sun, 6 Jul 2025 15:42:13 +0200 Subject: [PATCH] Fix building with Poppler 25.07.0 Fix building issues with 1. [`GfxState::shift()`](https://gitlab.freedesktop.org/poppler/poppler/-/commit/71bf5552d448a6fdb666f2b61764b61ca197617d) 2. [`FoFiTrueType::make` and `FoFiType1C::make`](FoFiTrueType::make) 3. Fix typo from 5c4c6d116dae5250d75d34a45f0d9220824d2e20 --- src/extension/internal/pdfinput/pdf-parser.cpp | 4 ++-- .../pdfinput/poppler-cairo-font-engine.cpp | 16 +++++++++++----- .../internal/pdfinput/poppler-transition-api.h | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index f46d12f72e5..4071e464a44 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -2322,11 +2322,11 @@ void PdfParser::doShowText(GooString *s) { state->textTransformDelta(originX, originY, &tOriginX, &tOriginY); // In Gfx.cc this is drawChar(...) - builder->addChar(state, state->getCurX() + riseX, state->getCurY() + riseY, + builder->addChar(state, state->_POPPLER_GET_CUR_TEXT_X() + riseX, state->_POPPLER_GET_CUR_TEXT_Y() + riseY, dx, dy, tOriginX, tOriginY, code, n, u, uLen); // Move onto next unicode character. - state->shift(tdx, tdy); + state->_POPPLER_TEXT_SHIFT_WITH_USER_COORDS(tdx, tdy); p += n; len -= n; } diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp index bd1d4e49367..cfc6961f629 100644 --- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp +++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp @@ -316,7 +316,11 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li #endif char **enc; const char *name; +#if POPPLER_CHECK_VERSION(25, 7, 0) + std::unique_ptr ff1c; +#else FoFiType1C *ff1c; +#endif std::optional font_face; std::vector codeToGID; bool substitute = false; @@ -427,7 +431,7 @@ 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(), 0); + ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0); } else { ff = FoFiTrueType::load(fileName.c_str(), 0); } @@ -457,7 +461,7 @@ 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(), 0); + ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0); } else { ff = FoFiTrueType::load(fileName.c_str(), 0); } @@ -491,7 +495,7 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li case fontCIDType0C: if (!useCIDs) { if (!font_data.empty()) { - ff1c = FoFiType1C::make((fontchar)font_data.data(), font_data.size()); + ff1c = _POPPLER_FOFI_TYPE1C_MAKE(font_data); } else { ff1c = FoFiType1C::load(fileName.c_str()); } @@ -504,7 +508,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li codeToGID.insert(codeToGID.begin(), src, src + n); gfree(src); #endif +#if !(POPPLER_CHECK_VERSION(25, 7, 0)) delete ff1c; +#endif } } @@ -540,13 +546,13 @@ 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(), 0); + ff = _POPPLER_FOFI_TRUETYPE_MAKE(font_data, 0); } else { ff = FoFiTrueType::load(fileName.c_str(), 0); } if (ff) { if (ff->isOpenTypeCFF()) { - auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n); + auto src = ff->_POPPLER_GET_CID_TO_GID_MAP(&n); #if POPPLER_CHECK_VERSION(25,2,0) codeToGID = std::move(src); #else diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h index d04412757bc..866b630bb67 100644 --- a/src/extension/internal/pdfinput/poppler-transition-api.h +++ b/src/extension/internal/pdfinput/poppler-transition-api.h @@ -15,6 +15,20 @@ #include #include +#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) +#define _POPPLER_FOFI_TYPE1C_MAKE(font_data) FoFiType1C::make(std::span(font_data)) +#define _POPPLER_GET_CUR_TEXT_X() getCurTextX() +#define _POPPLER_GET_CUR_TEXT_Y() getCurTextY() +#else +#define _POPPLER_TEXT_SHIFT_WITH_USER_COORDS(dx, dy) shift(dx, dy) +#define _POPPLER_FOFI_TRUETYPE_MAKE(font_data, faceIndex) FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), faceIndex) +#define _POPPLER_FOFI_TYPE1C_MAKE(font_data) FoFiType1C::make((fontchar)font_data.data(), font_data.size()) +#define _POPPLER_GET_CUR_TEXT_X() getCurX() +#define _POPPLER_GET_CUR_TEXT_Y() getCurY() +#endif + #if POPPLER_CHECK_VERSION(25, 6, 0) #define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) std::vector> name(4) #define _POPPLER_DELETE_TRANSFER_FUNCTION(name) name.reset() -- GitLab