diff --git a/plug-ins/pdf/pdf-import.cpp b/plug-ins/pdf/pdf-import.cpp index 189737908..a2a479693 100644 --- a/plug-ins/pdf/pdf-import.cpp +++ b/plug-ins/pdf/pdf-import.cpp @@ -152,12 +152,12 @@ public : void updateLineDash (GfxState *state) { - double *dashPattern; - int dashLength; - double dashStart; - - state->getLineDash (&dashPattern, &dashLength, &dashStart); - this->dash_length = dashLength ? dashPattern[0] * scale : 1.0; + const double *dashPattern=NULL; + int dashLength=0; + double dashStart=0; + const std::vector &dash = state->getLineDash(&dashStart); // > Poppler 22.09 ... + dashPattern = dash.data(); + dashLength = dash.size(); if (dashLength == 0) this->line_style = DIA_LINE_STYLE_SOLID; @@ -318,10 +318,11 @@ public : //FIXME: Dia is really unhappy about zero size fonts if (!(state->getFontSize() > 0.0)) return; - GfxFont *f = state->getFont(); + const std::shared_ptr f = state->getFont(); // poppler 22.05 ... header changed + gconstpointer f1 = &f; // GLib typedef const void * gconstpointer; // instead of building the same font over and over again - if (g_hash_table_lookup (this->font_map, f)) { + if (g_hash_table_lookup (this->font_map, f1)) { ++font_map_hits; return; } @@ -333,8 +334,9 @@ public : gchar *family = g_strdup (f->getFamily() ? f->getFamily()->c_str() : "sans"); // we are (not anymore) building the same font over and over again + f1 = &f; g_print ("Font 0x%x: '%s' size=%g (* %g)\n", - GPOINTER_TO_INT (f), family, state->getTransformedFontSize(), scale); + GPOINTER_TO_INT (f1), family, state->getTransformedFontSize(), scale); // now try to make a fontname Dia/Pango can cope with // strip style postfix - we already have extracted the style bits above @@ -354,7 +356,9 @@ public : fsize *= fabs(fm[3] / fm[0]); font = dia_font_new (family, style, fsize * scale / 0.8); - g_hash_table_insert (this->font_map, f, font); + f1 = &f; + gpointer f2 = (gpointer)f1; // GLib typedef void* gpointer; + g_hash_table_insert (this->font_map, f2, font); g_free (family); } void updateTextShift(GfxState *state, double shift) @@ -721,11 +725,12 @@ DiaOutputDev::drawString(GfxState *state, GooString *s) return; if (!(state->getFontSize() > 0.0)) return; - font = (DiaFont *)g_hash_table_lookup (this->font_map, state->getFont()); + gconstpointer f_1 = &state->getFont(); + font = (DiaFont *)g_hash_table_lookup (this->font_map, f_1); // we have to decode the string data first { - GfxFont *f = state->getFont(); + const std::shared_ptr f = state->getFont(); const char *p = s->c_str(); CharCode code; int j = 0, m, n; @@ -870,8 +875,8 @@ import_pdf(const gchar *filename, DiagramData *dia, DiaContext *ctx, void* user_ std::unique_ptr doc; GooString *fileName = new GooString(filename); // no passwords yet - GooString *ownerPW = NULL; - GooString *userPW = NULL; + const std::optional ownerPW; + const std::optional userPW; gboolean ret = FALSE; // without this we will get strange crashes (at least with /O2 build) @@ -899,6 +904,7 @@ import_pdf(const gchar *filename, DiagramData *dia, DiaContext *ctx, void* user_ delete diaOut; ret = TRUE; } + doc.reset(); delete fileName; return ret;