Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Chart.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Chart.cs	(revision 13104)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Chart.cs	(revision 13105)
@@ -41,4 +41,14 @@
     }
 
+    private Color backgroundColor;
+    public Color BackgroundColor {
+      get { return backgroundColor; }
+      set {
+        if (backgroundColor == value) return;
+        backgroundColor = value;
+        OnRedrawRequired();
+      }
+    }
+
     protected bool SuppressRedraw { get; set; }
 
@@ -75,4 +85,5 @@
       SetPosition(lowerLeft, upperRight);
       mySizeInPixels = new Size((int)Size.Width, (int)Size.Height);
+      backgroundColor = Color.White;
       Scale = 1.0;
       Group = new Group(this);
@@ -228,4 +239,5 @@
     public virtual void Render(Graphics graphics, int width, int height) {
       mySizeInPixels = new Size(width, height);
+      graphics.Clear(backgroundColor);
       Group.PreDraw(graphics);
       Group.Draw(graphics);
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs	(revision 13104)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs	(revision 13105)
@@ -39,4 +39,12 @@
     public PictureBox PictureBox { get { return pictureBox; } }
 
+    public Color BackgroundColor {
+      get { return chart != null ? chart.BackgroundColor : null; }
+      set {
+        if (chart == null || chart.BackgroundColor == value) return;
+        chart.BackgroundColor = value;
+      }
+    }
+
     private IChart chart;
     public IChart Chart {
Index: anches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/MoveChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/MoveChartMode.cs	(revision 13104)
+++ 	(revision )
@@ -1,65 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Drawing;
-using System.Windows.Forms;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.Visualization {
-  public class MoveChartMode : ChartMode {
-    public override Image Image { get { return VSImageLibrary.Breakpoint; } }
-    public override string ToolTip { get { return "Move"; } }
-
-    public override Cursor Cursor {
-      get { return cursor ?? (cursor = new Cursor(typeof(ChartControl), "Resources.Hand.cur")); }
-    }
-
-    public MoveChartMode(ChartControl control) : base(control) { }
-
-    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
-      base.HandleOnMouseUp(sender, e);
-
-      switch (e.Button) {
-        case MouseButtons.Middle:
-          chartControl.Chart.Unzoom();
-          break;
-      }
-    }
-
-    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
-      base.HandleOnMouseMove(sender, e);
-
-      try {
-        switch (e.Button) {
-          case MouseButtons.Left:
-            var previousWorldLocation = chartControl.Chart.TransformPixelToWorld(previousLocation);
-            var worldLocation = chartControl.Chart.TransformPixelToWorld(e.Location);
-            var offset = worldLocation - previousWorldLocation;
-            chartControl.Chart.Move(new Offset(-1 * offset.DX, -1 * offset.DY));
-            break;
-        }
-      } finally {
-        previousLocation = e.Location;
-        chartControl.PictureBox.Update();
-      }
-    }
-  }
-}
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs	(revision 13105)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs	(revision 13105)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.Visualization {
+  public class PanChartMode : ChartMode {
+    public override Image Image { get { return VSImageLibrary.Breakpoint; } }
+    public override string ToolTip { get { return "Pan"; } }
+
+    public override Cursor Cursor {
+      get { return cursor ?? (cursor = new Cursor(typeof(ChartControl), "Resources.Hand.cur")); }
+    }
+
+    public PanChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
+      base.HandleOnMouseUp(sender, e);
+
+      switch (e.Button) {
+        case MouseButtons.Middle:
+          chartControl.Chart.Unzoom();
+          break;
+      }
+    }
+
+    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
+      base.HandleOnMouseMove(sender, e);
+
+      try {
+        switch (e.Button) {
+          case MouseButtons.Left:
+            var previousWorldLocation = chartControl.Chart.TransformPixelToWorld(previousLocation);
+            var worldLocation = chartControl.Chart.TransformPixelToWorld(e.Location);
+            var offset = worldLocation - previousWorldLocation;
+            chartControl.Chart.Move(new Offset(-1 * offset.DX, -1 * offset.DY));
+            break;
+        }
+      } finally {
+        previousLocation = e.Location;
+        chartControl.PictureBox.Update();
+      }
+    }
+  }
+}
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs	(revision 13105)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs	(revision 13105)
@@ -0,0 +1,114 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.Visualization.ChartModes {
+  public class RulerChartMode : ChartMode {
+    protected Point? startPoint;
+
+    public override Image Image {
+      get { return VSImageLibrary.TrackBar; }
+    }
+
+    public override string ToolTip {
+      get { return "Ruler"; }
+    }
+
+    public override Cursor Cursor {
+      get { return Cursors.Cross; }
+    }
+
+    public RulerChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
+      base.HandleOnMouseMove(sender, e);
+
+      if (startPoint.HasValue) {
+        try {
+          chartControl.PictureBox.Refresh();
+          DrawCross(startPoint.Value);
+          DrawCross(e.Location);
+          DrawLineBetweenLocations(startPoint.Value, e.Location);
+        } finally {
+          chartControl.PictureBox.Update();
+        }
+      }
+    }
+
+    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
+      base.HandleOnMouseUp(sender, e);
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          if (!startPoint.HasValue)
+            startPoint = e.Location;
+          else {
+            if (e.Location != startPoint.Value)
+              DrawInfoBox(e.Location);
+            else {
+              chartControl.PictureBox.Refresh();
+              chartControl.PictureBox.Update();
+            }
+
+            startPoint = null;
+          }
+          break;
+      }
+    }
+
+    protected virtual void DrawCross(Point point) {
+      using (var graphics = chartControl.PictureBox.CreateGraphics())
+      using (var pen = new Pen(Color.Red)) {
+        graphics.DrawLine(pen, point.X - 3, point.Y - 3, point.X + 3, point.Y + 3);
+        graphics.DrawLine(pen, point.X - 3, point.Y + 3, point.X + 3, point.Y - 3);
+      }
+    }
+
+    protected virtual void DrawLineBetweenLocations(Point startLocation, Point endLocation) {
+      using (var graphics = chartControl.PictureBox.CreateGraphics())
+      using (var pen = new Pen(Color.Red))
+        graphics.DrawLine(pen, startLocation.X, startLocation.Y, endLocation.X, endLocation.Y);
+    }
+
+    protected virtual void DrawInfoBox(Point location) {
+      var offsetP = new Size(location.X - startPoint.Value.X, location.Y - startPoint.Value.Y);
+      var offsetW = chartControl.Chart.TransformPixelToWorld(offsetP);
+
+      double lengthP = Math.Sqrt(Math.Pow(offsetP.Width, 2) + Math.Pow(offsetP.Height, 2));
+      double lengthW = Math.Sqrt(Math.Pow(offsetW.Width, 2) + Math.Pow(offsetW.Height, 2));
+      string text = string.Format("Pixel: {0}{1}World: {2:##.###}", Math.Round(lengthP), Environment.NewLine, Math.Round(lengthW, 3));
+
+      using (var graphics = chartControl.PictureBox.CreateGraphics()) {
+        var textSize = graphics.MeasureString(text, SystemFonts.DefaultFont);
+        int width = (int)Math.Ceiling(textSize.Width);
+        int height = (int)Math.Ceiling(textSize.Height);
+
+        graphics.FillRectangle(Brushes.White, location.X, location.Y, width, height);
+        graphics.DrawRectangle(Pens.Red, location.X, location.Y, width, height);
+        graphics.DrawString(text, SystemFonts.DefaultFont, Brushes.Black, location.X, location.Y + 2);
+      }
+    }
+  }
+}
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/HeuristicLab.Visualization-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/HeuristicLab.Visualization-3.3.csproj	(revision 13104)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/HeuristicLab.Visualization-3.3.csproj	(revision 13105)
@@ -130,5 +130,6 @@
     <Compile Include="ChartMode.cs" />
     <Compile Include="AxisType.cs" />
-    <Compile Include="ChartModes\MoveChartMode.cs" />
+    <Compile Include="ChartModes\PanChartMode.cs" />
+    <Compile Include="ChartModes\RulerChartMode.cs" />
     <Compile Include="Primitives\Grid.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Interfaces/IChart.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Interfaces/IChart.cs	(revision 13104)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/Interfaces/IChart.cs	(revision 13105)
@@ -28,4 +28,5 @@
   public interface IChart {
     bool Enabled { get; set; }
+    Color BackgroundColor { get; set; }
 
     PointD LowerLeft { get; }
