@Override
  public void mouseReleased(MouseEvent e) {
    // Is there a final point? At this stage, this means a rectangle is constructed.
    if (finalX > 0 && finalY > 0) {
      String dialogMsg = "Would you like to crop the image to the specified size?";
      int doCrop =
          JOptionPane.showConfirmDialog(
              null, dialogMsg, "SwiftSnap", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE);
      // If the user decides to crop the image using the rectangle...
      if (doCrop == JOptionPane.YES_OPTION) {
        // Crop and save the image.
        Screenshot.crop(new Rectangle(initialX, initialY, finalX - initialX, finalY - initialY));
        Screenshot.save();
        window.destroyWindow();
      }
    }

    // Reset some values and clear the canvas.
    initialX = 0;
    initialY = 0;
    finalX = 0;
    finalY = 0;
    clearCanvas = true;
    repaint();
  }
  @Override
  public void paintComponent(Graphics g) {
    // Set the brush color.
    g.setColor(new Color(255, 0, 0, 128));
    // If the canvas is requested to be cleared, clear the screen.
    if (clearCanvas) {
      g.clearRect(0, 0, totalScreenWidth, totalScreenHeight);
      clearCanvas = false;
    }

    g.drawImage(Screenshot.getLastScreenshot(), 0, 0, this);
    g.setFont(new Font("Arial", Font.PLAIN, 20));
    g.drawString("Set a point and drag your mouse to create a rectangle.", 50, 50);

    // If there is a final (which implies an initial as well) point.
    if (finalX > 0 && finalY > 0) {
      // Get the point to start drawing and the size of the rectangle.
      g.drawRect(initialX, initialY, finalX - initialX, finalY - initialY);
    } else if (initialX > 0 && initialY > 0) { // Initial points set only?
      // Draw the initial point.
      g.fillRect(initialX, initialY, 5, 5);
    }
  }
 @Test
 public void a_failing_screenshot_records_the_error_message() {
   Screenshot screenshot =
       new Screenshot("step_1.png", "Step 1", 800, new AssertionError("Element not found"));
   assertThat(screenshot.getErrorMessage(), is("Element not found"));
 }
 @Test
 public void a_screenshot_without_an_error_message__returns_an_empty_string() {
   Screenshot screenshot = new Screenshot("step_1.png", "Step 1", 800);
   assertThat(screenshot.getErrorMessage(), is(""));
 }