From e8f9cda5d0f585d0fc07fa602462a9acc8ef9a14 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Tue, 30 Sep 2014 18:28:28 -0700 Subject: [PATCH] Bug 1074743 - Forward display pixel values to screen proxies r=jimm --- dom/ipc/PScreenManager.ipdl | 2 ++ dom/ipc/ScreenManagerParent.cpp | 14 +++++++++++++ widget/xpwidgets/ScreenProxy.cpp | 36 ++++++++++++++++++++++++++++++++ widget/xpwidgets/ScreenProxy.h | 10 +++++++++ 4 files changed, 62 insertions(+) diff --git a/dom/ipc/PScreenManager.ipdl b/dom/ipc/PScreenManager.ipdl index 6438b2fc252f..9b639fa7c76f 100644 --- a/dom/ipc/PScreenManager.ipdl +++ b/dom/ipc/PScreenManager.ipdl @@ -14,7 +14,9 @@ namespace dom { struct ScreenDetails { uint32_t id; nsIntRect rect; + nsIntRect rectDisplayPix; nsIntRect availRect; + nsIntRect availRectDisplayPix; int32_t pixelDepth; int32_t colorDepth; double contentsScaleFactor; diff --git a/dom/ipc/ScreenManagerParent.cpp b/dom/ipc/ScreenManagerParent.cpp index 2880225fc3f5..e71de6e2e6c5 100644 --- a/dom/ipc/ScreenManagerParent.cpp +++ b/dom/ipc/ScreenManagerParent.cpp @@ -161,12 +161,26 @@ ScreenManagerParent::ExtractScreenDetails(nsIScreen* aScreen, ScreenDetails &aDe NS_ENSURE_SUCCESS(rv, false); aDetails.rect() = rect; + nsIntRect rectDisplayPix; + rv = aScreen->GetRectDisplayPix(&rectDisplayPix.x, &rectDisplayPix.y, + &rectDisplayPix.width, &rectDisplayPix.height); + NS_ENSURE_SUCCESS(rv, false); + aDetails.rectDisplayPix() = rectDisplayPix; + nsIntRect availRect; rv = aScreen->GetAvailRect(&availRect.x, &availRect.y, &availRect.width, &availRect.height); NS_ENSURE_SUCCESS(rv, false); aDetails.availRect() = availRect; + nsIntRect availRectDisplayPix; + rv = aScreen->GetAvailRectDisplayPix(&availRectDisplayPix.x, + &availRectDisplayPix.y, + &availRectDisplayPix.width, + &availRectDisplayPix.height); + NS_ENSURE_SUCCESS(rv, false); + aDetails.availRectDisplayPix() = availRectDisplayPix; + int32_t pixelDepth = 0; rv = aScreen->GetPixelDepth(&pixelDepth); NS_ENSURE_SUCCESS(rv, false); diff --git a/widget/xpwidgets/ScreenProxy.cpp b/widget/xpwidgets/ScreenProxy.cpp index c1c2ce86250d..76ef1b6b0ace 100644 --- a/widget/xpwidgets/ScreenProxy.cpp +++ b/widget/xpwidgets/ScreenProxy.cpp @@ -50,6 +50,23 @@ ScreenProxy::GetRect(int32_t *outLeft, return NS_OK; } +NS_IMETHODIMP +ScreenProxy::GetRectDisplayPix(int32_t *outLeft, + int32_t *outTop, + int32_t *outWidth, + int32_t *outHeight) +{ + if (!EnsureCacheIsValid()) { + return NS_ERROR_FAILURE; + } + + *outLeft = mRectDisplayPix.x; + *outTop = mRectDisplayPix.y; + *outWidth = mRectDisplayPix.width; + *outHeight = mRectDisplayPix.height; + return NS_OK; +} + NS_IMETHODIMP ScreenProxy::GetAvailRect(int32_t *outLeft, int32_t *outTop, @@ -67,6 +84,23 @@ ScreenProxy::GetAvailRect(int32_t *outLeft, return NS_OK; } +NS_IMETHODIMP +ScreenProxy::GetAvailRectDisplayPix(int32_t *outLeft, + int32_t *outTop, + int32_t *outWidth, + int32_t *outHeight) +{ + if (!EnsureCacheIsValid()) { + return NS_ERROR_FAILURE; + } + + *outLeft = mAvailRectDisplayPix.x; + *outTop = mAvailRectDisplayPix.y; + *outWidth = mAvailRectDisplayPix.width; + *outHeight = mAvailRectDisplayPix.height; + return NS_OK; +} + NS_IMETHODIMP ScreenProxy::GetPixelDepth(int32_t *aPixelDepth) { @@ -94,7 +128,9 @@ ScreenProxy::PopulateByDetails(ScreenDetails aDetails) { mId = aDetails.id(); mRect = nsIntRect(aDetails.rect()); + mRectDisplayPix = nsIntRect(aDetails.rectDisplayPix()); mAvailRect = nsIntRect(aDetails.availRect()); + mAvailRectDisplayPix = nsIntRect(aDetails.availRectDisplayPix()); mPixelDepth = aDetails.pixelDepth(); mColorDepth = aDetails.colorDepth(); mContentsScaleFactor = aDetails.contentsScaleFactor(); diff --git a/widget/xpwidgets/ScreenProxy.h b/widget/xpwidgets/ScreenProxy.h index 519284171e5b..756cc6c1a36d 100644 --- a/widget/xpwidgets/ScreenProxy.h +++ b/widget/xpwidgets/ScreenProxy.h @@ -29,10 +29,18 @@ public: int32_t* aTop, int32_t* aWidth, int32_t* aHeight) MOZ_OVERRIDE; + NS_IMETHOD GetRectDisplayPix(int32_t* aLeft, + int32_t* aTop, + int32_t* aWidth, + int32_t* aHeight) MOZ_OVERRIDE; NS_IMETHOD GetAvailRect(int32_t* aLeft, int32_t* aTop, int32_t* aWidth, int32_t* aHeight) MOZ_OVERRIDE; + NS_IMETHOD GetAvailRectDisplayPix(int32_t* aLeft, + int32_t* aTop, + int32_t* aWidth, + int32_t* aHeight) MOZ_OVERRIDE; NS_IMETHOD GetPixelDepth(int32_t* aPixelDepth) MOZ_OVERRIDE; NS_IMETHOD GetColorDepth(int32_t* aColorDepth) MOZ_OVERRIDE; @@ -49,7 +57,9 @@ private: int32_t mPixelDepth; int32_t mColorDepth; nsIntRect mRect; + nsIntRect mRectDisplayPix; nsIntRect mAvailRect; + nsIntRect mAvailRectDisplayPix; bool mCacheValid; bool mCacheWillInvalidate; };