Turn a wibox' bg_image into a cairo surface

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2010-08-20 14:18:20 +02:00
parent 6dfaa0fd76
commit 8fbffcd2fb
3 changed files with 19 additions and 7 deletions

View File

@ -83,6 +83,8 @@ wibox_wipe(wibox_t *wibox)
p_delete(&wibox->cursor); p_delete(&wibox->cursor);
wibox_wipe_resources(wibox); wibox_wipe_resources(wibox);
widget_node_array_wipe(&wibox->widgets); widget_node_array_wipe(&wibox->widgets);
if(wibox->bg_image)
cairo_surface_destroy(wibox->bg_image);
} }
/** Wipe an array of widget_node. Release references to widgets. /** Wipe an array of widget_node. Release references to widgets.
@ -938,11 +940,19 @@ luaA_wibox_get_bg(lua_State *L, wibox_t *wibox)
static int static int
luaA_wibox_set_bg_image(lua_State *L, wibox_t *wibox) luaA_wibox_set_bg_image(lua_State *L, wibox_t *wibox)
{ {
luaA_checkudata(L, -1, &image_class); if(lua_isnil(L, -1))
luaA_object_unref_item(L, -3, wibox->bg_image); {
wibox->bg_image = luaA_object_ref_item(L, -3, -1); if(wibox->bg_image)
cairo_surface_destroy(wibox->bg_image);
wibox->bg_image = NULL;
} else {
cairo_surface_t *surface = luaA_image_to_surface(L, -1);
if(wibox->bg_image)
cairo_surface_destroy(wibox->bg_image);
wibox->bg_image = surface;
}
wibox->need_update = true; wibox->need_update = true;
luaA_object_emit_signal(L, -2, "property::bg_image", 0); luaA_object_emit_signal(L, -3, "property::bg_image", 0);
return 0; return 0;
} }
@ -954,7 +964,9 @@ luaA_wibox_set_bg_image(lua_State *L, wibox_t *wibox)
static int static int
luaA_wibox_get_bg_image(lua_State *L, wibox_t *wibox) luaA_wibox_get_bg_image(lua_State *L, wibox_t *wibox)
{ {
return luaA_object_push_item(L, 1, wibox->bg_image); if(wibox->bg_image)
return oocairo_surface_push(L, wibox->bg_image);
return 0;
} }
/** Set the wibox on top status. /** Set the wibox on top status.

View File

@ -44,7 +44,7 @@ struct wibox_t
/** Cursor */ /** Cursor */
char *cursor; char *cursor;
/** Background image */ /** Background image */
image_t *bg_image; cairo_surface_t *bg_image;
/** The pixmap copied to the window object. */ /** The pixmap copied to the window object. */
xcb_pixmap_t pixmap; xcb_pixmap_t pixmap;
/** The window geometry. */ /** The window geometry. */

View File

@ -332,7 +332,7 @@ widget_render(wibox_t *wibox)
/* draw background image, only if the background color is not opaque */ /* draw background image, only if the background color is not opaque */
if(wibox->bg_image && ctx->bg.alpha != 0xffff) if(wibox->bg_image && ctx->bg.alpha != 0xffff)
draw_image(ctx, 0, 0, 1.0, wibox->bg_image); draw_surface(ctx, 0, 0, 1.0, wibox->bg_image);
/* draw background color */ /* draw background color */
xcolor_to_color(&ctx->bg, &col); xcolor_to_color(&ctx->bg, &col);