]> git.street.me.uk Git - andy/viking.git/commitdiff
Fix highlight draw to cope with cut layers.
authorRob Norris <rw_norris@hotmail.com>
Sat, 16 Nov 2013 21:16:07 +0000 (21:16 +0000)
committerRob Norris <rw_norris@hotmail.com>
Sat, 16 Nov 2013 23:02:41 +0000 (23:02 +0000)
Add efficiency improvement for a highlighted layer to not be drawn twice.

src/viklayerspanel.c
src/viktrwlayer.c

index 48050d152d138b5449925766a388653397aa1ac3..8bd534a01776747687764181d9ac4f9ad61b4508 100644 (file)
@@ -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
index e504fed06f68cdeb7be0a939f46275deac4900ab..0d467fe1127d8dfa9dd527a5030d52527f6943f4 100644 (file)
@@ -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 )