Files
palemoon27/gfx/layers/basic/X11BasicCompositor.cpp
T
roytam1 fa9ed1e11b import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1166942 - Add logging of color layer bounds. r=nical (442de4b6c)
- Bug 1152109 - Don't clear plugin data cache in ShadowLayers code, we need to resend this during repaints that do not involve reflow. r=roc (8670e73f9)
- Bug 1158122 - Remove all occurences of nsIntRect in gfx/layers/composite. r=nical (dcfa2050a)
- Bug 1158122 - Remove all occurences of nsIntRect in gfx/ipc/. r=nical (1ca3800b5)
- Bug 1158122 - Remove all occurences of nsIntRect in gfx/gl/. r=nical (187d70360)
- Bug 1158122 - Remove all occurences of nsIntRect in gfx/thebes/. r=nical (487ab747c)
- Bug 1155621 - Remove no-op gfx2DGlue conversion helpers. r=Bas (f2ea364d4)
- Bug 1158122 - Remove some occurences of nsIntRect in gfx/layers/. r=nical (b1bb2e736)
- Bug 1158122 - Remove all occurences of nsIntRect in gfx/layers/client. r=nical (f0e71c984)
- Bug 1158122 - Remove the remaining occurences of nsIntRect in gfx/layers. r=nical (571ff6de0)
- Bug 1148350 - Add a test. r=botond (226b59773)
- Bug 1158122 - Remove most occurences of nsIntRect in gfx/tests. r=nical (cb3b2541c)
- Bug 1032848 - Part 1: Implement WebIDL for HTMLCanvasElement::CaptureStream. r=smaug, r=mt (210e34454)
- Bug 1032848 - Part 2: Implement HTMLCanvasElement::CaptureStream. r=mt, r=jesup, r=jgilbert, r=gwright (bec93b4d3)
- Bug 1032848 followup: Add 'override' annotation to Notify() method in CanvasCaptureMediaStream.cpp. rs=ehsan (9866fd266)
- Bug 1032848 - Part 3: Add tests for HTMLCanvasElement::CaptureStream. r=mt, r=jgilbert, r=jesup (bde68ba7c)
- Bug 987498 - Part 1 - Layers support OverlayImage. r=roc (8b22b789f)
- Bug 987498 - Part 2 - HTMLMediaElement supports playback OverlayImage. r=roc (247dc15a2)
- Bug 987498 - Part 3 - Implement DOMHwMediaStream. r=roc (f0d9de519)
- Bug 987498 - Part 4 -Implement SetImageSize on DOMHwMediaStream. r=roc (850cf6ad0)
- Bug 1147194 - Do scroll info layer hoisting when building the display list. r=tn (64ae65e97)
- Bug 1161389 - Skip AccessibleCaret frame if nsDisplayListBuilder doesn't build caret. r=roc (0e8328488)
- Bug 1068881 (Part 2) - Add reftests for rounding image dest rects to zero size. r=roc (00202564b)
- Bug 1164227 - Don't allow invalid region simplification to invalidate unchanged scrolled contents. r=roc (3cde9cd56)
- Bug 1148022 - When frame metrics are attached to the container layer of the root scroll frame, make sure that its scroll frame is active. r=tn (5369f9175)
- Bug 1154478 - Really force-enable the event-regions code when APZ is enabled. r=tn (e7ba54c3d)
- Move AsyncPanZoomAnimation into its own header. (bug 1139220 part 1, r=kats) (e06fd8854)
- Bug 1139180 - Add BUG_COMPONENT metadata to moz.build for files in layout/. r=roc (468dedf02)
- Factor the guts of AsyncScroll into a base helper class. (bug 1139220 part 2, r=kgilbert) (1719bcba6)
- Use the main-thread key spline animation logic for Desktop APZ. (bug 1139220 part 3, r=kats,kgilbert) (84a1d8948)
- Bug 1147038. Use the correct clip for root scroll frames in root content documents. r=mstange (cae882bdf)
- Use Maybe to communicate the APZ scrollframe clip. (bug 1148582 part 1, r=mstange) (d22c5cfeb)
2020-12-03 09:53:51 +08:00

130 lines
3.9 KiB
C++

/* -*- Mode: C++; tab-width: 20; 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/. */
#include "X11BasicCompositor.h"
#include "gfxPlatform.h"
#include "gfx2DGlue.h"
#include "gfxXlibSurface.h"
#include "gfxImageSurface.h"
#include "mozilla/X11Util.h"
namespace mozilla {
using namespace mozilla::gfx;
namespace layers {
bool
X11DataTextureSourceBasic::Update(gfx::DataSourceSurface* aSurface,
nsIntRegion* aDestRegion,
gfx::IntPoint* aSrcOffset)
{
// Reallocate our internal X11 surface if we don't have a DrawTarget yet,
// or if we changed surface size or format since last update.
if (!mBufferDrawTarget ||
(aSurface->GetSize() != mBufferDrawTarget->GetSize()) ||
(aSurface->GetFormat() != mBufferDrawTarget->GetFormat())) {
nsRefPtr<gfxASurface> surf;
gfxImageFormat imageFormat = SurfaceFormatToImageFormat(aSurface->GetFormat());
Display *display = DefaultXDisplay();
Screen *screen = DefaultScreenOfDisplay(display);
XRenderPictFormat *xrenderFormat =
gfxXlibSurface::FindRenderFormat(display, imageFormat);
if (xrenderFormat) {
surf = gfxXlibSurface::Create(screen, xrenderFormat,
aSurface->GetSize());
}
if (!surf) {
NS_WARNING("Couldn't create native surface, fallback to image surface");
surf = new gfxImageSurface(aSurface->GetSize(), imageFormat);
}
mBufferDrawTarget = gfxPlatform::GetPlatform()->
CreateDrawTargetForSurface(surf, aSurface->GetSize());
}
// Image contents have changed, upload to our DrawTarget
// If aDestRegion is null, means we're updating the whole surface
// Note : Incremental update with a source offset is only used on Mac.
NS_ASSERTION(!aSrcOffset, "SrcOffset should not be used with linux OMTC basic");
if (aDestRegion) {
nsIntRegionRectIterator iter(*aDestRegion);
while (const IntRect* iterRect = iter.Next()) {
IntRect srcRect(iterRect->x, iterRect->y, iterRect->width, iterRect->height);
IntPoint dstPoint(iterRect->x, iterRect->y);
// We're uploading regions to our buffer, so let's just copy contents over
mBufferDrawTarget->CopySurface(aSurface, srcRect, dstPoint);
}
} else {
// We're uploading the whole buffer, so let's just copy the full surface
IntSize size = aSurface->GetSize();
mBufferDrawTarget->CopySurface(aSurface, IntRect(0, 0, size.width, size.height),
IntPoint(0, 0));
}
return true;
}
TextureSourceBasic*
X11DataTextureSourceBasic::AsSourceBasic()
{
return this;
}
IntSize
X11DataTextureSourceBasic::GetSize() const
{
if (!mBufferDrawTarget) {
NS_WARNING("Trying to query the size of an uninitialized TextureSource");
return IntSize(0, 0);
} else {
return mBufferDrawTarget->GetSize();
}
}
gfx::SurfaceFormat
X11DataTextureSourceBasic::GetFormat() const
{
if (!mBufferDrawTarget) {
NS_WARNING("Trying to query the format of an uninitialized TextureSource");
return gfx::SurfaceFormat::UNKNOWN;
} else {
return mBufferDrawTarget->GetFormat();
}
}
SourceSurface*
X11DataTextureSourceBasic::GetSurface(DrawTarget* aTarget)
{
RefPtr<gfx::SourceSurface> surface;
if (mBufferDrawTarget) {
surface = mBufferDrawTarget->Snapshot();
return surface.get();
} else {
return nullptr;
}
}
void
X11DataTextureSourceBasic::DeallocateDeviceData()
{
mBufferDrawTarget = nullptr;
}
already_AddRefed<DataTextureSource>
X11BasicCompositor::CreateDataTextureSource(TextureFlags aFlags)
{
RefPtr<DataTextureSource> result =
new X11DataTextureSourceBasic();
return result.forget();
}
} // namespace layers
} // namespace mozilla