mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
7b1b52b19b
This code was assuming that the only non-opaque parts of compositor rendering would be the parts of the window that had vibrancy. But now that the default window background is transparent, we can have non-vibrant parts where we render into transparency. Dialog windows such as sheet windows are an example of this. So instead of using the non-vibrant region of the window as its opaque region, we now use the region that is covered by opaque Gecko layers. This region is a lot more conservative: For example, the main browser chrome is now entirely transparent, because the chrome's opaque parts share a layer with its transparent parts. As a result, this change slightly affects the CALayer partitioning in the main browser window: The entire browser chrome is now transparent, not just the tab bar. The web content area is still opaque. I think this will be fine. The thing I'm most concerned about is that scrolling inside web content might cause invalidations of pixels from the chrome, because then we'd recomposite the CALayers that cover the vibrant tab bar. This doesn't seem to happen most of the time though, from what I can tell. Differential Revision: https://phabricator.services.mozilla.com/D51466
50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
/* 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_InProcessCompositorWidget_h__
|
|
#define mozilla_widget_InProcessCompositorWidget_h__
|
|
|
|
#include "CompositorWidget.h"
|
|
|
|
namespace mozilla {
|
|
namespace widget {
|
|
|
|
// This version of CompositorWidget implements a wrapper around
|
|
// nsBaseWidget.
|
|
class InProcessCompositorWidget : public CompositorWidget {
|
|
public:
|
|
explicit InProcessCompositorWidget(const layers::CompositorOptions& aOptions,
|
|
nsBaseWidget* aWidget);
|
|
|
|
virtual bool PreRender(WidgetRenderingContext* aManager) override;
|
|
virtual void PostRender(WidgetRenderingContext* aManager) override;
|
|
virtual RefPtr<layers::NativeLayerRoot> GetNativeLayerRoot() override;
|
|
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawing() override;
|
|
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
|
|
LayoutDeviceIntRegion& aInvalidRegion,
|
|
layers::BufferMode* aBufferMode) override;
|
|
virtual void EndRemoteDrawing() override;
|
|
virtual void EndRemoteDrawingInRegion(
|
|
gfx::DrawTarget* aDrawTarget,
|
|
const LayoutDeviceIntRegion& aInvalidRegion) override;
|
|
virtual void CleanupRemoteDrawing() override;
|
|
virtual void CleanupWindowEffects() override;
|
|
virtual bool InitCompositor(layers::Compositor* aCompositor) override;
|
|
virtual LayoutDeviceIntSize GetClientSize() override;
|
|
virtual uint32_t GetGLFrameBufferFormat() override;
|
|
virtual void ObserveVsync(VsyncObserver* aObserver) override;
|
|
virtual uintptr_t GetWidgetKey() override;
|
|
|
|
// If you can override this method, inherit from CompositorWidget instead.
|
|
nsIWidget* RealWidget() override;
|
|
|
|
protected:
|
|
nsBaseWidget* mWidget;
|
|
};
|
|
|
|
} // namespace widget
|
|
} // namespace mozilla
|
|
|
|
#endif
|