From 7024480b84ec1ef7ba4d371a51511bd04c48e816 Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Sun, 24 Mar 2024 21:23:07 -0400 Subject: Use shared pointer in APAttachment::get_pixmap() Necessary as the pixmap may be deleted at any moment if another caller requests a differently sized pixmap. --- src/activitypub/apattachment.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/activitypub/apattachment.cpp') diff --git a/src/activitypub/apattachment.cpp b/src/activitypub/apattachment.cpp index db305ba..83d0bea 100644 --- a/src/activitypub/apattachment.cpp +++ b/src/activitypub/apattachment.cpp @@ -1,6 +1,7 @@ #include "apattachment.h" #include #include +#include APAttachment::APAttachment() {} @@ -29,11 +30,11 @@ QString APAttachment::get_html_render(HtmlRenderDetails info) { return html; } -const QPixmap& APAttachment::get_pixmap(int width, int height) { - // Recreating the pixmap if it doesn't have the requested dimensions is quite inefficent. So it's better for the callee to resize the image instead of relying on this function. - if (pixmap and pixmap_dimens.is_equal(width, height)) return *pixmap; +std::shared_ptr APAttachment::get_pixmap(int width, int height) { + // Recreating the pixmap if it doesn't have the requested dimensions is quite inefficent. So it's better for the callee to scale elsewhere the pixmap instead of relying on this function, if possible. + if (pixmap and pixmap_dimens.is_equal(width, height)) return pixmap; else if (pixmap) - delete pixmap; + pixmap.reset(); // pixmap_dimens are correctly based on the requested/function argument width and height, and not the actual dimentions of the pixmap! pixmap_dimens.height = height; @@ -52,13 +53,13 @@ const QPixmap& APAttachment::get_pixmap(int width, int height) { else if (width == 0) width = (height * image.width()) / image.height(); - pixmap = new QPixmap(image.scaled(QSize(width, height))); + pixmap = std::make_shared(image.scaled(QSize(width, height))); } else { - pixmap = new QPixmap; + pixmap = std::make_shared(); if (not pixmap->load(path_url)) qDebug() << "failed to load" << path_url; } - return *pixmap; + return pixmap; } QString APAttachmentList::get_html_render(HtmlRenderDetails render_info) { -- cgit v1.2.3-54-g00ecf