gecko-dev/widget/Screen.cpp
Samael Wang 3810bc3903 Bug 1350643 - Part 3: Add GetDPI to nsIScreen & ScreenDetails. r=kanru
MozReview-Commit-ID: HEFyuYV26Wy

--HG--
extra : rebase_source : fb172f4ba99ab7119036ddf4ec1b3eeeaead186c
2017-06-06 18:09:34 +08:00

161 lines
4.1 KiB
C++

/* -*- 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)
{
*aOutLeft = mRect.x;
*aOutTop = mRect.y;
*aOutWidth = mRect.width;
*aOutHeight = mRect.height;
return NS_OK;
}
NS_IMETHODIMP
Screen::GetRectDisplayPix(int32_t* aOutLeft,
int32_t* aOutTop,
int32_t* aOutWidth,
int32_t* aOutHeight)
{
*aOutLeft = mRectDisplayPix.x;
*aOutTop = mRectDisplayPix.y;
*aOutWidth = mRectDisplayPix.width;
*aOutHeight = mRectDisplayPix.height;
return NS_OK;
}
NS_IMETHODIMP
Screen::GetAvailRect(int32_t* aOutLeft,
int32_t* aOutTop,
int32_t* aOutWidth,
int32_t* aOutHeight)
{
*aOutLeft = mAvailRect.x;
*aOutTop = mAvailRect.y;
*aOutWidth = mAvailRect.width;
*aOutHeight = mAvailRect.height;
return NS_OK;
}
NS_IMETHODIMP
Screen::GetAvailRectDisplayPix(int32_t* aOutLeft,
int32_t* aOutTop,
int32_t* aOutWidth,
int32_t* aOutHeight)
{
*aOutLeft = mAvailRectDisplayPix.x;
*aOutTop = mAvailRectDisplayPix.y;
*aOutWidth = mAvailRectDisplayPix.width;
*aOutHeight = mAvailRectDisplayPix.height;
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