From 3135f1d36d343698974657116fe168916ff759b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 29 Dec 2018 20:33:38 +0100 Subject: [PATCH] particle: all particles now take margin arguments Ramp and map however, doesn't allow any values other than 0 (yet). --- config.c | 85 ++++++++++++++++++++++-------------------------- particles/map.c | 9 +++-- particles/map.h | 2 +- particles/ramp.c | 9 +++-- particles/ramp.h | 3 +- 5 files changed, 56 insertions(+), 52 deletions(-) diff --git a/config.c b/config.c index bb6be15..6212ade 100644 --- a/config.c +++ b/config.c @@ -168,31 +168,22 @@ deco_from_config(const struct yml_node *node) static struct particle * particle_empty_from_config(const struct yml_node *node, - const struct font *parent_font) + const struct font *parent_font, + int left_margin, int right_margin) { - const struct yml_node *left_margin = yml_get_value(node, "left_margin"); - const struct yml_node *right_margin = yml_get_value(node, "right_margin"); - - assert(left_margin == NULL || yml_is_scalar(left_margin)); - assert(right_margin == NULL || yml_is_scalar(right_margin)); - - return particle_empty_new( - left_margin != NULL ? yml_value_as_int(left_margin) : 0, - right_margin != NULL ? yml_value_as_int(right_margin) : 0); + return particle_empty_new(left_margin, right_margin); } static struct particle * particle_string_from_config(const struct yml_node *node, - const struct font *parent_font) + const struct font *parent_font, + int left_margin, int right_margin) { assert(yml_is_dict(node)); const struct yml_node *text = yml_get_value(node, "text"); const struct yml_node *font = yml_get_value(node, "font"); const struct yml_node *foreground = yml_get_value(node, "foreground"); - const struct yml_node *margin = yml_get_value(node, "margin"); - const struct yml_node *left_margin = yml_get_value(node, "left_margin"); - const struct yml_node *right_margin = yml_get_value(node, "right_margin"); const struct yml_node *on_click = yml_get_value(node, "on_click"); assert(text != NULL && yml_is_scalar(text)); @@ -201,15 +192,10 @@ particle_string_from_config(const struct yml_node *node, ? color_from_hexstr(yml_value_as_string(foreground)) : (struct rgba){1.0, 1.0, 1.0, 1.0}; - int left = margin != NULL ? yml_value_as_int(margin) : - left_margin != NULL ? yml_value_as_int(left_margin) : 0; - int right = margin != NULL ? yml_value_as_int(margin) : - right_margin != NULL ? yml_value_as_int(right_margin) : 0; - return particle_string_new( yml_value_as_string(text), font != NULL ? font_from_config(font) : font_clone(parent_font), - fg_color, left, right, + fg_color, left_margin, right_margin, on_click != NULL ? yml_value_as_string(on_click) : NULL); } @@ -218,24 +204,17 @@ static struct particle * particle_from_config( static struct particle * particle_list_from_config(const struct yml_node *node, - const struct font *parent_font) + const struct font *parent_font, + int left_margin, int right_margin) { const struct yml_node *items = yml_get_value(node, "items"); - const struct yml_node *margin = yml_get_value(node, "margin"); - const struct yml_node *_left_margin = yml_get_value(node, "left_margin"); - const struct yml_node *_right_margin = yml_get_value(node, "right_margin"); - const struct yml_node *spacing = yml_get_value(node, "spacing"); const struct yml_node *_left_spacing = yml_get_value(node, "left_spacing"); const struct yml_node *_right_spacing = yml_get_value(node, "right_spacing"); const struct yml_node *on_click = yml_get_value(node, "on_click"); - int left_margin = margin != NULL ? yml_value_as_int(margin) : - _left_margin != NULL ? yml_value_as_int(_left_margin) : 0; - int right_margin = margin != NULL ? yml_value_as_int(margin) : - _right_margin != NULL ? yml_value_as_int(_right_margin) : 0; int left_spacing = spacing != NULL ? yml_value_as_int(spacing) : _left_spacing != NULL ? yml_value_as_int(_left_spacing) : 0; int right_spacing = spacing != NULL ? yml_value_as_int(spacing) : @@ -258,7 +237,9 @@ particle_list_from_config(const struct yml_node *node, } static struct particle * -particle_map_from_config(const struct yml_node *node, const struct font *parent_font) +particle_map_from_config(const struct yml_node *node, + const struct font *parent_font, + int left_margin, int right_margin) { const struct yml_node *tag = yml_get_value(node, "tag"); const struct yml_node *values = yml_get_value(node, "values"); @@ -285,11 +266,13 @@ particle_map_from_config(const struct yml_node *node, const struct font *parent_ return particle_map_new( yml_value_as_string(tag), particle_map, yml_dict_length(values), - default_particle); + default_particle, left_margin, right_margin); } static struct particle * -particle_ramp_from_config(const struct yml_node *node, const struct font *parent_font) +particle_ramp_from_config(const struct yml_node *node, + const struct font *parent_font, + int left_margin, int right_margin) { const struct yml_node *tag = yml_get_value(node, "tag"); const struct yml_node *items = yml_get_value(node, "items"); @@ -308,12 +291,14 @@ particle_ramp_from_config(const struct yml_node *node, const struct font *parent parts[idx] = particle_from_config(it.node, parent_font); } - return particle_ramp_new(yml_value_as_string(tag), parts, count); + return particle_ramp_new( + yml_value_as_string(tag), parts, count, left_margin, right_margin); } static struct particle * particle_progress_bar_from_config(const struct yml_node *node, - const struct font *parent_font) + const struct font *parent_font, + int left_margin, int right_margin) { const struct yml_node *tag = yml_get_value(node, "tag"); const struct yml_node *length = yml_get_value(node, "length"); @@ -322,8 +307,6 @@ particle_progress_bar_from_config(const struct yml_node *node, const struct yml_node *fill = yml_get_value(node, "fill"); const struct yml_node *empty = yml_get_value(node, "empty"); const struct yml_node *indicator = yml_get_value(node, "indicator"); - const struct yml_node *left_margin = yml_get_value(node, "left_margin"); - const struct yml_node *right_margin = yml_get_value(node, "right_margin"); const struct yml_node *on_click = yml_get_value(node, "on_click"); assert(tag != NULL && yml_is_scalar(tag)); @@ -333,8 +316,6 @@ particle_progress_bar_from_config(const struct yml_node *node, assert(fill != NULL); assert(empty != NULL); assert(indicator != NULL); - assert(left_margin == NULL || yml_is_scalar(left_margin)); - assert(right_margin == NULL || yml_is_scalar(right_margin)); assert(on_click == NULL || yml_is_scalar(on_click)); return particle_progress_bar_new( @@ -345,8 +326,7 @@ particle_progress_bar_from_config(const struct yml_node *node, particle_from_config(fill, parent_font), particle_from_config(empty, parent_font), particle_from_config(indicator, parent_font), - left_margin != NULL ? yml_value_as_int(left_margin) : 0, - right_margin != NULL ? yml_value_as_int(right_margin) : 0, + left_margin, right_margin, on_click != NULL ? yml_value_as_string(on_click) : NULL); } @@ -359,19 +339,32 @@ particle_from_config(const struct yml_node *node, const struct font *parent_font struct yml_dict_iter pair = yml_dict_iter(node); const char *type = yml_value_as_string(pair.key); + const struct yml_node *margin = yml_get_value(pair.value, "margin"); + const struct yml_node *left_margin = yml_get_value(pair.value, "left_margin"); + const struct yml_node *right_margin = yml_get_value(pair.value, "right_margin"); + + assert(margin == NULL || yml_is_scalar(margin)); + assert(left_margin == NULL || yml_is_scalar(left_margin)); + assert(right_margin == NULL || yml_is_scalar(right_margin)); + + int left = margin != NULL ? yml_value_as_int(margin) : + left_margin != NULL ? yml_value_as_int(left_margin) : 0; + int right = margin != NULL ? yml_value_as_int(margin) : + right_margin != NULL ? yml_value_as_int(right_margin) : 0; + struct particle *ret = NULL; if (strcmp(type, "empty") == 0) - ret = particle_empty_from_config(pair.value, parent_font); + ret = particle_empty_from_config(pair.value, parent_font, left, right); else if (strcmp(type, "string") == 0) - ret = particle_string_from_config(pair.value, parent_font); + ret = particle_string_from_config(pair.value, parent_font, left, right); else if (strcmp(type, "list") == 0) - ret = particle_list_from_config(pair.value, parent_font); + ret = particle_list_from_config(pair.value, parent_font, left, right); else if (strcmp(type, "map") == 0) - ret = particle_map_from_config(pair.value, parent_font); + ret = particle_map_from_config(pair.value, parent_font, left, right); else if (strcmp(type, "ramp") == 0) - ret = particle_ramp_from_config(pair.value, parent_font); + ret = particle_ramp_from_config(pair.value, parent_font, left, right); else if (strcmp(type, "progress_bar") == 0) - ret = particle_progress_bar_from_config(pair.value, parent_font); + ret = particle_progress_bar_from_config(pair.value, parent_font, left, right); else assert(false); diff --git a/particles/map.c b/particles/map.c index 3287219..2000c72 100644 --- a/particles/map.c +++ b/particles/map.c @@ -58,9 +58,14 @@ particle_destroy(struct particle *particle) struct particle * particle_map_new(const char *tag, const struct particle_map *particle_map, - size_t count, struct particle *default_particle) + size_t count, struct particle *default_particle, + int left_margin, int right_margin) { - struct particle *particle = particle_common_new(0, 0, NULL); + assert(left_margin == 0 && right_margin == 0 + && "map: margins not implemented"); + + struct particle *particle = particle_common_new( + left_margin, right_margin, NULL); particle->destroy = &particle_destroy; particle->instantiate = &instantiate; diff --git a/particles/map.h b/particles/map.h index db75d73..55f72e9 100644 --- a/particles/map.h +++ b/particles/map.h @@ -8,4 +8,4 @@ struct particle_map { struct particle *particle_map_new( const char *tag, const struct particle_map *particle_map, size_t count, - struct particle *default_particle); + struct particle *default_particle, int left_margin, int right_margin); diff --git a/particles/ramp.c b/particles/ramp.c index 118adb0..3c57695 100644 --- a/particles/ramp.c +++ b/particles/ramp.c @@ -59,9 +59,14 @@ instantiate(const struct particle *particle, const struct tag_set *tags) } struct particle * -particle_ramp_new(const char *tag, struct particle *particles[], size_t count) +particle_ramp_new(const char *tag, struct particle *particles[], size_t count, + int left_margin, int right_margin) { - struct particle *particle = particle_common_new(0, 0, NULL); + assert(left_margin == 0 && right_margin == 0 + && "ramp: margins not implemented"); + + struct particle *particle = particle_common_new( + left_margin, right_margin, NULL); particle->destroy = &particle_destroy; particle->instantiate = &instantiate; diff --git a/particles/ramp.h b/particles/ramp.h index 1bfa094..05183d1 100644 --- a/particles/ramp.h +++ b/particles/ramp.h @@ -2,4 +2,5 @@ #include "../particle.h" struct particle *particle_ramp_new( - const char *tag, struct particle *particles[], size_t count); + const char *tag, struct particle *particles[], size_t count, + int left_margin, int right_margin);