made the vocabulary exercise in unit 1 less out of place by moving it a few pixels

This commit is contained in:
dvorakmortonxd 2026-09-11 22:17:26 +02:00
commit a4f6f9da0e
2 changed files with 19 additions and 6 deletions

View file

@ -40,6 +40,7 @@
#define EX_GAP 200.0 /* vertical space between folded rows */ #define EX_GAP 200.0 /* vertical space between folded rows */
#define EX_WAVE 26.0 /* wavy vertical offset of the bubbles */ #define EX_WAVE 26.0 /* wavy vertical offset of the bubbles */
#define EX_BRANCH_LIFT 150.0 /* extra top space for an off-path branch */ #define EX_BRANCH_LIFT 150.0 /* extra top space for an off-path branch */
#define EX_BRANCH_DX 64.0 /* sideways offset so the branch link slants */
#define HM_WORDS 5 #define HM_WORDS 5
#define HM_MAX_MISSES 6 #define HM_MAX_MISSES 6
#define HM_N_LETTERS 29 /* QWERTY rows + Ä/Ö/Ü (see hm_letters[]) */ #define HM_N_LETTERS 29 /* QWERTY rows + Ä/Ö/Ü (see hm_letters[]) */

View file

@ -42,9 +42,10 @@ void ex_layout_geometry(UnitCtx *u, double avail) {
} }
} }
/* The branch hangs straight above exercise 2 (index 1). */ /* The branch hangs above exercise 2 (index 1), nudged sideways so its
* connector is a slanted link rather than a dead-straight vertical line. */
if (u->has_branch && n > 1) { if (u->has_branch && n > 1) {
u->branch_cx = u->ex_cx[1]; u->branch_cx = u->ex_cx[1] + EX_BRANCH_DX;
u->branch_cy = u->ex_cy[1] - EX_BRANCH_LIFT; u->branch_cy = u->ex_cy[1] - EX_BRANCH_LIFT;
} }
} }
@ -93,6 +94,19 @@ void ex_path(UnitCtx *u, cairo_t *cr, double t0, double t1) {
} }
} }
/* Wavy link from an exercise bubble up to the off-path branch. */
static void branch_path(cairo_t *cr, double x0, double y0,
double x1, double y1) {
double dy = y0 - y1;
double c1x = x0 + EX_WAVE * 1.3;
double c1y = y0 - dy * 0.45;
double c2x = x1 - EX_WAVE * 1.3;
double c2y = y1 + dy * 0.45;
cairo_move_to(cr, x0, y0);
cairo_curve_to(cr, c1x, c1y, c2x, c2y, x1, y1);
}
void draw_ex_rail(GtkDrawingArea *area, cairo_t *cr, void draw_ex_rail(GtkDrawingArea *area, cairo_t *cr,
int width, int height, gpointer user_data) { int width, int height, gpointer user_data) {
UnitCtx *u = user_data; UnitCtx *u = user_data;
@ -138,15 +152,13 @@ void draw_ex_rail(GtkDrawingArea *area, cairo_t *cr,
gboolean bdone = u->done[u->branch_ex]; gboolean bdone = u->done[u->branch_ex];
cairo_new_path(cr); cairo_new_path(cr);
cairo_move_to(cr, u->ex_cx[1], u->ex_cy[1]); branch_path(cr, u->ex_cx[1], u->ex_cy[1], u->branch_cx, u->branch_cy);
cairo_line_to(cr, u->branch_cx, u->branch_cy);
cairo_set_line_width(cr, 14); cairo_set_line_width(cr, 14);
cairo_set_source_rgb(cr, rail.r, rail.g, rail.b); cairo_set_source_rgb(cr, rail.r, rail.g, rail.b);
cairo_stroke(cr); cairo_stroke(cr);
cairo_new_path(cr); cairo_new_path(cr);
cairo_move_to(cr, u->ex_cx[1], u->ex_cy[1]); branch_path(cr, u->ex_cx[1], u->ex_cy[1], u->branch_cx, u->branch_cy);
cairo_line_to(cr, u->branch_cx, u->branch_cy);
cairo_set_line_width(cr, 9); cairo_set_line_width(cr, 9);
if (bdone) if (bdone)
cairo_set_source_rgba(cr, green.r, green.g, green.b, 0.85); cairo_set_source_rgba(cr, green.r, green.g, green.b, 0.85);