diff --git a/src/font/text.cpp b/src/font/text.cpp index 56f61ff0ad21..fd8fff569723 100644 --- a/src/font/text.cpp +++ b/src/font/text.cpp @@ -645,7 +645,8 @@ void pango_text::render(PangoLayout& layout, const PangoRectangle& rect, const s cairo_format_t format = CAIRO_FORMAT_ARGB32; - unsigned char* buffer = &surface_buffer_[surface_buffer_offset]; + uint8_t* buffer = &surface_buffer_[surface_buffer_offset]; + std::unique_ptr> cairo_surface( cairo_image_surface_create_for_data(buffer, format, width, height, stride), cairo_surface_destroy); std::unique_ptr> cr(cairo_create(cairo_surface.get()), cairo_destroy); @@ -696,7 +697,7 @@ void pango_text::rerender(const bool force) this->create_surface_buffer(stride * height); - if (!surface_buffer_.size()) { + if (surface_buffer_.empty()) { surface_.assign(create_neutral_surface(0, 0)); return; } @@ -723,13 +724,11 @@ void pango_text::rerender(const bool force) void pango_text::create_surface_buffer(const size_t size) const { - // clear old buffer + // Clear surface. surface_.assign(nullptr); - surface_buffer_.resize(size); - - // Not sure why this is needed, perhaps SDL assumes it? - for (auto & c : surface_buffer_) { c = 0; } + // Resize buffer appropriately and clear all existing data (essentially sets all pixel values to 0). + surface_buffer_.assign(size, 0); } bool pango_text::set_markup(utils::string_view text, PangoLayout& layout) { diff --git a/src/font/text.hpp b/src/font/text.hpp index 507b197dc7b4..3cba4d4afdd1 100644 --- a/src/font/text.hpp +++ b/src/font/text.hpp @@ -380,7 +380,7 @@ class pango_text * data source for the SDL_Surface. This means the buffer needs to be stored * in the object, since SDL_Surface doesn't own its buffer. */ - mutable std::vector surface_buffer_; + mutable std::vector surface_buffer_; /** * Creates a new buffer.