forked from mirrors/gecko-dev
On Android we have until now determined the compositor widget's size by querying the values from the ANativeWindow. However, since bug 1780093 landed we can now switch between which Surface we are rendering in to, and as a result we appear to be using the wrong size some of the time. This patch is a speculative attempt to fix this, by using the size passed to ResumeAndResize() (which itself comes from the Surface's surfaceChanged() callback) rather than querying the window. Differential Revision: https://phabricator.services.mozilla.com/D154909
70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
/* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
|
|
* 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/. */
|
|
|
|
#ifndef mozilla_widget_AndroidCompositorWidget_h
|
|
#define mozilla_widget_AndroidCompositorWidget_h
|
|
|
|
#include "CompositorWidget.h"
|
|
#include "AndroidNativeWindow.h"
|
|
#include "GLDefs.h"
|
|
|
|
namespace mozilla {
|
|
namespace widget {
|
|
|
|
class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate {
|
|
public:
|
|
virtual void NotifyClientSizeChanged(
|
|
const LayoutDeviceIntSize& aClientSize) = 0;
|
|
|
|
// CompositorWidgetDelegate Overrides
|
|
PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override {
|
|
return this;
|
|
}
|
|
};
|
|
|
|
class AndroidCompositorWidgetInitData;
|
|
|
|
class AndroidCompositorWidget : public CompositorWidget {
|
|
public:
|
|
AndroidCompositorWidget(const AndroidCompositorWidgetInitData& aInitData,
|
|
const layers::CompositorOptions& aOptions);
|
|
~AndroidCompositorWidget() override;
|
|
|
|
EGLNativeWindowType GetEGLNativeWindow();
|
|
|
|
// CompositorWidget overrides
|
|
|
|
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
|
|
const LayoutDeviceIntRegion& aInvalidRegion,
|
|
layers::BufferMode* aBufferMode) override;
|
|
void EndRemoteDrawingInRegion(
|
|
gfx::DrawTarget* aDrawTarget,
|
|
const LayoutDeviceIntRegion& aInvalidRegion) override;
|
|
|
|
bool OnResumeComposition() override;
|
|
|
|
AndroidCompositorWidget* AsAndroid() override { return this; }
|
|
|
|
LayoutDeviceIntSize GetClientSize() override;
|
|
void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize);
|
|
|
|
protected:
|
|
int32_t mWidgetId;
|
|
java::sdk::Surface::GlobalRef mSurface;
|
|
ANativeWindow* mNativeWindow;
|
|
ANativeWindow_Buffer mBuffer;
|
|
int32_t mFormat;
|
|
LayoutDeviceIntSize mClientSize;
|
|
|
|
private:
|
|
// Called whenever the compositor surface may have changed. The derived class
|
|
// should update mSurface to the new compositor surface.
|
|
virtual void OnCompositorSurfaceChanged() = 0;
|
|
};
|
|
|
|
} // namespace widget
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_widget_AndroidCompositorWidget_h
|