@Override
	public void mouseDragged(MouseEvent e) {
		if (e.isConsumed() || (selectedTask == null)) {
			return;
		}

		Graphics2D g2 = (Graphics2D)chart.getGraphics();
		g2.setXORMode(Color.WHITE);
		g2.draw(new Line2D.Double(selectedPoint, lastPoint));

		lastPoint = e.getPoint();
		Object hoverTask = chart.getTaskAtPoint(lastPoint);
		
		if ((hoverTask == null) || (hoverTask == selectedTask)) {
			if (targetBounds != null) {
				g2.draw(targetBounds);
			}
			
			targetBounds = null;
		} else if (hoverTask != targetTask) {
			if (targetBounds != null) {
				g2.draw(targetBounds);
			}
			
			targetTask = hoverTask;
			targetBounds = chart.getTaskBounds(targetTask, 
					chart.getRow(lastPoint.getY()), 0, 0);
			targetBounds.setRect(targetBounds.getX()-1.0, 
					targetBounds.getY()-1.0, targetBounds.getWidth()+2.0, 
					targetBounds.getHeight()+2.0);
			g2.draw(targetBounds);
		}
		
		g2.draw(new Line2D.Double(selectedPoint, lastPoint));
		g2.setPaintMode();
		
		e.consume();
	}