Drawin: Add bg_color property

We actually have to set a proper background color on all our drawins, else the
default black will "flicker through" while the window is drawn.

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2010-12-12 21:14:04 +01:00
parent b833ae75eb
commit 1076a6ea47
2 changed files with 33 additions and 1 deletions

View File

@ -144,7 +144,7 @@ drawin_init(drawin_t *w)
| XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK | XCB_CW_COLORMAP,
(const uint32_t [])
{
s->black_pixel,
w->bg_color.pixel,
w->border_color.pixel,
XCB_GRAVITY_NORTH_WEST,
1,
@ -472,9 +472,34 @@ luaA_drawin_geometry(lua_State *L)
return luaA_pusharea(L, drawin->geometry);
}
/** Set the drawin background color.
* \param L The Lua VM state.
* \param drawin The drawin object.
* \return The number of elements pushed on stack.
*/
static int
luaA_drawin_set_bg_color(lua_State *L, drawin_t *drawin)
{
size_t len;
const char *color_name = luaL_checklstring(L, -1, &len);
if(color_name &&
color_init_reply(color_init_unchecked(&drawin->bg_color, color_name, len)))
{
if (drawin->window != XCB_NONE)
xcb_change_window_attributes(globalconf.connection, drawin->window,
XCB_CW_BACK_PIXEL, &drawin->bg_color.pixel);
luaA_object_emit_signal(L, -3, "property::bg_color", 0);
}
return 0;
}
LUA_OBJECT_EXPORT_PROPERTY(drawin, drawin_t, ontop, lua_pushboolean)
LUA_OBJECT_EXPORT_PROPERTY(drawin, drawin_t, cursor, lua_pushstring)
LUA_OBJECT_EXPORT_PROPERTY(drawin, drawin_t, visible, lua_pushboolean)
LUA_OBJECT_EXPORT_PROPERTY(drawin, drawin_t, bg_color, luaA_pushcolor)
static int
luaA_drawin_set_x(lua_State *L, drawin_t *drawin)
@ -724,6 +749,10 @@ drawin_class_setup(lua_State *L)
(lua_class_propfunc_t) luaA_drawin_set_height,
(lua_class_propfunc_t) luaA_drawin_get_height,
(lua_class_propfunc_t) luaA_drawin_set_height);
luaA_class_add_property(&window_class, "bg_color",
(lua_class_propfunc_t) luaA_drawin_set_bg_color,
(lua_class_propfunc_t) luaA_drawin_get_bg_color,
(lua_class_propfunc_t) luaA_drawin_set_bg_color);
luaA_class_add_property(&drawin_class, "type",
(lua_class_propfunc_t) luaA_window_set_type,
(lua_class_propfunc_t) luaA_window_get_type,
@ -731,6 +760,7 @@ drawin_class_setup(lua_State *L)
signal_add(&drawin_class.signals, "mouse::enter");
signal_add(&drawin_class.signals, "mouse::leave");
signal_add(&drawin_class.signals, "property::bg_color");
signal_add(&drawin_class.signals, "property::border_width");
signal_add(&drawin_class.signals, "property::cursor");
signal_add(&drawin_class.signals, "property::height");

View File

@ -37,6 +37,8 @@ struct drawin_t
bool visible;
/** Cursor */
char *cursor;
/** Background color */
color_t bg_color;
/** The pixmap copied to the window object. */
xcb_pixmap_t pixmap;
/** Surface for drawing to the pixmap. */