Pass cairo surface to render_layout
This commit is contained in:
parent
f513d8417f
commit
562dbe3918
14
src/draw.c
14
src/draw.c
@ -380,7 +380,7 @@ static void free_layouts(GSList *layouts)
|
|||||||
g_slist_free_full(layouts, free_colored_layout);
|
g_slist_free_full(layouts, free_colored_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dimensions layout_render(cairo_t *c, colored_layout *cl, colored_layout *cl_next, struct dimensions dim, bool first, bool last)
|
static struct dimensions layout_render(cairo_surface_t *srf, colored_layout *cl, colored_layout *cl_next, struct dimensions dim, bool first, bool last)
|
||||||
{
|
{
|
||||||
int h;
|
int h;
|
||||||
int h_text = 0;
|
int h_text = 0;
|
||||||
@ -397,6 +397,8 @@ static struct dimensions layout_render(cairo_t *c, colored_layout *cl, colored_l
|
|||||||
double bg_half_height = settings.notification_height/2.0;
|
double bg_half_height = settings.notification_height/2.0;
|
||||||
int pango_offset = (int) floor(h/2.0);
|
int pango_offset = (int) floor(h/2.0);
|
||||||
|
|
||||||
|
cairo_t *c = cairo_create(srf);
|
||||||
|
|
||||||
if (first) bg_height += settings.frame_width;
|
if (first) bg_height += settings.frame_width;
|
||||||
if (last) bg_height += settings.frame_width;
|
if (last) bg_height += settings.frame_width;
|
||||||
else bg_height += settings.separator_height;
|
else bg_height += settings.separator_height;
|
||||||
@ -476,6 +478,7 @@ static struct dimensions layout_render(cairo_t *c, colored_layout *cl, colored_l
|
|||||||
cairo_fill(c);
|
cairo_fill(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cairo_destroy(c);
|
||||||
return dim;
|
return dim;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,22 +517,18 @@ void draw(void)
|
|||||||
int height = dim.h;
|
int height = dim.h;
|
||||||
int win_x, win_y;
|
int win_x, win_y;
|
||||||
|
|
||||||
cairo_t *c;
|
|
||||||
cairo_surface_t *image_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
|
cairo_surface_t *image_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
|
||||||
c = cairo_create(image_surface);
|
|
||||||
|
|
||||||
calc_window_pos(dim.w, dim.h, &win_x, &win_y);
|
calc_window_pos(dim.w, dim.h, &win_x, &win_y);
|
||||||
x_win_move(win_x, win_y, width, height);
|
x_win_move(win_x, win_y, width, height);
|
||||||
cairo_xlib_surface_set_size(root_surface, width, height);
|
cairo_xlib_surface_set_size(root_surface, width, height);
|
||||||
|
|
||||||
cairo_move_to(c, 0, 0);
|
|
||||||
|
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (GSList *iter = layouts; iter; iter = iter->next) {
|
for (GSList *iter = layouts; iter; iter = iter->next) {
|
||||||
if (iter->next)
|
if (iter->next)
|
||||||
dim = layout_render(c, iter->data, iter->next->data, dim, first, iter->next == NULL);
|
dim = layout_render(image_surface, iter->data, iter->next->data, dim, first, iter->next == NULL);
|
||||||
else
|
else
|
||||||
dim = layout_render(c, iter->data, NULL, dim, first, iter->next == NULL);
|
dim = layout_render(image_surface, iter->data, NULL, dim, first, iter->next == NULL);
|
||||||
|
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
@ -540,7 +539,6 @@ void draw(void)
|
|||||||
|
|
||||||
XFlush(xctx.dpy);
|
XFlush(xctx.dpy);
|
||||||
|
|
||||||
cairo_destroy(c);
|
|
||||||
cairo_surface_destroy(image_surface);
|
cairo_surface_destroy(image_surface);
|
||||||
free_layouts(layouts);
|
free_layouts(layouts);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user