Skip to content

Commit

Permalink
Port trivially migratable test cases to Cairo
Browse files Browse the repository at this point in the history
  • Loading branch information
markuspg committed Dec 30, 2023
1 parent 8b6cba0 commit 4d0b0b7
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 42 deletions.
12 changes: 12 additions & 0 deletions callbacks.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,15 @@ G_MODULE_EXPORT void on_bg_color_activate(G_GNUC_UNUSED GtkMenuItem *menuitem,
}
gtk_widget_hide(GTK_WIDGET(bg_color_selector));
}

void set_color_bg(cairo_t *cr) {
cairo_set_source_rgb(cr, bg_color->red / (double)UINT16_MAX,
bg_color->green / (double)UINT16_MAX,
bg_color->blue / (double)UINT16_MAX);
}

void set_color_fg(cairo_t *cr) {
cairo_set_source_rgb(cr, fg_color->red / (double)UINT16_MAX,
fg_color->green / (double)UINT16_MAX,
fg_color->blue / (double)UINT16_MAX);
}
3 changes: 3 additions & 0 deletions callbacks.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ extern GdkColor fgcolors[];
extern GdkColor *fg_color;
extern GdkColor grays[];

void set_color_bg(cairo_t *cr);
void set_color_fg(cairo_t *cr);

#endif // SCREENTEST_CALLBACKS_H
1 change: 1 addition & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ project(

i18n = import('i18n')

cairo_dep = dependency('cairo', version: '>= 1.0')
gmodule_dep = dependency('gmodule-2.0', version: '>= 1.1.3')
gtk_dep = dependency('gtk+-2.0', version: '>= 2.24')
screentest_deps = [
Expand Down
47 changes: 35 additions & 12 deletions test_blink.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,32 +29,55 @@ static guint timeout;
static gint blink_type;
static gint blink_step;

void (*set_color1)(cairo_t *cr);
void (*set_color2)(cairo_t *cr);

static void blink_draw(GtkWidget *widget) {
cairo_t *cr;
GdkWindow *win = gtk_widget_get_window(widget);
gint w, h;
GdkGC *gc1, *gc2;

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);

if (blink_step) {
gc1 = backgc;
gc2 = gc;
set_color1 = set_color_bg;
set_color2 = set_color_fg;
} else {
gc1 = gc;
gc2 = backgc;
set_color1 = set_color_fg;
set_color2 = set_color_bg;
}

cr = gdk_cairo_create(gtk_widget_get_window(widget));

set_color_fg(cr);
cairo_paint(cr);

set_color_bg(cr);
cairo_rectangle(cr, 1, 1, w - 2, h - 2);
cairo_fill(cr);

if (blink_type) {
gdk_draw_rectangle(win, gc1, TRUE, 5, 5, w / 3 - 5, h - 10);
gdk_draw_rectangle(win, gc2, TRUE, w / 3, 5, w / 3, h - 10);
gdk_draw_rectangle(win, gc1, TRUE, 2 * w / 3, 5, w / 3 - 5, h - 10);
set_color1(cr);
cairo_rectangle(cr, 5, 5, w / 3 - 5, h - 10);
cairo_fill(cr);
set_color2(cr);
cairo_rectangle(cr, w / 3, 5, w / 3, h - 10);
cairo_fill(cr);
set_color1(cr);
cairo_rectangle(cr, 2 * w / 3, 5, w / 3 - 5, h - 10);
cairo_fill(cr);
} else {
gdk_draw_rectangle(win, gc1, TRUE, 5, 5, w - 10, h / 3 - 5);
gdk_draw_rectangle(win, gc2, TRUE, 5, h / 3, w - 10, h / 3);
gdk_draw_rectangle(win, gc1, TRUE, 5, 2 * h / 3, w - 10, h / 3 - 5);
set_color1(cr);
cairo_rectangle(cr, 5, 5, w - 10, h / 3 - 5);
cairo_fill(cr);
set_color2(cr);
cairo_rectangle(cr, 5, h / 3, w - 10, h / 3);
cairo_fill(cr);
set_color1(cr);
cairo_rectangle(cr, 5, 2 * h / 3, w - 10, h / 3 - 5);
cairo_fill(cr);
}
gdk_draw_rectangle(win, gc, FALSE, 0, 0, w - 1, h - 1);
}

static gboolean blink_timeout(gpointer data) {
Expand Down
17 changes: 10 additions & 7 deletions test_bright_pixels.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,19 @@ static void bright_pixels_cycle(G_GNUC_UNUSED GtkWidget *widget) {
}

static void bright_pixels_draw(GtkWidget *widget) {
GdkWindow *win = gtk_widget_get_window(widget);
gint w, h;
GdkColor *col;
cairo_t *cr;

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);
cr = gdk_cairo_create(gtk_widget_get_window(widget));

gdk_gc_set_rgb_fg_color(gc, &fgcolors[color_cycle[current_color_idx]]);
gdk_draw_rectangle(win, gc, 1, 0, 0, w, h);
col = &fgcolors[color_cycle[current_color_idx]];
cairo_set_source_rgb(cr, col->red / (double)UINT16_MAX,
col->green / (double)UINT16_MAX,
col->blue / (double)UINT16_MAX);
cairo_paint(cr);

gdk_gc_set_rgb_fg_color(gc, &fgcolors[COLOR_WHITE]);
cairo_destroy(cr);
cr = NULL;
}

G_MODULE_EXPORT struct test_ops bright_pixels_ops = {.init = bright_pixels_init,
Expand Down
22 changes: 18 additions & 4 deletions test_grid.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,31 @@ static void grid_cycle(G_GNUC_UNUSED GtkWidget *widget) {
}

static void grid_draw(GtkWidget *widget) {
cairo_t *cr;
GdkWindow *win = gtk_widget_get_window(widget);
gint w, h;
gint i;

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);

for (i = ((w - 1) % grid_step) / 2; i < w; i += grid_step)
gdk_draw_line(win, gc, i, 0, i, h - 1);
for (i = ((h - 1) % grid_step) / 2; i < h; i += grid_step)
gdk_draw_line(win, gc, 0, i, w - 1, i);
cr = gdk_cairo_create(gtk_widget_get_window(widget));

set_color_bg(cr);
cairo_paint(cr);

set_color_fg(cr);
for (i = ((w - 1) % grid_step) / 2; i < w; i += grid_step) {
cairo_rectangle(cr, i, 0, 1, w - 1);
cairo_fill(cr);
}
for (i = ((h - 1) % grid_step) / 2; i < h; i += grid_step) {
cairo_rectangle(cr, 0, i, w - 1, 1);
cairo_fill(cr);
}

cairo_destroy(cr);
cr = NULL;
}

G_MODULE_EXPORT struct test_ops grid_ops = {
Expand Down
16 changes: 14 additions & 2 deletions test_horizontal.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,27 @@ static void horizontal_cycle(G_GNUC_UNUSED GtkWidget *widget) {
}

static void horizontal_draw(GtkWidget *widget) {
cairo_t *cr;
GdkWindow *win = gtk_widget_get_window(widget);
gint w, h;
gint i;

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);

for (i = ((h - 1) % horizontal_step) / 2; i < h; i += horizontal_step)
gdk_draw_line(win, gc, 0, i, w - 1, i);
cr = gdk_cairo_create(gtk_widget_get_window(widget));

set_color_bg(cr);
cairo_paint(cr);

set_color_fg(cr);
for (i = ((h - 1) % horizontal_step) / 2; i < h; i += horizontal_step) {
cairo_rectangle(cr, 0, i, w - 1, 1);
cairo_fill(cr);
}

cairo_destroy(cr);
cr = NULL;
}

G_MODULE_EXPORT struct test_ops horizontal_ops = {.init = horizontal_init,
Expand Down
33 changes: 18 additions & 15 deletions test_lcdalign.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,33 @@
#include "callbacks.h"

static void lcdalign_draw(GtkWidget *widget) {
cairo_t *cr;
GdkWindow *win = gtk_widget_get_window(widget);
GdkGC *linegc = gdk_gc_new(win);
gint w, h;
gint i;
gint8 d[] = {1, 1};
static const double d[] = {1.0};

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);

/* Border */
gdk_draw_line(win, gc, 0, 0, w - 1, 0);
gdk_draw_line(win, gc, 0, 0, 0, h - 1);
gdk_draw_line(win, gc, w - 1, 0, w - 1, h - 1);
gdk_draw_line(win, gc, 0, h - 1, w - 1, h - 1);
cr = gdk_cairo_create(gtk_widget_get_window(widget));

/* Background/Border */
set_color_fg(cr);
cairo_paint(cr);

/* Pattern */
gdk_gc_copy(linegc, gc);
gdk_gc_set_line_attributes(linegc, 1, GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST,
GDK_JOIN_MITER);
gdk_gc_set_dashes(linegc, 0, d, 2);
for (i = 1; i < h - 1; i++)
gdk_draw_line(win, linegc, (i % 2) + 1, i, w - 1, i);

g_object_unref(linegc);
set_color_bg(cr);
cairo_set_line_width(cr, 1.0);
for (i = 1; i < h - 1; i += 1) {
cairo_set_dash(cr, d, 1, (i % 2) + 1);
cairo_move_to(cr, 1, i + 0.5);
cairo_line_to(cr, w - 1, i + 0.5);
cairo_stroke(cr);
}

cairo_destroy(cr);
cr = NULL;
}

G_MODULE_EXPORT struct test_ops lcdalign_ops = {
Expand Down
16 changes: 14 additions & 2 deletions test_vertical.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,27 @@ static void vertical_cycle(G_GNUC_UNUSED GtkWidget *widget) {
}

static void vertical_draw(GtkWidget *widget) {
cairo_t *cr;
GdkWindow *win = gtk_widget_get_window(widget);
gint w, h;
gint i;

h = gdk_window_get_height(win);
w = gdk_window_get_width(win);

for (i = ((w - 1) % vertical_step) / 2; i < w; i += vertical_step)
gdk_draw_line(win, gc, i, 0, i, h - 1);
cr = gdk_cairo_create(gtk_widget_get_window(widget));

set_color_bg(cr);
cairo_paint(cr);

set_color_fg(cr);
for (i = ((w - 1) % vertical_step) / 2; i < w; i += vertical_step) {
cairo_rectangle(cr, i, 0, 1, w - 1);
cairo_fill(cr);
}

cairo_destroy(cr);
cr = NULL;
}

G_MODULE_EXPORT struct test_ops vertical_ops = {.init = vertical_init,
Expand Down

0 comments on commit 4d0b0b7

Please sign in to comment.