summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Jones <philj56@gmail.com>2022-06-10 14:31:54 +0100
committerPhil Jones <philj56@gmail.com>2022-06-10 14:31:54 +0100
commitee0cd76769d395ce99fad6b76622cfeff714b0f5 (patch)
treeac1ef98d8c229ae61210b78bd0df3d1565c94807
parent6ae1fc396820cba2bf0f0c2c51e892fd9d78eaed (diff)
Remove unneeded Pango layouts.
We don't actually need a separate pango layout for each piece of text, as we only use them one-by-one anyway, so just use one instead.
-rw-r--r--src/entry_backend/pango.c34
-rw-r--r--src/entry_backend/pango.h4
2 files changed, 11 insertions, 27 deletions
diff --git a/src/entry_backend/pango.c b/src/entry_backend/pango.c
index 4d43ce3..e115317 100644
--- a/src/entry_backend/pango.c
+++ b/src/entry_backend/pango.c
@@ -24,20 +24,20 @@ void entry_backend_init(struct entry *entry, uint32_t *width, uint32_t *height,
pango_context_set_font_description(context, font_description);
pango_font_description_free(font_description);
- entry->backend.prompt_layout = pango_layout_new(context);
+ entry->backend.layout = pango_layout_new(context);
log_debug("Setting Pango text.\n");
- pango_layout_set_text(entry->backend.prompt_layout, "run: ", -1);
+ pango_layout_set_text(entry->backend.layout, "run: ", -1);
int prompt_width;
int prompt_height;
log_debug("Get Pango pixel size.\n");
- pango_layout_get_pixel_size(entry->backend.prompt_layout, &prompt_width, &prompt_height);
+ pango_layout_get_pixel_size(entry->backend.layout, &prompt_width, &prompt_height);
log_debug("First Pango draw.\n");
- pango_cairo_update_layout(cr, entry->backend.prompt_layout);
+ pango_cairo_update_layout(cr, entry->backend.layout);
/* Draw the prompt now, as this only needs to be done once */
struct color color = entry->foreground_color;
cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
- pango_cairo_show_layout(cr, entry->backend.prompt_layout);
+ pango_cairo_show_layout(cr, entry->backend.layout);
/* Move and clip so we don't draw over the prompt */
cairo_translate(cr, prompt_width, 0);
@@ -45,40 +45,26 @@ void entry_backend_init(struct entry *entry, uint32_t *width, uint32_t *height,
cairo_rectangle(cr, 0, 0, *width, *height);
cairo_clip(cr);
- log_debug("Creating Pango layout.\n");
- entry->backend.entry_layout = pango_layout_new(context);
- pango_layout_set_text(entry->backend.entry_layout, "", -1);
-
- for (size_t i = 0; i < 5; i++) {
- PangoLayout *layout = pango_layout_new(context);
- pango_layout_set_text(layout, "", -1);
- entry->backend.result_layouts[i] = layout;
- }
-
entry->backend.context = context;
}
void entry_backend_destroy(struct entry *entry)
{
- for (size_t i = 0; i < 5; i++) {
- g_object_unref(entry->backend.result_layouts[i]);
- }
- g_object_unref(entry->backend.entry_layout);
- g_object_unref(entry->backend.prompt_layout);
+ g_object_unref(entry->backend.layout);
g_object_unref(entry->backend.context);
}
void entry_backend_update(struct entry *entry)
{
cairo_t *cr = entry->cairo[entry->index].cr;
+ PangoLayout *layout = entry->backend.layout;
- pango_layout_set_text(entry->backend.entry_layout, entry->input_mb, -1);
- pango_cairo_update_layout(cr, entry->backend.entry_layout);
- pango_cairo_show_layout(cr, entry->backend.entry_layout);
+ pango_layout_set_text(layout, entry->input_mb, -1);
+ pango_cairo_update_layout(cr, layout);
+ pango_cairo_show_layout(cr, layout);
for (size_t i = 0; i < 5; i++) {
cairo_translate(cr, 0, 50);
- PangoLayout *layout = entry->backend.result_layouts[i];
const char *str;
if (i < entry->results.count) {
str = entry->results.buf[i];
diff --git a/src/entry_backend/pango.h b/src/entry_backend/pango.h
index ef58be3..67b199f 100644
--- a/src/entry_backend/pango.h
+++ b/src/entry_backend/pango.h
@@ -7,9 +7,7 @@ struct entry;
struct entry_backend {
PangoContext *context;
- PangoLayout *prompt_layout;
- PangoLayout *entry_layout;
- PangoLayout *result_layouts[5];
+ PangoLayout *layout;
};
void entry_backend_init(struct entry *entry, uint32_t *width, uint32_t *height, uint32_t scale);