mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-23 02:05:42 +00:00
5a403b0cdd
wl_egl_window size must exactly march GL rendering pipeline setting. Compositor and widget can have different window sizes during window resize when widget is resized faster than layout can render. Firefox window is rendered misplaced then and it's "jumping" as layout size is behind toolkit size. Differential Revision: https://phabricator.services.mozilla.com/D49136 --HG-- extra : moz-landing-system : lando
98 lines
2.7 KiB
C++
98 lines
2.7 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* 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 widget_gtk_GtkCompositorWidget_h
|
|
#define widget_gtk_GtkCompositorWidget_h
|
|
|
|
#include "GLDefs.h"
|
|
#include "mozilla/widget/CompositorWidget.h"
|
|
#include "WindowSurfaceProvider.h"
|
|
|
|
class nsIWidget;
|
|
class nsWindow;
|
|
|
|
namespace mozilla {
|
|
namespace widget {
|
|
|
|
class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate {
|
|
public:
|
|
virtual void NotifyClientSizeChanged(
|
|
const LayoutDeviceIntSize& aClientSize) = 0;
|
|
|
|
#ifdef MOZ_WAYLAND
|
|
virtual void RequestsUpdatingEGLSurface() = 0;
|
|
#endif
|
|
|
|
// CompositorWidgetDelegate Overrides
|
|
|
|
PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override {
|
|
return this;
|
|
}
|
|
};
|
|
|
|
class GtkCompositorWidgetInitData;
|
|
|
|
class GtkCompositorWidget : public CompositorWidget,
|
|
public PlatformCompositorWidgetDelegate {
|
|
public:
|
|
GtkCompositorWidget(const GtkCompositorWidgetInitData& aInitData,
|
|
const layers::CompositorOptions& aOptions,
|
|
nsWindow* aWindow = nullptr);
|
|
~GtkCompositorWidget();
|
|
|
|
// CompositorWidget Overrides
|
|
|
|
already_AddRefed<gfx::DrawTarget> StartRemoteDrawing() override;
|
|
void EndRemoteDrawing() override;
|
|
|
|
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
|
|
LayoutDeviceIntRegion& aInvalidRegion,
|
|
layers::BufferMode* aBufferMode) override;
|
|
void EndRemoteDrawingInRegion(
|
|
gfx::DrawTarget* aDrawTarget,
|
|
const LayoutDeviceIntRegion& aInvalidRegion) override;
|
|
uintptr_t GetWidgetKey() override;
|
|
|
|
LayoutDeviceIntSize GetClientSize() override;
|
|
|
|
nsIWidget* RealWidget() override;
|
|
GtkCompositorWidget* AsX11() override { return this; }
|
|
CompositorWidgetDelegate* AsDelegate() override { return this; }
|
|
|
|
Display* XDisplay() const { return mXDisplay; }
|
|
Window XWindow() const { return mXWindow; }
|
|
|
|
EGLNativeWindowType GetEGLNativeWindow();
|
|
#ifdef MOZ_WAYLAND
|
|
void SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
|
|
#endif
|
|
|
|
// PlatformCompositorWidgetDelegate Overrides
|
|
|
|
void NotifyClientSizeChanged(const LayoutDeviceIntSize& aClientSize) override;
|
|
|
|
#ifdef MOZ_WAYLAND
|
|
void RequestsUpdatingEGLSurface() override;
|
|
bool WaylandRequestsUpdatingEGLSurface();
|
|
#endif
|
|
protected:
|
|
nsWindow* mWidget;
|
|
|
|
private:
|
|
LayoutDeviceIntSize mClientSize;
|
|
#ifdef MOZ_WAYLAND
|
|
bool mWaylandRequestsUpdatingEGLSurface = false;
|
|
#endif
|
|
|
|
Display* mXDisplay;
|
|
Window mXWindow;
|
|
WindowSurfaceProvider mProvider;
|
|
};
|
|
|
|
} // namespace widget
|
|
} // namespace mozilla
|
|
|
|
#endif // widget_gtk_GtkCompositorWidget_h
|