[poppler] 2 commits - poppler/CairoFontEngine.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Mar 7 14:28:58 UTC 2022
poppler/CairoFontEngine.cc | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
New commits:
commit 773e2d4a42757c440855f6260b9dcf15cf85a74a
Author: Oliver Sander <oliver.sander at tu-dresden.de>
Date: Mon Mar 7 14:29:32 2022 +0100
Let type3_font_info_t have a constructor that takes all information
diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc
index 2133a77c..1c892165 100644
--- a/poppler/CairoFontEngine.cc
+++ b/poppler/CairoFontEngine.cc
@@ -550,6 +550,8 @@ static const cairo_user_data_key_t type3_font_key = { 0 };
typedef struct _type3_font_info
{
+ _type3_font_info(GfxFont *fontA, PDFDoc *docA, CairoFontEngine *fontEngineA, bool printingA, XRef *xrefA) : font(fontA), doc(docA), fontEngine(fontEngineA), printing(printingA), xref(xrefA) { }
+
GfxFont *font;
PDFDoc *doc;
CairoFontEngine *fontEngine;
@@ -667,17 +669,12 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontE
char *name;
charProcs = ((Gfx8BitFont *)gfxFont)->getCharProcs();
- type3_font_info_t *info = new type3_font_info_t();
ref = *gfxFont->getID();
font_face = cairo_user_font_face_create();
cairo_user_font_face_set_init_func(font_face, _init_type3_glyph);
cairo_user_font_face_set_render_glyph_func(font_face, _render_type3_glyph);
gfxFont->incRefCnt();
- info->font = gfxFont;
- info->doc = doc;
- info->fontEngine = fontEngine;
- info->printing = printing;
- info->xref = xref;
+ type3_font_info_t *info = new type3_font_info_t(gfxFont, doc, fontEngine, printing, xref);
cairo_font_face_set_user_data(font_face, &type3_font_key, (void *)info, _free_type3_font_info);
commit 47ba2b0dfc7a997ba159a39769ff0edf99e08cdc
Author: Oliver Sander <oliver.sander at tu-dresden.de>
Date: Mon Mar 7 14:22:12 2022 +0100
Use new/delete for class type3_font_info_t
In a later commit I want to change type3_font_info_t and make it
contain types with non-trivial destructors. However, these
destructors are only called when the destructor of type3_font_info_t
is called. And this only happens if type3_font_info_t is deleted
with 'delete', not with 'free'.
diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc
index 976f6622..2133a77c 100644
--- a/poppler/CairoFontEngine.cc
+++ b/poppler/CairoFontEngine.cc
@@ -31,7 +31,7 @@
// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
// Copyright (C) 2019 Christian Persch <chpe at src.gnome.org>
// Copyright (C) 2020 Michal <sudolskym at gmail.com>
-// Copyright (C) 2021 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2021, 2022 Oliver Sander <oliver.sander at tu-dresden.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -562,7 +562,7 @@ static void _free_type3_font_info(void *closure)
type3_font_info_t *info = (type3_font_info_t *)closure;
info->font->decRefCnt();
- free(info);
+ delete info;
}
static cairo_status_t _init_type3_glyph(cairo_scaled_font_t *scaled_font, cairo_t *cr, cairo_font_extents_t *extents)
@@ -657,7 +657,6 @@ static cairo_status_t _render_type3_glyph(cairo_scaled_font_t *scaled_font, unsi
CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontEngine *fontEngine, bool printing, XRef *xref)
{
- type3_font_info_t *info;
cairo_font_face_t *font_face;
Ref ref;
int *codeToGID;
@@ -668,7 +667,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontE
char *name;
charProcs = ((Gfx8BitFont *)gfxFont)->getCharProcs();
- info = (type3_font_info_t *)malloc(sizeof(*info));
+ type3_font_info_t *info = new type3_font_info_t();
ref = *gfxFont->getID();
font_face = cairo_user_font_face_create();
cairo_user_font_face_set_init_func(font_face, _init_type3_glyph);
More information about the poppler
mailing list