mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
84
widget/CompositorWidget.cpp
Normal file
84
widget/CompositorWidget.cpp
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/* 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/. */
|
||||
|
||||
#include "CompositorWidget.h"
|
||||
#include "GLConsts.h"
|
||||
#include "nsBaseWidget.h"
|
||||
#include "VsyncDispatcher.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
CompositorWidget::~CompositorWidget()
|
||||
{
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget>
|
||||
CompositorWidget::StartRemoteDrawing()
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
CompositorWidget::CleanupRemoteDrawing()
|
||||
{
|
||||
mLastBackBuffer = nullptr;
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget>
|
||||
CompositorWidget::GetBackBufferDrawTarget(gfx::DrawTarget* aScreenTarget,
|
||||
const LayoutDeviceIntRect& aRect,
|
||||
const LayoutDeviceIntRect& aClearRect)
|
||||
{
|
||||
MOZ_ASSERT(aScreenTarget);
|
||||
gfx::SurfaceFormat format =
|
||||
aScreenTarget->GetFormat() == gfx::SurfaceFormat::B8G8R8X8 ? gfx::SurfaceFormat::B8G8R8X8 : gfx::SurfaceFormat::B8G8R8A8;
|
||||
gfx::IntSize size = aRect.ToUnknownRect().Size();
|
||||
gfx::IntSize clientSize(GetClientSize().ToUnknownSize());
|
||||
|
||||
RefPtr<gfx::DrawTarget> target;
|
||||
// Re-use back buffer if possible
|
||||
if (mLastBackBuffer &&
|
||||
mLastBackBuffer->GetBackendType() == aScreenTarget->GetBackendType() &&
|
||||
mLastBackBuffer->GetFormat() == format &&
|
||||
size <= mLastBackBuffer->GetSize() &&
|
||||
mLastBackBuffer->GetSize() <= clientSize) {
|
||||
target = mLastBackBuffer;
|
||||
target->SetTransform(gfx::Matrix());
|
||||
if (!aClearRect.IsEmpty()) {
|
||||
gfx::IntRect clearRect = aClearRect.ToUnknownRect() - aRect.ToUnknownRect().TopLeft();
|
||||
target->ClearRect(gfx::Rect(clearRect.x, clearRect.y, clearRect.width, clearRect.height));
|
||||
}
|
||||
} else {
|
||||
target = aScreenTarget->CreateSimilarDrawTarget(size, format);
|
||||
mLastBackBuffer = target;
|
||||
}
|
||||
return target.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::SourceSurface>
|
||||
CompositorWidget::EndBackBufferDrawing()
|
||||
{
|
||||
RefPtr<gfx::SourceSurface> surface = mLastBackBuffer ? mLastBackBuffer->Snapshot() : nullptr;
|
||||
return surface.forget();
|
||||
}
|
||||
|
||||
uint32_t
|
||||
CompositorWidget::GetGLFrameBufferFormat()
|
||||
{
|
||||
return LOCAL_GL_RGBA;
|
||||
}
|
||||
|
||||
RefPtr<VsyncObserver>
|
||||
CompositorWidget::GetVsyncObserver() const
|
||||
{
|
||||
// This should only used when the widget is in the GPU process, and should be
|
||||
// implemented by IPDL-enabled CompositorWidgets.
|
||||
// GPU process does not have a CompositorVsyncDispatcher.
|
||||
MOZ_ASSERT_UNREACHABLE("Must be implemented by derived class");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace widget
|
||||
} // namespace mozilla
|
||||
Loading…
Add table
Add a link
Reference in a new issue