float *colors[3], int line_width);
void multi_rect_set_size(struct multi_rect *rect, int width, int height);
+
+/**
+ * Sets the cairo color.
+ * Splits a float[4] single color array into its own arguments
+ */
+void set_cairo_color(cairo_t *cairo, float *color);
+
+/* Draws a border with a specified line width */
+void draw_cairo_border(cairo_t *cairo, double width, double height,
+ double line_width);
// SPDX-License-Identifier: GPL-2.0-only
#include <assert.h>
+#include <cairo.h>
#include <stdlib.h>
#include <wlr/types/wlr_scene.h>
#include "common/graphic-helpers.h"
line_width, height - i * line_width * 2);
}
}
+
+/* Draws a border with a specified line width */
+void
+draw_cairo_border(cairo_t *cairo, double width, double height, double line_width)
+{
+ cairo_save(cairo);
+
+ double x, y, w, h;
+ /* The anchor point of a line is in the center */
+ x = y = line_width / 2;
+ w = width - line_width;
+ h = height - line_width;
+ cairo_set_line_width(cairo, line_width);
+ cairo_rectangle(cairo, x, y, w, h);
+ cairo_stroke(cairo);
+
+ cairo_restore(cairo);
+}
+
+/* Sets the cairo color. Splits the single color channels */
+void
+set_cairo_color(cairo_t *cairo, float *c)
+{
+ cairo_set_source_rgba(cairo, c[0], c[1], c[2], c[3]);
+}
#include "buffer.h"
#include "common/buf.h"
#include "common/font.h"
+#include "common/graphic-helpers.h"
#include "config/rcxml.h"
#include "labwc.h"
#include "theme.h"
#define OSD_TAB1 (120)
#define OSD_TAB2 (300)
-static void
-set_source(cairo_t *cairo, float *c)
-{
- cairo_set_source_rgba(cairo, c[0], c[1], c[2], c[3]);
-}
-
-/* Draws a border with a specified line width */
-static void
-draw_border(cairo_t *cairo, double width, double height, double line_width)
-{
- cairo_save(cairo);
-
- double x, y, w, h;
- /* The anchor point of a line is in the center */
- x = y = line_width / 2;
- w = width - line_width;
- h = height - line_width;
- cairo_set_line_width(cairo, line_width);
- cairo_rectangle(cairo, x, y, w, h);
- cairo_stroke(cairo);
-
- cairo_restore(cairo);
-}
-
/* is title different from app_id/class? */
static int
is_title_different(struct view *view)
cairo_surface_t *surf = cairo_get_target(cairo);
/* background */
- set_source(cairo, theme->osd_bg_color);
+ set_cairo_color(cairo, theme->osd_bg_color);
cairo_rectangle(cairo, 0, 0, w, h);
cairo_fill(cairo);
/* Border */
- set_source(cairo, theme->osd_border_color);
- draw_border(cairo, w, h, theme->osd_border_width);
+ set_cairo_color(cairo, theme->osd_border_color);
+ draw_cairo_border(cairo, w, h, theme->osd_border_width);
int y = OSD_BORDER_WIDTH;
continue;
}
if (view == server->cycle_view) {
- set_source(cairo, theme->osd_label_text_color);
+ set_cairo_color(cairo, theme->osd_label_text_color);
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
cairo_stroke(cairo);
}
/* text */
- set_source(cairo, theme->osd_label_text_color);
+ set_cairo_color(cairo, theme->osd_label_text_color);
PangoLayout *layout = pango_cairo_create_layout(cairo);
pango_layout_set_width(layout,
(OSD_ITEM_WIDTH - 2 * OSD_ITEM_PADDING) * PANGO_SCALE);
#include <strings.h>
#include "labwc.h"
#include "common/font.h"
+#include "common/graphic-helpers.h"
#include "common/zfree.h"
#include "workspaces.h"
return index;
}
-/*
- * TODO: set_source and draw_border are straight up copies from src/osd.c
- * find some proper place for them instead of duplicating stuff.
- */
-static void
-set_source(cairo_t *cairo, float *c)
-{
- cairo_set_source_rgba(cairo, c[0], c[1], c[2], c[3]);
-}
-
-static void
-draw_border(cairo_t *cairo, double width, double height, double line_width)
-{
- cairo_save(cairo);
-
- double x, y, w, h;
- /* The anchor point of a line is in the center */
- x = y = line_width / 2;
- w = width - line_width;
- h = height - line_width;
- cairo_set_line_width(cairo, line_width);
- cairo_rectangle(cairo, x, y, w, h);
- cairo_stroke(cairo);
-
- cairo_restore(cairo);
-}
-
static void
_osd_update(struct server *server)
{
cairo = buffer->cairo;
/* Background */
- set_source(cairo, theme->osd_bg_color);
+ set_cairo_color(cairo, theme->osd_bg_color);
cairo_rectangle(cairo, 0, 0, width, height);
cairo_fill(cairo);
/* Border */
- set_source(cairo, theme->osd_border_color);
- draw_border(cairo, width, height, theme->osd_border_width);
+ set_cairo_color(cairo, theme->osd_border_color);
+ draw_cairo_border(cairo, width, height, theme->osd_border_width);
uint16_t x = (width - marker_width) / 2;
wl_list_for_each(workspace, &server->workspaces, link) {
bool active = workspace == server->workspace_current;
- set_source(cairo, server->theme->osd_label_text_color);
+ set_cairo_color(cairo, server->theme->osd_label_text_color);
cairo_rectangle(cairo, x, margin,
rect_width - padding, rect_height);
cairo_stroke(cairo);
}
/* Text */
- set_source(cairo, server->theme->osd_label_text_color);
+ set_cairo_color(cairo, server->theme->osd_label_text_color);
PangoLayout *layout = pango_cairo_create_layout(cairo);
pango_layout_set_width(layout, (width - 2 * margin) * PANGO_SCALE);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);