diff --git a/sw/logalizer/plot.ml b/sw/logalizer/plot.ml index 5b11b8bd28..915ffb5f2b 100644 --- a/sw/logalizer/plot.ml +++ b/sw/logalizer/plot.ml @@ -48,14 +48,6 @@ let remove_same_t = fun l -> | l -> l in loop 0 l -let rec remove_older t0 = function - (t,_)::l when t < t0 -> remove_older t0 l - | l -> l - -let rec remove_newer t0 = function - (t,v)::l when t <= t0 -> (t,v)::remove_newer t0 l - | l -> [] - let compute_ticks = fun min_y max_y -> let delta = max_y -. min_y in @@ -303,7 +295,7 @@ class plot = fun ~width ~height ~packing () -> let renderer = fig_renderer (self#da_renderer ())#size in self#recompute ~renderer () - method recompute = fun ?(renderer=self#da_renderer ()) () -> + method recompute = fun ?(renderer=self#da_renderer ()) ?(low_res=false) () -> let (width, height) = renderer#size in renderer#init (); @@ -330,12 +322,11 @@ class plot = fun ~width ~height ~packing () -> (* Curves *) let title_y = ref margin in Hashtbl.iter (fun title curve -> - let points = Array.to_list (Array.map (fun (t, v) -> (scale_x t, scale_y v)) curve.values) in - (* let points = remove_same_t points in *) - let points = remove_older (scale_x min_x) points in - let points = remove_newer (scale_x max_x) points in + let step = if low_res then 10 else 1 in + let points = ref [] in + Array.iteri (fun i (t, v) -> if t > min_x && t <= max_x && (i mod step = 0) then points := List.rev_append [(scale_x t, scale_y v)] !points) curve.values; renderer#set_color curve.color; - renderer#lines points; + renderer#lines !points; (* Title *) let (w, h) = renderer#create_text title in @@ -410,7 +401,7 @@ class plot = fun ~width ~height ~packing () -> max_x <- max_x +. dx; min_y <- min_y +. dy; max_y <- max_y +. dy; - self#recompute () + self#recompute ~low_res:true () method button_press = fun ev -> pressed_button <- Some (GdkEvent.Button.button ev); @@ -432,7 +423,7 @@ class plot = fun ~width ~height ~packing () -> Some 1 -> motion_x <- x; motion_y <- y; - self#recompute (); + self#recompute ~low_res:true (); true | Some 2 -> (* middle button, scroll *) self#scroll (truncate (press_x-.x)) (truncate (y-.press_y)); @@ -461,6 +452,8 @@ class plot = fun ~width ~height ~packing () -> self#recompute () end; true + | 2 -> self#recompute (); (* recompute at full resolution after a scroll *) + true | _ -> false method zoom = fun ev ->