Index: src/load-graph.cpp
===================================================================
--- src/load-graph.cpp	(révision 2558)
+++ src/load-graph.cpp	(copie de travail)
@@ -237,13 +237,30 @@
 		for (i = 1; i < LoadGraph::NUM_POINTS; ++i) {
 			if (g->data[i][j] == -1.0f)
 				continue;
+			double x_cur, x_middle, x_prev;
+			double y_cur, y_next, y_prev, y_prev_prev;
+			double y_middle_prev, y_middle_cur;
+			double slope_prev, slope_cur;
+			x_cur = x_offset - (i * g->graph_delx);
+			x_prev = x_offset - ((i-1) * g->graph_delx);
+			x_middle = x_offset - ((i - 0.5f) * g->graph_delx);
+			y_cur = (1.0f - g->data[i][j]) * g->real_draw_height + 3.5f,
+			y_prev = (1.0f - g->data[i-1][j]) * g->real_draw_height + 3.5f,
+			y_prev_prev = (i > 1) ? (1.0f - g->data[i-2][j]) * g->real_draw_height + 3.5f
+					      : y_prev;
+			y_next = (i < LoadGraph::NUM_POINTS - 1) ? (1.0f - g->data[i+1][j]) * g->real_draw_height + 3.5f
+								 : y_cur;
+			slope_prev = (y_prev_prev - y_cur) / (2.0f * g->graph_delx);
+			slope_cur = (y_prev - y_next) / (2.0f * g->graph_delx);
+			y_middle_prev = std::min (g->real_draw_height + 3.5, 
+					std::max (0.0, y_prev - slope_prev * (g->graph_delx / 2.0f)));
+			y_middle_cur = std::min (g->real_draw_height + 3.5,
+				       std::max (0.0, y_cur + slope_cur * (g->graph_delx / 2.0f)));
+			
 			cairo_curve_to (cr, 
-				       x_offset - ((i - 0.5f) * g->graph_delx),
-				       (1.0f - g->data[i-1][j]) * g->real_draw_height + 3.5f,
-				       x_offset - ((i - 0.5f) * g->graph_delx),
-				       (1.0f - g->data[i][j]) * g->real_draw_height + 3.5f,
-				       x_offset - (i * g->graph_delx),
-				       (1.0f - g->data[i][j]) * g->real_draw_height + 3.5f);
+					x_middle, y_middle_prev,
+					x_middle, y_middle_cur,
+					x_cur, y_cur);
 		}
 		cairo_stroke (cr);
 
