And use a buffer in the drawing stuff.
So that we don't stupidly call even more strlen's. Signed-off-by: Pierre Habouzit <madcoder@debian.org>
This commit is contained in:
parent
3fb0b5127e
commit
0ad600ef0a
|
@ -200,7 +200,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
xcb_connection_t *connection;
|
xcb_connection_t *connection;
|
||||||
int phys_screen;
|
int phys_screen;
|
||||||
char *text;
|
buffer_t text;
|
||||||
alignment_t align;
|
alignment_t align;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -261,7 +261,8 @@ draw_text_markup_expand(draw_parser_data_t *data,
|
||||||
data->margin.right = atoi(p->attribute_values[2][i]);
|
data->margin.right = atoi(p->attribute_values[2][i]);
|
||||||
|
|
||||||
/* stole text */
|
/* stole text */
|
||||||
data->text = buffer_detach(&p->text);
|
data->text = p->text;
|
||||||
|
buffer_init(&p->text);
|
||||||
markup_parser_data_delete(&p);
|
markup_parser_data_delete(&p);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -288,10 +289,12 @@ draw_text(draw_context_t *ctx, font_t *font,
|
||||||
p_clear(&parser_data, 1);
|
p_clear(&parser_data, 1);
|
||||||
parser_data.connection = ctx->connection;
|
parser_data.connection = ctx->connection;
|
||||||
parser_data.phys_screen = ctx->phys_screen;
|
parser_data.phys_screen = ctx->phys_screen;
|
||||||
if(draw_text_markup_expand(&parser_data, text, len))
|
if(draw_text_markup_expand(&parser_data, text, len)) {
|
||||||
text = parser_data.text;
|
text = parser_data.text.s;
|
||||||
|
len = parser_data.text.len;
|
||||||
|
}
|
||||||
|
|
||||||
len = olen = a_strlen(text);
|
olen = len;
|
||||||
|
|
||||||
if(parser_data.has_bg_color)
|
if(parser_data.has_bg_color)
|
||||||
draw_rectangle(ctx, area, 1.0, true, parser_data.bg_color);
|
draw_rectangle(ctx, area, 1.0, true, parser_data.bg_color);
|
||||||
|
@ -351,7 +354,7 @@ draw_text(draw_context_t *ctx, font_t *font,
|
||||||
pango_cairo_update_layout(ctx->cr, ctx->layout);
|
pango_cairo_update_layout(ctx->cr, ctx->layout);
|
||||||
pango_cairo_show_layout(ctx->cr, ctx->layout);
|
pango_cairo_show_layout(ctx->cr, ctx->layout);
|
||||||
|
|
||||||
p_delete(&parser_data.text);
|
buffer_wipe(&parser_data.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Setup color-source for cairo (gradient or mono).
|
/** Setup color-source for cairo (gradient or mono).
|
||||||
|
@ -985,10 +988,10 @@ draw_text_extents(xcb_connection_t *conn, int phys_screen, font_t *font, const c
|
||||||
p_clear(&parser_data, 1);
|
p_clear(&parser_data, 1);
|
||||||
parser_data.connection = conn;
|
parser_data.connection = conn;
|
||||||
parser_data.phys_screen = phys_screen;
|
parser_data.phys_screen = phys_screen;
|
||||||
if(draw_text_markup_expand(&parser_data, text, len))
|
if(draw_text_markup_expand(&parser_data, text, len)) {
|
||||||
text = parser_data.text;
|
text = parser_data.text.s;
|
||||||
|
len = parser_data.text.len;
|
||||||
len = a_strlen(text);
|
}
|
||||||
|
|
||||||
surface = cairo_xcb_surface_create(conn, phys_screen,
|
surface = cairo_xcb_surface_create(conn, phys_screen,
|
||||||
draw_screen_default_visual(s),
|
draw_screen_default_visual(s),
|
||||||
|
@ -1007,7 +1010,7 @@ draw_text_extents(xcb_connection_t *conn, int phys_screen, font_t *font, const c
|
||||||
geom.width = ext.width;
|
geom.width = ext.width;
|
||||||
geom.height = ext.height * 1.5;
|
geom.height = ext.height * 1.5;
|
||||||
|
|
||||||
p_delete(&parser_data.text);
|
buffer_wipe(&parser_data.text);
|
||||||
return geom;
|
return geom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue