Skip to content
This repository has been archived by the owner on Apr 18, 2023. It is now read-only.

Commit

Permalink
Merge pull request #2065 from Airblader/feature-1278
Browse files Browse the repository at this point in the history
Migrate i3 rendering to cairo
  • Loading branch information
stapelberg committed Nov 23, 2015
2 parents 008e32f + bf442ff commit 984658e
Show file tree
Hide file tree
Showing 19 changed files with 494 additions and 385 deletions.
1 change: 0 additions & 1 deletion i3bar/include/common.h
Expand Up @@ -88,4 +88,3 @@ TAILQ_HEAD(statusline_head, status_block) statusline_head;
#include "config.h"
#include "libi3.h"
#include "parse_json_header.h"
#include "draw_util.h"
103 changes: 0 additions & 103 deletions i3bar/include/draw_util.h

This file was deleted.

1 change: 0 additions & 1 deletion i3bar/include/outputs.h
Expand Up @@ -13,7 +13,6 @@
#include <cairo/cairo-xcb.h>

#include "common.h"
#include "draw_util.h"

typedef struct i3_output i3_output;

Expand Down
40 changes: 20 additions & 20 deletions i3bar/src/xcb.c
Expand Up @@ -174,7 +174,7 @@ static void draw_separator(i3_output *output, uint32_t x, struct status_block *b
uint32_t center_x = x - sep_offset;
if (config.separator_symbol == NULL) {
/* Draw a classic one pixel, vertical separator. */
draw_util_rectangle(&output->statusline_buffer, sep_fg,
draw_util_rectangle(xcb_connection, &output->statusline_buffer, sep_fg,
center_x,
logical_px(sep_voff_px),
logical_px(1),
Expand Down Expand Up @@ -243,7 +243,7 @@ void draw_statusline(i3_output *output, uint32_t clip_left, bool use_focus_color
struct status_block *block;

color_t bar_color = (use_focus_colors ? colors.focus_bar_bg : colors.bar_bg);
draw_util_clear_surface(&output->statusline_buffer, bar_color);
draw_util_clear_surface(xcb_connection, &output->statusline_buffer, bar_color);

/* Use unsigned integer wraparound to clip off the left side.
* For example, if clip_left is 75, then x will start at the very large
Expand Down Expand Up @@ -294,13 +294,13 @@ void draw_statusline(i3_output *output, uint32_t clip_left, bool use_focus_color
}

/* Draw the border. */
draw_util_rectangle(&output->statusline_buffer, border_color,
draw_util_rectangle(xcb_connection, &output->statusline_buffer, border_color,
x, logical_px(1),
full_render_width,
bar_height - logical_px(2));

/* Draw the background. */
draw_util_rectangle(&output->statusline_buffer, bg_color,
draw_util_rectangle(xcb_connection, &output->statusline_buffer, bg_color,
x + border_width,
logical_px(1) + border_width,
full_render_width - 2 * border_width,
Expand Down Expand Up @@ -1709,9 +1709,9 @@ void reconfig_windows(bool redraw_bars) {
1,
(unsigned char *)&atoms[_NET_WM_WINDOW_TYPE_DOCK]);

draw_util_surface_init(&walk->bar, bar_id, walk->rect.w, bar_height);
draw_util_surface_init(&walk->buffer, buffer_id, walk->rect.w, bar_height);
draw_util_surface_init(&walk->statusline_buffer, statusline_buffer_id, walk->rect.w, bar_height);
draw_util_surface_init(xcb_connection, &walk->bar, bar_id, NULL, walk->rect.w, bar_height);
draw_util_surface_init(xcb_connection, &walk->buffer, buffer_id, NULL, walk->rect.w, bar_height);
draw_util_surface_init(xcb_connection, &walk->statusline_buffer, statusline_buffer_id, NULL, walk->rect.w, bar_height);

xcb_void_cookie_t strut_cookie = config_strut_partial(walk);

Expand Down Expand Up @@ -1820,12 +1820,12 @@ void reconfig_windows(bool redraw_bars) {
walk->rect.w,
bar_height);

draw_util_surface_free(&(walk->bar));
draw_util_surface_free(&(walk->buffer));
draw_util_surface_free(&(walk->statusline_buffer));
draw_util_surface_init(&(walk->bar), walk->bar.id, walk->rect.w, bar_height);
draw_util_surface_init(&(walk->buffer), walk->buffer.id, walk->rect.w, bar_height);
draw_util_surface_init(&(walk->statusline_buffer), walk->statusline_buffer.id, walk->rect.w, bar_height);
draw_util_surface_free(xcb_connection, &(walk->bar));
draw_util_surface_free(xcb_connection, &(walk->buffer));
draw_util_surface_free(xcb_connection, &(walk->statusline_buffer));
draw_util_surface_init(xcb_connection, &(walk->bar), walk->bar.id, NULL, walk->rect.w, bar_height);
draw_util_surface_init(xcb_connection, &(walk->buffer), walk->buffer.id, NULL, walk->rect.w, bar_height);
draw_util_surface_init(xcb_connection, &(walk->statusline_buffer), walk->statusline_buffer.id, NULL, walk->rect.w, bar_height);

xcb_void_cookie_t map_cookie, umap_cookie;
if (redraw_bars) {
Expand Down Expand Up @@ -1886,7 +1886,7 @@ void draw_bars(bool unhide) {
bool use_focus_colors = output_has_focus(outputs_walk);

/* First things first: clear the backbuffer */
draw_util_clear_surface(&(outputs_walk->buffer),
draw_util_clear_surface(xcb_connection, &(outputs_walk->buffer),
(use_focus_colors ? colors.focus_bar_bg : colors.bar_bg));

if (!config.disable_ws) {
Expand Down Expand Up @@ -1917,14 +1917,14 @@ void draw_bars(bool unhide) {
}

/* Draw the border of the button. */
draw_util_rectangle(&(outputs_walk->buffer), border_color,
draw_util_rectangle(xcb_connection, &(outputs_walk->buffer), border_color,
workspace_width,
logical_px(1),
ws_walk->name_width + 2 * logical_px(ws_hoff_px) + 2 * logical_px(1),
font.height + 2 * logical_px(ws_voff_px) - 2 * logical_px(1));

/* Draw the inside of the button. */
draw_util_rectangle(&(outputs_walk->buffer), bg_color,
draw_util_rectangle(xcb_connection, &(outputs_walk->buffer), bg_color,
workspace_width + logical_px(1),
2 * logical_px(1),
ws_walk->name_width + 2 * logical_px(ws_hoff_px),
Expand All @@ -1947,13 +1947,13 @@ void draw_bars(bool unhide) {
color_t fg_color = colors.binding_mode_fg;
color_t bg_color = colors.binding_mode_bg;

draw_util_rectangle(&(outputs_walk->buffer), colors.binding_mode_border,
draw_util_rectangle(xcb_connection, &(outputs_walk->buffer), colors.binding_mode_border,
workspace_width,
logical_px(1),
binding.width + 2 * logical_px(ws_hoff_px) + 2 * logical_px(1),
font.height + 2 * logical_px(ws_voff_px) - 2 * logical_px(1));

draw_util_rectangle(&(outputs_walk->buffer), bg_color,
draw_util_rectangle(xcb_connection, &(outputs_walk->buffer), bg_color,
workspace_width + logical_px(1),
2 * logical_px(1),
binding.width + 2 * logical_px(ws_hoff_px),
Expand Down Expand Up @@ -1989,7 +1989,7 @@ void draw_bars(bool unhide) {
int x_dest = outputs_walk->rect.w - tray_width - logical_px(sb_hoff_px) - visible_statusline_width;

draw_statusline(outputs_walk, clip_left, use_focus_colors, use_short_text);
draw_util_copy_surface(&outputs_walk->statusline_buffer, &outputs_walk->buffer, 0, 0,
draw_util_copy_surface(xcb_connection, &outputs_walk->statusline_buffer, &outputs_walk->buffer, 0, 0,
x_dest, 0, visible_statusline_width, (int16_t)bar_height);

outputs_walk->statusline_width = statusline_width;
Expand Down Expand Up @@ -2020,7 +2020,7 @@ void redraw_bars(void) {
continue;
}

draw_util_copy_surface(&(outputs_walk->buffer), &(outputs_walk->bar), 0, 0,
draw_util_copy_surface(xcb_connection, &(outputs_walk->buffer), &(outputs_walk->bar), 0, 0,
0, 0, outputs_walk->rect.w, outputs_walk->rect.h);
xcb_flush(xcb_connection);
}
Expand Down
10 changes: 5 additions & 5 deletions include/config.h
Expand Up @@ -50,10 +50,10 @@ struct context {
*
*/
struct Colortriple {
uint32_t border;
uint32_t background;
uint32_t text;
uint32_t indicator;
color_t border;
color_t background;
color_t text;
color_t indicator;
};

/**
Expand Down Expand Up @@ -202,7 +202,7 @@ struct Config {

/* Color codes are stored here */
struct config_client {
uint32_t background;
color_t background;
struct Colortriple focused;
struct Colortriple focused_inactive;
struct Colortriple unfocused;
Expand Down
9 changes: 4 additions & 5 deletions include/data.h
Expand Up @@ -179,7 +179,7 @@ struct deco_render_params {
struct width_height con_rect;
struct width_height con_window_rect;
Rect con_deco_rect;
uint32_t background;
color_t background;
layout_t parent_layout;
bool con_is_leaf;
};
Expand Down Expand Up @@ -551,11 +551,10 @@ struct Con {
* change. */
uint8_t ignore_unmap;

/* ids/pixmap/graphics context for the frame window */
/* The surface used for the frame window. */
surface_t frame;
surface_t frame_buffer;
bool pixmap_recreated;
xcb_window_t frame;
xcb_pixmap_t pixmap;
xcb_gcontext_t pm_gc;

enum {
CT_ROOT = 0,
Expand Down

0 comments on commit 984658e

Please sign in to comment.