From dbf09a8dba28fee6f3c97b5bb533f64fa3c89a8b Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Fri, 19 Aug 2016 03:32:41 -0300 Subject: [PATCH] eeshow/gui/over.c (overlay_set_related, _all): support related AoIs --- eeshow/gui/over.c | 35 ++++++++++++++++++++++++++++++++++- eeshow/gui/over.h | 3 +++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/eeshow/gui/over.c b/eeshow/gui/over.c index 253ba7c..1a1f511 100644 --- a/eeshow/gui/over.c +++ b/eeshow/gui/over.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,7 @@ struct overlay { void *user; struct aoi *aoi; + const struct overlay *related; struct overlay *next, *prev; }; @@ -167,8 +169,13 @@ fprintf(stderr, "%u(%d) %u %.60s\n", ty, ink_rect.y / PANGO_SCALE, ink_h, over-> if (over->aoi) aoi_update(over->aoi, &aoi_cfg); - else + else { over->aoi = aoi_add(over->aois, &aoi_cfg); + if (over->related) { + assert(over->related->aoi); + aoi_set_related(over->aoi, over->related->aoi); + } + } } return h; @@ -318,6 +325,7 @@ struct overlay *overlay_add(struct overlay **overlays, struct aoi **aois, over->click = click; over->user = user; over->aoi = NULL; + over->related = NULL; prev = NULL; for (anchor = overlays; *anchor; anchor = &(*anchor)->next) @@ -356,6 +364,31 @@ void overlay_text(struct overlay *over, const char *fmt, ...) } +/* ----- Nesting ----------------------------------------------------------- */ + + +void overlay_set_related(struct overlay *over, struct overlay *related) +{ + /* + * Relatedness is a property that only matters to AoIs, but we have to + * defer propagating it because we only know our AoI after drawing the + * overlay. + */ + + assert(!over->related); + over->related = related; +} + + +void overlay_set_related_all(struct overlay *overlays, struct overlay *related) +{ + struct overlay *over; + + for (over = overlays; over; over = over->next) + overlay_set_related(over, related); +} + + /* ----- Removal ----------------------------------------------------------- */ diff --git a/eeshow/gui/over.h b/eeshow/gui/over.h index 01c807e..3ead498 100644 --- a/eeshow/gui/over.h +++ b/eeshow/gui/over.h @@ -60,6 +60,9 @@ void overlay_text_raw(struct overlay *over, const char *s); void overlay_text(struct overlay *over, const char *fmt, ...); void overlay_style(struct overlay *over, const struct overlay_style *style); +void overlay_set_related(struct overlay *over, struct overlay *related); +void overlay_set_related_all(struct overlay *overlays, struct overlay *related); + void overlay_remove(struct overlay **overlays, struct overlay *over); void overlay_remove_all(struct overlay **overlays);