From 92ab9d68c9eb077251f6a97f4880c7fcc462e9ea Mon Sep 17 00:00:00 2001 From: Nicola Fontana Date: Sat, 19 Sep 2009 19:33:33 +0200 Subject: [PATCH] [AdgLDim] Removed adg_entity_rendered() call I am going to remove the flag APIs of AdgEntity because the use of flags on an entity basis is too coarse. Arrangement and rendering cache should be done independently from every atomic component of the entity. --- adg/adg-ldim-private.h | 9 ++++++--- adg/adg-ldim.c | 35 ++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/adg/adg-ldim-private.h b/adg/adg-ldim-private.h index aba9f010..3c019a8a 100644 --- a/adg/adg-ldim-private.h +++ b/adg/adg-ldim-private.h @@ -73,9 +73,12 @@ struct _AdgLDimPrivate { AdgMarker *marker1; AdgMarker *marker2; - CpmlPair from_shift; - CpmlPair marker_shift; - CpmlPair to_shift; + struct { + gboolean is_arranged; + CpmlPair from; + CpmlPair marker; + CpmlPair to; + } shift; }; struct _AdgLDimContext { diff --git a/adg/adg-ldim.c b/adg/adg-ldim.c index 27101339..7cdc04cf 100644 --- a/adg/adg-ldim.c +++ b/adg/adg-ldim.c @@ -478,6 +478,13 @@ adg_ldim_switch_extension2(AdgLDim *ldim, gboolean state) static void invalidate(AdgEntity *entity) { + AdgLDim *ldim; + AdgLDimPrivate *data; + + ldim = (AdgLDim *) entity; + data = ldim->data; + + data->shift.is_arranged = FALSE; dispose_markers((AdgLDim *) entity); if (PARENT_ENTITY_CLASS->invalidate != NULL) @@ -562,16 +569,18 @@ update_shifts(AdgLDim *ldim, const AdgLDimContext *context) cairo_matrix_init_rotate(&matrix, data->direction); - data->from_shift.x = data->from_shift.y = 0; - data->marker_shift.x = data->marker_shift.y = 0; - data->to_shift.x = data->to_shift.y = 0; + data->shift.from.x = data->shift.from.y = 0; + data->shift.marker.x = data->shift.marker.y = 0; + data->shift.to.x = data->shift.to.y = 0; cairo_matrix_translate(&matrix, from_offset, 0); - cpml_pair_transform(&data->from_shift, &matrix); + cpml_pair_transform(&data->shift.from, &matrix); cairo_matrix_translate(&matrix, to_offset-from_offset, 0); - cpml_pair_transform(&data->to_shift, &matrix); + cpml_pair_transform(&data->shift.to, &matrix); cairo_matrix_translate(&matrix, level*baseline_spacing-to_offset, 0); - cpml_pair_transform(&data->marker_shift, &matrix); + cpml_pair_transform(&data->shift.marker, &matrix); + + data->shift.is_arranged = TRUE; } static void @@ -596,7 +605,7 @@ layout(AdgLDim *ldim, const AdgLDimContext *context) cpml_pair_copy(&pos2, adg_dim_get_pos2(dim)); outside = FALSE; - if (!adg_entity_get_rendered(entity)) + if (!data->shift.is_arranged) update_shifts(ldim, context); cpml_pair_transform(&ref1, &local); @@ -604,22 +613,22 @@ layout(AdgLDim *ldim, const AdgLDimContext *context) cpml_pair_transform(&pos1, &local); cpml_pair_transform(&pos2, &local); - cpml_pair_add(cpml_pair_copy(&pair, &ref1), &data->from_shift); + cpml_pair_add(cpml_pair_copy(&pair, &ref1), &data->shift.from); cpml_pair_to_cairo(&pair, &data->cpml.data[13]); - cpml_pair_add(cpml_pair_copy(&pair, &pos1), &data->marker_shift); + cpml_pair_add(cpml_pair_copy(&pair, &pos1), &data->shift.marker); cpml_pair_to_cairo(&pair, &data->cpml.data[1]); - cpml_pair_add(&pair, &data->to_shift); + cpml_pair_add(&pair, &data->shift.to); cpml_pair_to_cairo(&pair, &data->cpml.data[15]); - cpml_pair_add(cpml_pair_copy(&pair, &ref2), &data->from_shift); + cpml_pair_add(cpml_pair_copy(&pair, &ref2), &data->shift.from); cpml_pair_to_cairo(&pair, &data->cpml.data[17]); - cpml_pair_add(cpml_pair_copy(&pair, &pos2), &data->marker_shift); + cpml_pair_add(cpml_pair_copy(&pair, &pos2), &data->shift.marker); cpml_pair_to_cairo(&pair, &data->cpml.data[3]); - cpml_pair_add(&pair, &data->to_shift); + cpml_pair_add(&pair, &data->shift.to); cpml_pair_to_cairo(&pair, &data->cpml.data[19]); /* Calculate the outside segments */ -- 2.11.4.GIT