Some cleanup in Label.cpp
All checks were successful
Build ptprnt / build (push) Successful in 4m15s

This commit is contained in:
2025-10-15 18:45:05 +02:00
parent f7661a813d
commit 25720aaa0a

View File

@@ -36,7 +36,6 @@
#include "pango/pango-font.h"
#include "pango/pango-layout.h"
#include "pango/pango-types.h"
#include "pango/pangocairo.h"
namespace ptprnt::graphics {
@@ -61,16 +60,12 @@ Label::Label(const uint16_t heightPixel) : Label(heightPixel, std::make_shared<C
// Constructor with dependency injection
Label::Label(const uint16_t heightPixel, std::shared_ptr<ICairoWrapper> cairoWrapper)
: mCairoWrapper(std::move(cairoWrapper)),
mPrinterHeight(heightPixel) {
: mCairoWrapper(std::move(cairoWrapper)), mPrinterHeight(heightPixel) {
// Initialize resources in correct order with RAII
// Pass wrapper to deleter so cleanup uses the wrapper
GObjectDeleter deleter;
deleter.wrapper = mCairoWrapper;
mFontMap = std::unique_ptr<PangoFontMap, GObjectDeleter>(
mCairoWrapper->pango_cairo_font_map_new(),
deleter
);
mFontMap = std::unique_ptr<PangoFontMap, GObjectDeleter>(mCairoWrapper->pango_cairo_font_map_new(), deleter);
}
std::vector<uint8_t> Label::getRaw() const {
@@ -183,8 +178,6 @@ bool Label::create(const std::string& labelText) {
mLayoutHeight /= PANGO_SCALE;
spdlog::debug("Layout width: {}, height: {}", mLayoutWidth, mLayoutHeight);
//auto alignedWidth = mLayoutWidth + (8 - (mLayoutWidth % 8));
//spdlog::debug("Aligned Layout width: {}, height: {}", alignedWidth, mLayoutHeight);
// Clean up temporary resources
mCairoWrapper->g_object_unref(tempPangoLyt);
@@ -202,19 +195,13 @@ bool Label::create(const std::string& labelText) {
gobjectDeleter.wrapper = mCairoWrapper;
mSurface = std::unique_ptr<cairo_surface_t, CairoSurfaceDeleter>(
mCairoWrapper->cairo_image_surface_create(CAIRO_FORMAT_A8, mLayoutWidth, mPrinterHeight),
surfaceDeleter
);
mCairoWrapper->cairo_image_surface_create(CAIRO_FORMAT_A8, mLayoutWidth, mPrinterHeight), surfaceDeleter);
cairo_t* cr = mCairoWrapper->cairo_create(mSurface.get());
mCairoCtx = std::unique_ptr<cairo_t, CairoDeleter>(cr, cairoDeleter);
mPangoCtx = std::unique_ptr<PangoContext, GObjectDeleter>(
mCairoWrapper->pango_cairo_create_context(cr),
gobjectDeleter
);
mPangoLyt = std::unique_ptr<PangoLayout, GObjectDeleter>(
mCairoWrapper->pango_layout_new(mPangoCtx.get()),
gobjectDeleter
);
mPangoCtx =
std::unique_ptr<PangoContext, GObjectDeleter>(mCairoWrapper->pango_cairo_create_context(cr), gobjectDeleter);
mPangoLyt =
std::unique_ptr<PangoLayout, GObjectDeleter>(mCairoWrapper->pango_layout_new(mPangoCtx.get()), gobjectDeleter);
// Configure final layout with same settings
configureLayout(mPangoLyt.get(), labelText, regularFont);
@@ -274,8 +261,7 @@ bool Label::append(const ILabel& other, uint32_t spacingPx) {
CairoSurfaceDeleter surfaceDeleter;
surfaceDeleter.wrapper = mCairoWrapper;
auto newSurface = std::unique_ptr<cairo_surface_t, CairoSurfaceDeleter>(
mCairoWrapper->cairo_image_surface_create(CAIRO_FORMAT_A8, newWidth, height),
surfaceDeleter);
mCairoWrapper->cairo_image_surface_create(CAIRO_FORMAT_A8, newWidth, height), surfaceDeleter);
if (mCairoWrapper->cairo_surface_status(newSurface.get()) != CAIRO_STATUS_SUCCESS) {
spdlog::error("Failed to create new surface for appended label");