From f14209cf281364fe32ccc239c7092629c8bdce1e Mon Sep 17 00:00:00 2001 From: Nicola Fontana Date: Fri, 30 Dec 2016 14:32:17 +0100 Subject: [PATCH] adg: new ADG_DRESS_DIMENSION_DIAMETER dress Prefer a custom dress instead of customizing diameter values by prefixing the quote with a diameter symbol. Using dresses is way more flexible and it is what dress has been implemented for. --- demo/adg-demo.c | 18 +++++++++--------- src/adg/adg-dress.c | 20 ++++++++++++++++++++ src/adg/adg-enums.h | 1 + src/adg/tests/test-dim.c | 21 ++++++++++++++++++++- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/demo/adg-demo.c b/demo/adg-demo.c index 9b1b05db..db938d23 100644 --- a/demo/adg-demo.c +++ b/demo/adg-demo.c @@ -510,14 +510,14 @@ _adg_demo_canvas_add_dimensions(AdgCanvas *canvas, AdgModel *model) ADG_DIR_LEFT); adg_dim_set_limits(ADG_DIM(ldim), "-0.1", NULL); adg_dim_set_outside(ADG_DIM(ldim), ADG_THREE_STATE_OFF); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "DGROOVEI_Y", "-DGROOVEI_Y", "-DGROOVEY_POS", ADG_DIR_LEFT); adg_dim_set_limits(ADG_DIM(ldim), "-0.1", NULL); adg_dim_set_outside(ADG_DIM(ldim), ADG_THREE_STATE_OFF); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); /* SOUTH */ @@ -575,45 +575,45 @@ _adg_demo_canvas_add_dimensions(AdgCanvas *canvas, AdgModel *model) ADG_DIR_RIGHT); adg_dim_set_limits(ADG_DIM(ldim), "-0.1", NULL); adg_dim_set_level(ADG_DIM(ldim), 4); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "D4F", "-D4F", "East", ADG_DIR_RIGHT); adg_dim_set_level(ADG_DIM(ldim), 3); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "D5F", "-D5F", "East", ADG_DIR_RIGHT); adg_dim_set_limits(ADG_DIM(ldim), "-0.1", NULL); adg_dim_set_level(ADG_DIM(ldim), 2); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "D7F", "-D7F", "East", ADG_DIR_RIGHT); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); /* WEST */ ldim = adg_ldim_new_full_from_model(model, "DHOLE", "-DHOLE", "-West", ADG_DIR_LEFT); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "D1I", "-D1I", "-West", ADG_DIR_LEFT); adg_dim_set_limits(ADG_DIM(ldim), "-0.05", "+0.05"); adg_dim_set_level(ADG_DIM(ldim), 2); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); ldim = adg_ldim_new_full_from_model(model, "D3I_Y", "-D3I_Y", "-West", ADG_DIR_LEFT); adg_dim_set_limits(ADG_DIM(ldim), "-0.25", NULL); adg_dim_set_level(ADG_DIM(ldim), 3); - adg_dim_set_value(ADG_DIM(ldim), ADG_UTF8_DIAMETER "<>"); + adg_dim_set_dim_dress(ADG_DIM(ldim), ADG_DRESS_DIMENSION_DIAMETER); adg_container_add(ADG_CONTAINER(canvas), ADG_ENTITY(ldim)); } diff --git a/src/adg/adg-dress.c b/src/adg/adg-dress.c index c80b9991..c5869f74 100644 --- a/src/adg/adg-dress.c +++ b/src/adg/adg-dress.c @@ -129,6 +129,9 @@ * @ADG_DRESS_DIMENSION_RADIUS: default built-in for radius dimensions. * This dress will be resolved to an * #AdgDimStyle instance. + * @ADG_DRESS_DIMENSION_DIAMETER: default built-in for diameter dimensions. + * This dress will be resolved to an + * #AdgDimStyle instance. * @ADG_DRESS_FILL: default built-in for filling. This is a * pass-through dress, that is it does not * change the cairo context when it is @@ -658,6 +661,23 @@ _adg_data_register_builtins(void) g_object_unref(arrow2); + /* Predefined diameter dimension styles */ + + arrow1 = (AdgMarker *) adg_arrow_new(); + arrow2 = (AdgMarker *) adg_arrow_new(); + adg_marker_set_pos(arrow2, 1); + _adg_data_register(ADG_DRESS_DIMENSION_DIAMETER, + g_object_new(ADG_TYPE_DIM_STYLE, + "marker1", arrow1, + "marker2", arrow2, + "number-arguments", "d", + "number-format", ADG_UTF8_DIAMETER "%g", + NULL), + ADG_TYPE_DIM_STYLE); + g_object_unref(arrow1); + g_object_unref(arrow2); + + /* Predefined fill styles */ _adg_data_register(ADG_DRESS_FILL, diff --git a/src/adg/adg-enums.h b/src/adg/adg-enums.h index e52095e4..0d105956 100644 --- a/src/adg/adg-enums.h +++ b/src/adg/adg-enums.h @@ -93,6 +93,7 @@ typedef enum { ADG_DRESS_DIMENSION, ADG_DRESS_DIMENSION_ANGULAR, ADG_DRESS_DIMENSION_RADIUS, + ADG_DRESS_DIMENSION_DIAMETER, ADG_DRESS_FILL, ADG_DRESS_FILL_HATCH, ADG_DRESS_TABLE diff --git a/src/adg/tests/test-dim.c b/src/adg/tests/test-dim.c index 199522b0..f9a447fd 100644 --- a/src/adg/tests/test-dim.c +++ b/src/adg/tests/test-dim.c @@ -544,11 +544,30 @@ _adg_method_get_text(void) dim = ADG_DIM(adg_ldim_new()); dim_style = ADG_DIM_STYLE(adg_entity_style(ADG_ENTITY(dim), ADG_DRESS_DIMENSION)); - /* Default rendering should round to 2 decimals */ + /* Checking predefined dresses */ + + /* Default dress: ADG_DRESS_DIMENSION */ text = adg_dim_get_text(dim, 7.891); g_assert_cmpstr(text, ==, "7.89"); g_free(text); + adg_dim_set_dim_dress(dim, ADG_DRESS_DIMENSION_ANGULAR); + text = adg_dim_get_text(dim, 7.891); + g_assert_cmpstr(text, ==, "7.89°"); + g_free(text); + + adg_dim_set_dim_dress(dim, ADG_DRESS_DIMENSION_RADIUS); + text = adg_dim_get_text(dim, 7.891); + g_assert_cmpstr(text, ==, "R7.89"); + g_free(text); + + adg_dim_set_dim_dress(dim, ADG_DRESS_DIMENSION_DIAMETER); + text = adg_dim_get_text(dim, 7.891); + g_assert_cmpstr(text, ==, ADG_UTF8_DIAMETER "7.89"); + g_free(text); + + /* Restore the default dress */ + adg_dim_set_dim_dress(dim, ADG_DRESS_DIMENSION); text = adg_dim_get_text(dim, 3.456); g_assert_cmpstr(text, ==, "3.46"); g_free(text); -- 2.11.4.GIT