Enhance libi3 and use it in i3bar.

Abstracted draw_text and predict_text_width into libi3. Use
predict_text_width from libi3 in i3 too. This required tracking
xcb_connection in a xcb_connection_t *conn variable that libi3
expects to be available in i3bar.
This commit is contained in:
Fernando Tarlá Cardoso Lemos
2011-11-13 17:19:42 -02:00
committed by Michael Stapelberg
parent 70151ea238
commit 5c2088c87e
11 changed files with 307 additions and 262 deletions

View File

@ -130,32 +130,6 @@ void xcb_raise_window(xcb_connection_t *conn, xcb_window_t window) {
xcb_configure_window(conn, window, XCB_CONFIG_WINDOW_STACK_MODE, values);
}
/*
* Query the width of the given text (16-bit characters, UCS) with given real
* length (amount of glyphs) using the given font.
*
*/
int predict_text_width(const xcb_char2b_t *text, int length) {
xcb_query_text_extents_cookie_t cookie;
xcb_query_text_extents_reply_t *reply;
xcb_generic_error_t *error;
int width;
cookie = xcb_query_text_extents(conn, config.font.id, length, text);
if ((reply = xcb_query_text_extents_reply(conn, cookie, &error)) == NULL) {
ELOG("Could not get text extents (X error code %d)\n",
error->error_code);
/* We return the rather safe guess of 7 pixels, because a
* rendering error is better than a crash. Plus, the user will
* see the error in his log. */
return 7;
}
width = reply->overall_width;
free(reply);
return width;
}
/*
* Configures the given window to have the size/position specified by given rect
*