widget/Screen.cpp
author Andreas Tolfsen <ato@sny.no>
Thu, 11 Oct 2018 16:40:36 +0000
changeset 443621 9ca2c179e63e292808918158eb778b16bf18e67f
parent 398756 ef2f9e08e01238ae5893951fa13aafdaa3146f45
child 448947 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
bug 1492499: marionette: warn on TimedPromise bailing; r=automatedtester We often use TimedPromise to ensure Marionette does not unexpectedly block on a promise that, for whatever reason, does not resolve. It can however be useful to be alerted when they don't, as it quite often means there is an underlying problem. Depends on D8406 Differential Revision: https://phabricator.services.mozilla.com/D8407

/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 2; -*- */
/* vim: set sw=4 ts=8 et tw=80 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "Screen.h"

#include "mozilla/dom/DOMTypes.h"

namespace mozilla {
namespace widget {

NS_IMPL_ISUPPORTS(Screen, nsIScreen)

Screen::Screen(LayoutDeviceIntRect aRect, LayoutDeviceIntRect aAvailRect,
               uint32_t aPixelDepth, uint32_t aColorDepth,
               DesktopToLayoutDeviceScale aContentsScale,
               CSSToLayoutDeviceScale aDefaultCssScale,
               float aDPI)
  : mRect(aRect)
  , mAvailRect(aAvailRect)
  , mRectDisplayPix(RoundedToInt(aRect / aContentsScale))
  , mAvailRectDisplayPix(RoundedToInt(aAvailRect / aContentsScale))
  , mPixelDepth(aPixelDepth)
  , mColorDepth(aColorDepth)
  , mContentsScale(aContentsScale)
  , mDefaultCssScale(aDefaultCssScale)
  , mDPI(aDPI)
{
}

Screen::Screen(const mozilla::dom::ScreenDetails& aScreen)
  : mRect(aScreen.rect())
  , mAvailRect(aScreen.availRect())
  , mRectDisplayPix(aScreen.rectDisplayPix())
  , mAvailRectDisplayPix(aScreen.availRectDisplayPix())
  , mPixelDepth(aScreen.pixelDepth())
  , mColorDepth(aScreen.colorDepth())
  , mContentsScale(aScreen.contentsScaleFactor())
  , mDefaultCssScale(aScreen.defaultCSSScaleFactor())
  , mDPI(aScreen.dpi())
{
}

Screen::Screen(const Screen& aOther)
  : mRect(aOther.mRect)
  , mAvailRect(aOther.mAvailRect)
  , mRectDisplayPix(aOther.mRectDisplayPix)
  , mAvailRectDisplayPix(aOther.mAvailRectDisplayPix)
  , mPixelDepth(aOther.mPixelDepth)
  , mColorDepth(aOther.mColorDepth)
  , mContentsScale(aOther.mContentsScale)
  , mDefaultCssScale(aOther.mDefaultCssScale)
  , mDPI(aOther.mDPI)
{
}

mozilla::dom::ScreenDetails
Screen::ToScreenDetails()
{
  return mozilla::dom::ScreenDetails(
    mRect, mRectDisplayPix, mAvailRect, mAvailRectDisplayPix,
    mPixelDepth, mColorDepth, mContentsScale, mDefaultCssScale, mDPI);
}

NS_IMETHODIMP
Screen::GetRect(int32_t* aOutLeft,
                int32_t* aOutTop,
                int32_t* aOutWidth,
                int32_t* aOutHeight)
{
  mRect.GetRect(aOutLeft, aOutTop, aOutWidth, aOutHeight);
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetRectDisplayPix(int32_t* aOutLeft,
                          int32_t* aOutTop,
                          int32_t* aOutWidth,
                          int32_t* aOutHeight)
{
  mRectDisplayPix.GetRect(aOutLeft, aOutTop, aOutWidth, aOutHeight);
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetAvailRect(int32_t* aOutLeft,
                     int32_t* aOutTop,
                     int32_t* aOutWidth,
                     int32_t* aOutHeight)
{
  mAvailRect.GetRect(aOutLeft, aOutTop, aOutWidth, aOutHeight);
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetAvailRectDisplayPix(int32_t* aOutLeft,
                               int32_t* aOutTop,
                               int32_t* aOutWidth,
                               int32_t* aOutHeight)
{
  mAvailRectDisplayPix.GetRect(aOutLeft, aOutTop, aOutWidth, aOutHeight);
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetPixelDepth(int32_t* aPixelDepth)
{
  *aPixelDepth = mPixelDepth;
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetColorDepth(int32_t* aColorDepth)
{
  *aColorDepth = mColorDepth;
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetContentsScaleFactor(double *aOutScale)
{
  *aOutScale = mContentsScale.scale;
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetDefaultCSSScaleFactor(double *aOutScale)
{
  double scale = nsIWidget::DefaultScaleOverride();
  if (scale > 0.0) {
    *aOutScale = scale;
  } else {
    *aOutScale = mDefaultCssScale.scale;
  }
  return NS_OK;
}

NS_IMETHODIMP
Screen::GetDpi(float* aDPI)
{
  *aDPI = mDPI;
  return NS_OK;
}

} // namespace widget
} // namespace mozilla