ADG

Sign in or create your account | Project List | Help

ADG Commit Details

Date:2010-07-02 22:32:52 (2 months 5 days ago)
Author:Nicola Fontana
Commit:0b819f2f2712c65d2504cbcf50d549aced3ca610
Message:[AdgLDim] Avoid the rendering of incomplete entities


Checking the availability of all the needed data to define the entity
and avoid the arrange() and render() phases on condition not fulfilled.
Files: src/adg/adg-ldim.c (6 diffs)

Change Details

src/adg/adg-ldim.c
6969static void _adg_render (AdgEntity *entity,
7070                                                 cairo_t *cr);
7171static gchar * _adg_default_value (AdgDim *dim);
72static void _adg_update_geometry (AdgLDim *ldim);
72static gboolean _adg_update_geometry (AdgLDim *ldim);
7373static void _adg_update_shift (AdgLDim *ldim);
7474static void _adg_update_entities (AdgLDim *ldim);
7575static void _adg_choose_flags (AdgLDim *ldim,
...... 
524524        _ADG_OLD_ENTITY_CLASS->arrange(entity);
525525
526526    ldim = (AdgLDim *) entity;
527
528    if (!_adg_update_geometry(ldim))
529        return;
530
527531    dim = (AdgDim *) ldim;
528532    data = ldim->data;
529533    quote = adg_dim_get_quote(dim);
530
531    _adg_update_geometry(ldim);
532534    _adg_update_shift(ldim);
533535    _adg_update_entities(ldim);
534536
...... 
775777    ldim = (AdgLDim *) entity;
776778    dim = (AdgDim *) entity;
777779    data = ldim->data;
780
781    if (!data->geometry.is_arranged) {
782        /* Entity not arranged, probably due to undefined pair found */
783        return;
784    }
785
778786    dim_style = _ADG_GET_DIM_STYLE(dim);
779787
780788    adg_style_apply((AdgStyle *) dim_style, entity, cr);
...... 
807815    dim_style = _ADG_GET_DIM_STYLE(dim);
808816    format = adg_dim_style_get_number_format(dim_style);
809817
810    _adg_update_geometry(ldim);
818    if (!_adg_update_geometry(ldim))
819        return g_strdup("undef");
811820
812821    return g_strdup_printf(format, data->geometry.distance);
813822}
814823
815static void
824static gboolean
816825_adg_update_geometry(AdgLDim *ldim)
817826{
818827    AdgLDimPrivate *data;
...... 
823832    gdouble d, k;
824833
825834    data = ldim->data;
826
827    if (data->geometry.is_arranged)
828        return;
829
830835    dim = (AdgDim *) ldim;
831836    ref1 = adg_point_get_pair(adg_dim_get_ref1(dim));
832837    ref2 = adg_point_get_pair(adg_dim_get_ref2(dim));
833838    pos = adg_point_get_pair(adg_dim_get_pos(dim));
839
840    /* Check if the needed pairs are properly defined */
841    if (ref1 == NULL || ref2 == NULL || pos == NULL) {
842        data->geometry.is_arranged = FALSE;
843        return FALSE;
844    } else if (data->geometry.is_arranged) {
845        return TRUE;
846    }
847
834848    cpml_vector_from_angle(&extension, data->direction);
835849    cpml_pair_copy(&baseline, &extension);
836850    cpml_vector_normal(&baseline);
837851
838852    d = extension.y * baseline.x -
839853        extension.x * baseline.y;
840    g_return_if_fail(d != 0);
854    g_return_val_if_fail(d != 0, FALSE);
841855
842856    k = ((pos->y - ref1->y) * baseline.x -
843857         (pos->x - ref1->x) * baseline.y) / d;
...... 
853867                                                 &data->geometry.base2);
854868
855869    data->geometry.is_arranged = TRUE;
870
871    return TRUE;
856872}
857873
858874static void
859875

Archive Download the corresponding diff file