Allow creating WinCompositorWidgetProxy without an nsWindow. (bug 1281998 part 1, r=jimm)

This commit is contained in:
David Anderson 2016-07-01 01:15:15 -07:00
Родитель 4b3a0f0d42
Коммит b36fb329b1
3 изменённых файлов: 18 добавлений и 9 удалений

Просмотреть файл

@ -13,17 +13,18 @@ namespace widget {
using namespace mozilla::gfx;
WinCompositorWidgetProxy::WinCompositorWidgetProxy(nsWindow* aWindow)
WinCompositorWidgetProxy::WinCompositorWidgetProxy(HWND aWnd,
uintptr_t aWidgetKey,
nsTransparencyMode aMode,
nsWindow* aWindow)
: mWindow(aWindow),
mWidgetKey(reinterpret_cast<uintptr_t>(aWindow)),
mWnd(reinterpret_cast<HWND>(aWindow->GetNativeData(NS_NATIVE_WINDOW))),
mTransparencyMode(aWindow->GetTransparencyMode()),
mWidgetKey(aWidgetKey),
mWnd(aWnd),
mTransparencyMode(aMode),
mMemoryDC(nullptr),
mCompositeDC(nullptr),
mLockedBackBufferData(nullptr)
{
MOZ_ASSERT(aWindow);
MOZ_ASSERT(!aWindow->Destroyed());
MOZ_ASSERT(mWnd && ::IsWindow(mWnd));
}
@ -54,6 +55,7 @@ WinCompositorWidgetProxy::PostRender(layers::LayerManagerComposite* aManager)
nsIWidget*
WinCompositorWidgetProxy::RealWidget()
{
MOZ_ASSERT(mWindow);
return mWindow;
}

Просмотреть файл

@ -21,7 +21,10 @@ namespace widget {
class WinCompositorWidgetProxy : public CompositorWidgetProxy
{
public:
WinCompositorWidgetProxy(nsWindow* aWindow);
WinCompositorWidgetProxy(HWND aWnd,
uintptr_t aWidgetKey,
nsTransparencyMode aMode,
nsWindow* aWindow = nullptr);
bool PreRender(layers::LayerManagerComposite*) override;
void PostRender(layers::LayerManagerComposite*) override;

Просмотреть файл

@ -3621,7 +3621,7 @@ nsWindow::GetLayerManager(PLayerTransactionChild* aShadowManager,
// Ensure we have a widget proxy even if we're not using the compositor,
// since that's where we handle transparent windows.
if (!mCompositorWidgetProxy) {
mCompositorWidgetProxy = new WinCompositorWidgetProxy(this);
mCompositorWidgetProxy = NewCompositorWidgetProxy();
}
mLayerManager = CreateBasicLayerManager();
@ -3687,7 +3687,11 @@ nsWindow::OnDefaultButtonLoaded(const LayoutDeviceIntRect& aButtonRect)
mozilla::widget::CompositorWidgetProxy*
nsWindow::NewCompositorWidgetProxy()
{
return new WinCompositorWidgetProxy(this);
return new WinCompositorWidgetProxy(
mWnd,
reinterpret_cast<uintptr_t>(this),
mTransparencyMode,
this);
}
mozilla::widget::WinCompositorWidgetProxy*