mirror of
https://github.com/labwc/labwc.git
synced 2026-03-25 09:06:38 -04:00
common/graphic-helpers: Add cairo helpers
This commit is contained in:
parent
8c8583ef94
commit
fb36463c34
4 changed files with 48 additions and 61 deletions
|
|
@ -32,3 +32,13 @@ struct multi_rect *multi_rect_create(struct wlr_scene_tree *parent,
|
||||||
float *colors[3], int line_width);
|
float *colors[3], int line_width);
|
||||||
|
|
||||||
void multi_rect_set_size(struct multi_rect *rect, int width, int height);
|
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);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <cairo.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <wlr/types/wlr_scene.h>
|
#include <wlr/types/wlr_scene.h>
|
||||||
#include "common/graphic-helpers.h"
|
#include "common/graphic-helpers.h"
|
||||||
|
|
@ -58,3 +59,28 @@ multi_rect_set_size(struct multi_rect *rect, int width, int height)
|
||||||
line_width, height - i * line_width * 2);
|
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]);
|
||||||
|
}
|
||||||
|
|
|
||||||
35
src/osd.c
35
src/osd.c
|
|
@ -7,6 +7,7 @@
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "common/buf.h"
|
#include "common/buf.h"
|
||||||
#include "common/font.h"
|
#include "common/font.h"
|
||||||
|
#include "common/graphic-helpers.h"
|
||||||
#include "config/rcxml.h"
|
#include "config/rcxml.h"
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
#include "theme.h"
|
#include "theme.h"
|
||||||
|
|
@ -20,30 +21,6 @@
|
||||||
#define OSD_TAB1 (120)
|
#define OSD_TAB1 (120)
|
||||||
#define OSD_TAB2 (300)
|
#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? */
|
/* is title different from app_id/class? */
|
||||||
static int
|
static int
|
||||||
is_title_different(struct view *view)
|
is_title_different(struct view *view)
|
||||||
|
|
@ -155,13 +132,13 @@ osd_update(struct server *server)
|
||||||
cairo_surface_t *surf = cairo_get_target(cairo);
|
cairo_surface_t *surf = cairo_get_target(cairo);
|
||||||
|
|
||||||
/* background */
|
/* background */
|
||||||
set_source(cairo, theme->osd_bg_color);
|
set_cairo_color(cairo, theme->osd_bg_color);
|
||||||
cairo_rectangle(cairo, 0, 0, w, h);
|
cairo_rectangle(cairo, 0, 0, w, h);
|
||||||
cairo_fill(cairo);
|
cairo_fill(cairo);
|
||||||
|
|
||||||
/* Border */
|
/* Border */
|
||||||
set_source(cairo, theme->osd_border_color);
|
set_cairo_color(cairo, theme->osd_border_color);
|
||||||
draw_border(cairo, w, h, theme->osd_border_width);
|
draw_cairo_border(cairo, w, h, theme->osd_border_width);
|
||||||
|
|
||||||
int y = OSD_BORDER_WIDTH;
|
int y = OSD_BORDER_WIDTH;
|
||||||
|
|
||||||
|
|
@ -177,7 +154,7 @@ osd_update(struct server *server)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (view == server->cycle_view) {
|
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,
|
cairo_rectangle(cairo, OSD_BORDER_WIDTH, y,
|
||||||
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
OSD_ITEM_WIDTH, OSD_ITEM_HEIGHT);
|
||||||
cairo_stroke(cairo);
|
cairo_stroke(cairo);
|
||||||
|
|
@ -187,7 +164,7 @@ osd_update(struct server *server)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* text */
|
/* 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);
|
PangoLayout *layout = pango_cairo_create_layout(cairo);
|
||||||
pango_layout_set_width(layout,
|
pango_layout_set_width(layout,
|
||||||
(OSD_ITEM_WIDTH - 2 * OSD_ITEM_PADDING) * PANGO_SCALE);
|
(OSD_ITEM_WIDTH - 2 * OSD_ITEM_PADDING) * PANGO_SCALE);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
#include "common/font.h"
|
#include "common/font.h"
|
||||||
|
#include "common/graphic-helpers.h"
|
||||||
#include "common/zfree.h"
|
#include "common/zfree.h"
|
||||||
#include "workspaces.h"
|
#include "workspaces.h"
|
||||||
|
|
||||||
|
|
@ -45,33 +46,6 @@ parse_workspace_index(const char *name)
|
||||||
return index;
|
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
|
static void
|
||||||
_osd_update(struct server *server)
|
_osd_update(struct server *server)
|
||||||
{
|
{
|
||||||
|
|
@ -110,18 +84,18 @@ _osd_update(struct server *server)
|
||||||
cairo = buffer->cairo;
|
cairo = buffer->cairo;
|
||||||
|
|
||||||
/* Background */
|
/* Background */
|
||||||
set_source(cairo, theme->osd_bg_color);
|
set_cairo_color(cairo, theme->osd_bg_color);
|
||||||
cairo_rectangle(cairo, 0, 0, width, height);
|
cairo_rectangle(cairo, 0, 0, width, height);
|
||||||
cairo_fill(cairo);
|
cairo_fill(cairo);
|
||||||
|
|
||||||
/* Border */
|
/* Border */
|
||||||
set_source(cairo, theme->osd_border_color);
|
set_cairo_color(cairo, theme->osd_border_color);
|
||||||
draw_border(cairo, width, height, theme->osd_border_width);
|
draw_cairo_border(cairo, width, height, theme->osd_border_width);
|
||||||
|
|
||||||
uint16_t x = (width - marker_width) / 2;
|
uint16_t x = (width - marker_width) / 2;
|
||||||
wl_list_for_each(workspace, &server->workspaces, link) {
|
wl_list_for_each(workspace, &server->workspaces, link) {
|
||||||
bool active = workspace == server->workspace_current;
|
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,
|
cairo_rectangle(cairo, x, margin,
|
||||||
rect_width - padding, rect_height);
|
rect_width - padding, rect_height);
|
||||||
cairo_stroke(cairo);
|
cairo_stroke(cairo);
|
||||||
|
|
@ -134,7 +108,7 @@ _osd_update(struct server *server)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Text */
|
/* 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);
|
PangoLayout *layout = pango_cairo_create_layout(cairo);
|
||||||
pango_layout_set_width(layout, (width - 2 * margin) * PANGO_SCALE);
|
pango_layout_set_width(layout, (width - 2 * margin) * PANGO_SCALE);
|
||||||
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
|
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue