зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1813407 [Linux] Allow to initialize WindowSurfaceProvider with GtkCompositorWidget for OMTC rendering r=emilio
Depends on D169905 Differential Revision: https://phabricator.services.mozilla.com/D169906
This commit is contained in:
Родитель
b429a675e0
Коммит
1b56bde4d2
|
@ -48,7 +48,7 @@ GtkCompositorWidget::GtkCompositorWidget(
|
|||
#endif
|
||||
#if defined(MOZ_WAYLAND)
|
||||
if (GdkIsWaylandDisplay()) {
|
||||
ConfigureWaylandBackend(mWidget);
|
||||
ConfigureWaylandBackend();
|
||||
LOG("GtkCompositorWidget::GtkCompositorWidget() [%p] mWidget %p "
|
||||
"mIsRenderingSuspended %d\n",
|
||||
(void*)mWidget.get(), (void*)mWidget, !!mIsRenderingSuspended);
|
||||
|
@ -178,8 +178,8 @@ void GtkCompositorWidget::DisableRendering() {
|
|||
}
|
||||
|
||||
#if defined(MOZ_WAYLAND)
|
||||
bool GtkCompositorWidget::ConfigureWaylandBackend(RefPtr<nsWindow> aWindow) {
|
||||
mProvider.Initialize(aWindow);
|
||||
bool GtkCompositorWidget::ConfigureWaylandBackend() {
|
||||
mProvider.Initialize(this);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
@ -221,7 +221,7 @@ void GtkCompositorWidget::EnableRendering(const uintptr_t aXWindow,
|
|||
#if defined(MOZ_WAYLAND)
|
||||
if (GdkIsWaylandDisplay()) {
|
||||
LOG(" configure widget %p\n", mWidget.get());
|
||||
if (!ConfigureWaylandBackend(mWidget)) {
|
||||
if (!ConfigureWaylandBackend()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ class GtkCompositorWidget : public CompositorWidget,
|
|||
|
||||
private:
|
||||
#if defined(MOZ_WAYLAND)
|
||||
bool ConfigureWaylandBackend(RefPtr<nsWindow> aWindow);
|
||||
bool ConfigureWaylandBackend();
|
||||
#endif
|
||||
#if defined(MOZ_X11)
|
||||
bool ConfigureX11Backend(Window aXWindow, bool aShaped);
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "WindowSurfaceProvider.h"
|
||||
|
||||
#include "gfxPlatformGtk.h"
|
||||
#include "GtkCompositorWidget.h"
|
||||
#include "mozilla/gfx/Logging.h"
|
||||
#include "mozilla/layers/LayersTypes.h"
|
||||
#include "nsWindow.h"
|
||||
|
@ -41,10 +42,6 @@ WindowSurfaceProvider::WindowSurfaceProvider()
|
|||
: mWindowSurface(nullptr),
|
||||
mMutex("WindowSurfaceProvider"),
|
||||
mWindowSurfaceValid(false)
|
||||
#ifdef MOZ_WAYLAND
|
||||
,
|
||||
mWidget(nullptr)
|
||||
#endif
|
||||
#ifdef MOZ_X11
|
||||
,
|
||||
mIsShaped(false),
|
||||
|
@ -60,6 +57,11 @@ void WindowSurfaceProvider::Initialize(RefPtr<nsWindow> aWidget) {
|
|||
mWindowSurfaceValid = false;
|
||||
mWidget = std::move(aWidget);
|
||||
}
|
||||
void WindowSurfaceProvider::Initialize(GtkCompositorWidget* aCompositorWidget) {
|
||||
mWindowSurfaceValid = false;
|
||||
mCompositorWidget = aCompositorWidget;
|
||||
mWidget = static_cast<nsWindow*>(aCompositorWidget->RealWidget());
|
||||
}
|
||||
#endif
|
||||
#ifdef MOZ_X11
|
||||
void WindowSurfaceProvider::Initialize(Window aWindow, Visual* aVisual,
|
||||
|
@ -93,7 +95,7 @@ RefPtr<WindowSurface> WindowSurfaceProvider::CreateWindowSurface() {
|
|||
if (!mWidget) {
|
||||
return nullptr;
|
||||
}
|
||||
return MakeRefPtr<WindowSurfaceWaylandMB>(mWidget);
|
||||
return MakeRefPtr<WindowSurfaceWaylandMB>(mWidget, mCompositorWidget);
|
||||
}
|
||||
#endif
|
||||
#ifdef MOZ_X11
|
||||
|
|
|
@ -44,6 +44,7 @@ class WindowSurfaceProvider final {
|
|||
*/
|
||||
#ifdef MOZ_WAYLAND
|
||||
void Initialize(RefPtr<nsWindow> aWidget);
|
||||
void Initialize(GtkCompositorWidget* aCompositorWidget);
|
||||
#endif
|
||||
#ifdef MOZ_X11
|
||||
void Initialize(Window aWindow, Visual* aVisual, int aDepth, bool aIsShaped);
|
||||
|
@ -80,6 +81,9 @@ class WindowSurfaceProvider final {
|
|||
mozilla::Atomic<bool> mWindowSurfaceValid;
|
||||
#ifdef MOZ_WAYLAND
|
||||
RefPtr<nsWindow> mWidget;
|
||||
// WindowSurfaceProvider is owned by GtkCompositorWidget so we don't need
|
||||
// to reference it.
|
||||
GtkCompositorWidget* mCompositorWidget = nullptr;
|
||||
#endif
|
||||
#ifdef MOZ_X11
|
||||
bool mIsShaped;
|
||||
|
|
Загрузка…
Ссылка в новой задаче