/// <summary>
 /// Create a frame(!) window screenshot
 /// </summary>
 /// <param name="logger"></param>
 /// <param name="driver"></param>
 /// <param name="image"></param>
 /// <param name="entireFrameSize"></param>
 public EyesWebDriverScreenshot(Logger logger, EyesWebDriver driver, Bitmap image, Size entireFrameSize, Point frameLocationInScreenshot)
     : base(image)
 {
     ArgumentGuard.NotNull(logger, nameof(logger));
     ArgumentGuard.NotNull(driver, nameof(driver));
     ArgumentGuard.NotNull(entireFrameSize, nameof(entireFrameSize));
     logger_     = logger;
     driver_     = driver;
     frameChain_ = driver_.GetFrameChain();
     // The frame comprises the entire screenshot.
     screenshotType_             = ScreenshotTypeEnum.ENTIRE_FRAME;
     currentFrameScrollPosition_ = new Point(0, 0);
     frameLocationInScreenshot_  = frameLocationInScreenshot;
     frameWindow_ = new Region(new Point(0, 0), entireFrameSize);
 }
        private Point CalcFrameLocationInScreenshot_(FrameChain frameChain, ScreenshotTypeEnum screenshotType)
        {
            EyesWebDriverTargetLocator switchTo = (EyesWebDriverTargetLocator)driver_.SwitchTo();
            FrameChain currentFC = frameChain.Clone();

            switchTo.DefaultContent();
            Point locationInScreenshot = Point.Empty;

            foreach (Frame frame in currentFC)
            {
                Rectangle          rect           = ((EyesRemoteWebElement)frame.Reference).GetClientBounds();
                SizeAndBorders     sizeAndBorders = ((EyesRemoteWebElement)frame.Reference).SizeAndBorders;
                RectangularMargins borders        = sizeAndBorders.Borders;
                rect.Offset(borders.Left, borders.Top);
                locationInScreenshot.Offset(rect.Location);
                switchTo.Frame(frame.Reference);
            }

            return(locationInScreenshot);
        }
        private void UpdateScreenshotType_(ScreenshotTypeEnum?screenshotType, Bitmap image)
        {
            if (screenshotType.HasValue)
            {
                logger_.Verbose("given {0} already have the value '{1}'. using it.", nameof(screenshotType), screenshotType.Value);
                screenshotType_ = screenshotType.Value;
                return;
            }

            Size viewportSize = driver_.GetDefaultContentViewportSize();

            if (image.Width <= viewportSize.Width && image.Height <= viewportSize.Height)
            {
                screenshotType_ = ScreenshotTypeEnum.VIEWPORT;
            }
            else
            {
                screenshotType_ = ScreenshotTypeEnum.ENTIRE_FRAME;
            }
            logger_.Verbose("updated screenshot type to {0}", screenshotType_);
        }