From: Michael Stapelberg Date: Sun, 1 Mar 2009 02:55:29 +0000 (+0100) Subject: Draw stacking borders correctly X-Git-Tag: 3.a~128 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6868534fcb47433d42c76060dbea618bf443a3c0;p=i3%2Fi3 Draw stacking borders correctly --- diff --git a/src/handlers.c b/src/handlers.c index 6d3e50b5..9abea181 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -454,6 +454,15 @@ int handle_expose_event(void *data, xcb_connection_t *conn, xcb_expose_event_t * printf("handle_expose_event()\n"); if (client->container->mode != MODE_STACK) decorate_window(conn, client, client->frame, client->titlegc, 0); + else { + xcb_change_gc_single(conn, client->titlegc, XCB_GC_FOREGROUND, + get_colorpixel(conn, client, client->frame, "#285577")); + + xcb_rectangle_t rect = {0, 0, client->rect.width, client->rect.height}; + xcb_poly_fill_rectangle(conn, client->frame, client->titlegc, 1, &rect); + + xcb_flush(conn); + } return 1; } diff --git a/src/layout.c b/src/layout.c index af3d97e3..b488c9af 100644 --- a/src/layout.c +++ b/src/layout.c @@ -108,7 +108,7 @@ void decorate_window(xcb_connection_t *conn, Client *client, xcb_drawable_t draw - Draw the window’s title */ - /* Draw a green rectangle around the window */ + /* Draw a rectangle in background color around the window */ xcb_change_gc_single(conn, gc, XCB_GC_FOREGROUND, background_color); xcb_rectangle_t rect = {0, offset, client->rect.width, offset + client->rect.height}; @@ -165,17 +165,26 @@ static void resize_client(xcb_connection_t *connection, Client *client) { XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; Rect rect; - if (client->titlebar_position == TITLEBAR_OFF || - client->container->mode == MODE_STACK) { - rect.x = 0; - rect.y = 0; - rect.width = client->rect.width; - rect.height = client->rect.height; - } else { - rect.x = 2; - rect.y = font->height + 2 + 2; - rect.width = client->rect.width - (2 + 2); - rect.height = client->rect.height - ((font->height + 2 + 2) + 2); + switch (client->container->mode) { + case MODE_STACK: + rect.x = 2; + rect.y = 0; + rect.width = client->rect.width - (2 + 2); + rect.height = client->rect.height - 2; + break; + default: + if (client->titlebar_position == TITLEBAR_OFF) { + rect.x = 0; + rect.y = 0; + rect.width = client->rect.width; + rect.height = client->rect.height; + } else { + rect.x = 2; + rect.y = font->height + 2 + 2; + rect.width = client->rect.width - (2 + 2); + rect.height = client->rect.height - ((font->height + 2 + 2) + 2); + } + break; } printf("child will be at %dx%d with size %dx%d\n", rect.x, rect.y, rect.width, rect.height);