summaryrefslogtreecommitdiffstats
path: root/widget/Screen.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--widget/Screen.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/widget/Screen.cpp b/widget/Screen.cpp
new file mode 100644
index 0000000000..4fb196fe87
--- /dev/null
+++ b/widget/Screen.cpp
@@ -0,0 +1,123 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 2; -*- */
+/* vim: set sw=2 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"
+#include "mozilla/StaticPrefs_layout.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 = StaticPrefs::layout_css_devPixelsPerPx();
+ 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