From 21ad165a644e956c51730996fc8d7a502748eda9 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Sat, 16 Nov 2013 21:16:07 +0000 Subject: [PATCH] Fix highlight draw to cope with cut layers. Add efficiency improvement for a highlighted layer to not be drawn twice. --- src/viklayerspanel.c | 7 +++++-- src/viktrwlayer.c | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/viklayerspanel.c b/src/viklayerspanel.c index 48050d15..8bd534a0 100644 --- a/src/viklayerspanel.c +++ b/src/viklayerspanel.c @@ -582,8 +582,11 @@ void vik_layers_panel_cut_selected ( VikLayersPanel *vlp ) a_clipboard_copy_selected ( vlp ); if (IS_VIK_AGGREGATE_LAYER(parent)) { - if ( vik_aggregate_layer_delete ( parent, &iter ) ) - vik_layers_panel_emit_update ( vlp ); + + g_signal_emit ( G_OBJECT(vlp), layers_panel_signals[VLP_DELETE_LAYER_SIGNAL], 0 ); + + if ( vik_aggregate_layer_delete ( parent, &iter ) ) + vik_layers_panel_emit_update ( vlp ); } } else diff --git a/src/viktrwlayer.c b/src/viktrwlayer.c index e504fed0..0d467fe1 100644 --- a/src/viktrwlayer.c +++ b/src/viktrwlayer.c @@ -2369,11 +2369,13 @@ static void trw_layer_draw_with_highlight ( VikTrwLayer *l, gpointer data, gbool static void trw_layer_draw ( VikTrwLayer *l, gpointer data ) { - // TODO: learn which highlight vtl in dp somehow or just ask vikwindow here, - // then check if highlighted vtl and skip drawing if (highlight mode off) - // as it will then get redrawn - // may seem slightly inefficient - but for very large vtls, this should save redraws... - trw_layer_draw_with_highlight ( l, data, FALSE ) ; + // If this layer is to be highlighted - then don't draw now - as it will be drawn later on in the specific highlight draw stage + // This may seem slightly inefficient to test each time for every layer + // but for a layer with *lots* of tracks & waypoints this can save some effort by not drawing the items twice + if ( vik_viewport_get_draw_highlight ( (VikViewport*)data ) && + vik_window_get_selected_trw_layer ((VikWindow*)VIK_GTK_WINDOW_FROM_LAYER((VikLayer*)l)) == l ) + return; + trw_layer_draw_with_highlight ( l, data, FALSE ); } void vik_trw_layer_draw_highlight ( VikTrwLayer *vtl, VikViewport *vvp ) -- 2.39.5