| 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 | ||
|---|---|---|
| 69 | 69 | static void _adg_render (AdgEntity *entity, |
| 70 | 70 | cairo_t *cr); |
| 71 | 71 | static gchar * _adg_default_value (AdgDim *dim); |
| 72 | static void _adg_update_geometry (AdgLDim *ldim); | |
| 72 | static gboolean _adg_update_geometry (AdgLDim *ldim); | |
| 73 | 73 | static void _adg_update_shift (AdgLDim *ldim); |
| 74 | 74 | static void _adg_update_entities (AdgLDim *ldim); |
| 75 | 75 | static void _adg_choose_flags (AdgLDim *ldim, |
| ... | ... | |
| 524 | 524 | _ADG_OLD_ENTITY_CLASS->arrange(entity); |
| 525 | 525 | |
| 526 | 526 | ldim = (AdgLDim *) entity; |
| 527 | ||
| 528 | if (!_adg_update_geometry(ldim)) | |
| 529 | return; | |
| 530 | ||
| 527 | 531 | dim = (AdgDim *) ldim; |
| 528 | 532 | data = ldim->data; |
| 529 | 533 | quote = adg_dim_get_quote(dim); |
| 530 | ||
| 531 | _adg_update_geometry(ldim); | |
| 532 | 534 | _adg_update_shift(ldim); |
| 533 | 535 | _adg_update_entities(ldim); |
| 534 | 536 | |
| ... | ... | |
| 775 | 777 | ldim = (AdgLDim *) entity; |
| 776 | 778 | dim = (AdgDim *) entity; |
| 777 | 779 | data = ldim->data; |
| 780 | ||
| 781 | if (!data->geometry.is_arranged) { | |
| 782 | /* Entity not arranged, probably due to undefined pair found */ | |
| 783 | return; | |
| 784 | } | |
| 785 | ||
| 778 | 786 | dim_style = _ADG_GET_DIM_STYLE(dim); |
| 779 | 787 | |
| 780 | 788 | adg_style_apply((AdgStyle *) dim_style, entity, cr); |
| ... | ... | |
| 807 | 815 | dim_style = _ADG_GET_DIM_STYLE(dim); |
| 808 | 816 | format = adg_dim_style_get_number_format(dim_style); |
| 809 | 817 | |
| 810 | _adg_update_geometry(ldim); | |
| 818 | if (!_adg_update_geometry(ldim)) | |
| 819 | return g_strdup("undef"); | |
| 811 | 820 | |
| 812 | 821 | return g_strdup_printf(format, data->geometry.distance); |
| 813 | 822 | } |
| 814 | 823 | |
| 815 | static void | |
| 824 | static gboolean | |
| 816 | 825 | _adg_update_geometry(AdgLDim *ldim) |
| 817 | 826 | { |
| 818 | 827 | AdgLDimPrivate *data; |
| ... | ... | |
| 823 | 832 | gdouble d, k; |
| 824 | 833 | |
| 825 | 834 | data = ldim->data; |
| 826 | ||
| 827 | if (data->geometry.is_arranged) | |
| 828 | return; | |
| 829 | ||
| 830 | 835 | dim = (AdgDim *) ldim; |
| 831 | 836 | ref1 = adg_point_get_pair(adg_dim_get_ref1(dim)); |
| 832 | 837 | ref2 = adg_point_get_pair(adg_dim_get_ref2(dim)); |
| 833 | 838 | 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 | ||
| 834 | 848 | cpml_vector_from_angle(&extension, data->direction); |
| 835 | 849 | cpml_pair_copy(&baseline, &extension); |
| 836 | 850 | cpml_vector_normal(&baseline); |
| 837 | 851 | |
| 838 | 852 | d = extension.y * baseline.x - |
| 839 | 853 | extension.x * baseline.y; |
| 840 | g_return_if_fail(d != 0); | |
| 854 | g_return_val_if_fail(d != 0, FALSE); | |
| 841 | 855 | |
| 842 | 856 | k = ((pos->y - ref1->y) * baseline.x - |
| 843 | 857 | (pos->x - ref1->x) * baseline.y) / d; |
| ... | ... | |
| 853 | 867 | &data->geometry.base2); |
| 854 | 868 | |
| 855 | 869 | data->geometry.is_arranged = TRUE; |
| 870 | ||
| 871 | return TRUE; | |
| 856 | 872 | } |
| 857 | 873 | |
| 858 | 874 | static void |
| 859 | 875 | |
