]> git.sur5r.net Git - i3/i3/blobdiff - i3bar/include/outputs.h
Use separate buffers for i3bar statusline for each workspace, track short and long...
[i3/i3] / i3bar / include / outputs.h
index 73fbf33f32caf5a9ad674a0f18ebd3e903850797..ec09e764725d84b756543842ce67d04d2aea26cb 100644 (file)
@@ -2,7 +2,7 @@
  * vim:ts=4:sw=4:expandtab
  *
  * i3bar - an xcb-based status- and ws-bar for i3
- * © 2010-2012 Axel Wagner and contributors (see also: LICENSE)
+ * © 2010 Axel Wagner and contributors (see also: LICENSE)
  *
  * outputs.c: Maintaining the outputs list
  *
 #pragma once
 
 #include <xcb/xcb.h>
+#include <cairo/cairo-xcb.h>
 
 #include "common.h"
+#include "draw_util.h"
 
 typedef struct i3_output i3_output;
 
@@ -44,9 +46,16 @@ struct i3_output {
     int ws;       /* The number of the currently visible ws */
     rect rect;    /* The rect (relative to the root window) */
 
-    xcb_window_t bar;     /* The id of the bar of the output */
-    xcb_pixmap_t buffer;  /* An extra pixmap for double-buffering */
-    xcb_gcontext_t bargc; /* The graphical context of the bar */
+    /* Off-screen buffer for preliminary rendering of the bar. */
+    surface_t buffer;
+    /* Off-screen buffer for pre-rendering the statusline, separated to make clipping easier. */
+    surface_t statusline_buffer;
+    /* How much of statusline_buffer's horizontal space was used on last statusline render. */
+    int statusline_width;
+    /* Whether statusline block short texts where used on last statusline render. */
+    bool statusline_short_text;
+    /* The actual window on which we draw. */
+    surface_t bar;
 
     struct ws_head* workspaces;  /* The workspaces on this output */
     struct tc_head* trayclients; /* The tray clients on this output */