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:
committed by
Michael Stapelberg
parent
70151ea238
commit
5c2088c87e
26
src/xcb.c
26
src/xcb.c
@ -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
|
||||
*
|
||||
|
Reference in New Issue
Block a user