1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* vim: set sw=4 ts=8 et tw=80 : */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/dom/TabParent.h"
8 #include "mozilla/unused.h"
10 #include "nsServiceManagerUtils.h"
11 #include "ScreenManagerParent.h"
16 static const char *sScreenManagerContractID
= "@mozilla.org/gfx/screenmanager;1";
18 ScreenManagerParent::ScreenManagerParent(uint32_t* aNumberOfScreens
,
19 float* aSystemDefaultScale
,
22 mScreenMgr
= do_GetService(sScreenManagerContractID
);
24 MOZ_CRASH("Couldn't get nsIScreenManager from ScreenManagerParent.");
27 unused
<< AnswerRefresh(aNumberOfScreens
, aSystemDefaultScale
, aSuccess
);
31 ScreenManagerParent::AnswerRefresh(uint32_t* aNumberOfScreens
,
32 float* aSystemDefaultScale
,
37 nsresult rv
= mScreenMgr
->GetNumberOfScreens(aNumberOfScreens
);
42 rv
= mScreenMgr
->GetSystemDefaultScale(aSystemDefaultScale
);
52 ScreenManagerParent::AnswerScreenRefresh(const uint32_t& aId
,
53 ScreenDetails
* aRetVal
,
58 nsCOMPtr
<nsIScreen
> screen
;
59 nsresult rv
= mScreenMgr
->ScreenForId(aId
, getter_AddRefs(screen
));
64 ScreenDetails details
;
65 unused
<< ExtractScreenDetails(screen
, details
);
73 ScreenManagerParent::AnswerGetPrimaryScreen(ScreenDetails
* aRetVal
,
78 nsCOMPtr
<nsIScreen
> screen
;
79 nsresult rv
= mScreenMgr
->GetPrimaryScreen(getter_AddRefs(screen
));
81 NS_ENSURE_SUCCESS(rv
, true);
83 ScreenDetails details
;
84 if (!ExtractScreenDetails(screen
, details
)) {
94 ScreenManagerParent::AnswerScreenForRect(const int32_t& aLeft
,
96 const int32_t& aWidth
,
97 const int32_t& aHeight
,
98 ScreenDetails
* aRetVal
,
103 nsCOMPtr
<nsIScreen
> screen
;
104 nsresult rv
= mScreenMgr
->ScreenForRect(aLeft
, aTop
, aWidth
, aHeight
, getter_AddRefs(screen
));
106 NS_ENSURE_SUCCESS(rv
, true);
108 ScreenDetails details
;
109 if (!ExtractScreenDetails(screen
, details
)) {
119 ScreenManagerParent::AnswerScreenForBrowser(PBrowserParent
* aBrowser
,
120 ScreenDetails
* aRetVal
,
125 // Find the mWidget associated with the tabparent, and then return
126 // the nsIScreen it's on.
127 TabParent
* tabParent
= static_cast<TabParent
*>(aBrowser
);
128 nsCOMPtr
<nsIWidget
> widget
= tabParent
->GetWidget();
133 nsCOMPtr
<nsIScreen
> screen
;
134 if (widget
->GetNativeData(NS_NATIVE_WINDOW
)) {
135 mScreenMgr
->ScreenForNativeWidget(widget
->GetNativeData(NS_NATIVE_WINDOW
),
136 getter_AddRefs(screen
));
139 NS_ENSURE_TRUE(screen
, true);
141 ScreenDetails details
;
142 if (!ExtractScreenDetails(screen
, details
)) {
152 ScreenManagerParent::ExtractScreenDetails(nsIScreen
* aScreen
, ScreenDetails
&aDetails
)
155 nsresult rv
= aScreen
->GetId(&id
);
156 NS_ENSURE_SUCCESS(rv
, false);
160 rv
= aScreen
->GetRect(&rect
.x
, &rect
.y
, &rect
.width
, &rect
.height
);
161 NS_ENSURE_SUCCESS(rv
, false);
162 aDetails
.rect() = rect
;
164 nsIntRect rectDisplayPix
;
165 rv
= aScreen
->GetRectDisplayPix(&rectDisplayPix
.x
, &rectDisplayPix
.y
,
166 &rectDisplayPix
.width
, &rectDisplayPix
.height
);
167 NS_ENSURE_SUCCESS(rv
, false);
168 aDetails
.rectDisplayPix() = rectDisplayPix
;
171 rv
= aScreen
->GetAvailRect(&availRect
.x
, &availRect
.y
, &availRect
.width
,
173 NS_ENSURE_SUCCESS(rv
, false);
174 aDetails
.availRect() = availRect
;
176 nsIntRect availRectDisplayPix
;
177 rv
= aScreen
->GetAvailRectDisplayPix(&availRectDisplayPix
.x
,
178 &availRectDisplayPix
.y
,
179 &availRectDisplayPix
.width
,
180 &availRectDisplayPix
.height
);
181 NS_ENSURE_SUCCESS(rv
, false);
182 aDetails
.availRectDisplayPix() = availRectDisplayPix
;
184 int32_t pixelDepth
= 0;
185 rv
= aScreen
->GetPixelDepth(&pixelDepth
);
186 NS_ENSURE_SUCCESS(rv
, false);
187 aDetails
.pixelDepth() = pixelDepth
;
189 int32_t colorDepth
= 0;
190 rv
= aScreen
->GetColorDepth(&colorDepth
);
191 NS_ENSURE_SUCCESS(rv
, false);
192 aDetails
.colorDepth() = colorDepth
;
194 double contentsScaleFactor
= 1.0;
195 rv
= aScreen
->GetContentsScaleFactor(&contentsScaleFactor
);
196 NS_ENSURE_SUCCESS(rv
, false);
197 aDetails
.contentsScaleFactor() = contentsScaleFactor
;
203 ScreenManagerParent::ActorDestroy(ActorDestroyReason why
)
208 } // namespace mozilla