зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1319626 - Part 2: Add BorderLayer class and basic support for them. r=mstange
--HG-- extra : rebase_source : de87afc8015649fb5f4a7c4da5f4dc49e19f3d85
This commit is contained in:
Родитель
0b2b7a78b7
Коммит
1985af695f
|
@ -25,6 +25,7 @@
|
|||
#include "mozilla/layers/LayersTypes.h"
|
||||
#include "nsRect.h"
|
||||
#include "nsRegion.h"
|
||||
#include "mozilla/Array.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -1284,6 +1285,26 @@ struct ParamTraits<mozilla::gfx::Glyph>
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T, size_t Length>
|
||||
struct ParamTraits<mozilla::Array<T, Length>>
|
||||
{
|
||||
typedef mozilla::Array<T, Length> paramType;
|
||||
static void Write(Message* aMsg, const paramType& aParam) {
|
||||
for (size_t i = 0; i < Length; i++) {
|
||||
WriteParam(aMsg, aParam[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) {
|
||||
for (size_t i = 0; i < Length; i++) {
|
||||
if (!ReadParam(aMsg, aIter, &aResult[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
} /* namespace IPC */
|
||||
|
||||
#endif /* __GFXMESSAGEUTILS_H__ */
|
||||
|
|
|
@ -610,6 +610,7 @@ CloneLayerTreePropertiesInternal(Layer* aRoot, bool aIsMask /* = false */)
|
|||
case Layer::TYPE_SHADOW:
|
||||
case Layer::TYPE_PAINTED:
|
||||
case Layer::TYPE_TEXT:
|
||||
case Layer::TYPE_BORDER:
|
||||
return MakeUnique<LayerPropertiesBase>(aRoot);
|
||||
}
|
||||
|
||||
|
|
|
@ -2217,6 +2217,18 @@ TextLayer::DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent)
|
|||
layer->set_type(LayersPacket::Layer::TextLayer);
|
||||
}
|
||||
|
||||
void
|
||||
BorderLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
|
||||
{
|
||||
Layer::PrintInfo(aStream, aPrefix);
|
||||
}
|
||||
|
||||
void
|
||||
BorderLayer::DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent)
|
||||
{
|
||||
Layer::DumpPacket(aPacket, aParent);
|
||||
}
|
||||
|
||||
CanvasLayer::CanvasLayer(LayerManager* aManager, void* aImplData)
|
||||
: Layer(aManager, aImplData)
|
||||
, mPreTransCallback(nullptr)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "gfxRect.h" // for gfxRect
|
||||
#include "gfx2DGlue.h"
|
||||
#include "mozilla/Assertions.h" // for MOZ_ASSERT_HELPER2, etc
|
||||
#include "mozilla/Array.h"
|
||||
#include "mozilla/DebugOnly.h" // for DebugOnly
|
||||
#include "mozilla/EventForwards.h" // for nsPaintEvent
|
||||
#include "mozilla/Maybe.h" // for Maybe
|
||||
|
@ -87,6 +88,7 @@ class ImageLayer;
|
|||
class ColorLayer;
|
||||
class TextLayer;
|
||||
class CanvasLayer;
|
||||
class BorderLayer;
|
||||
class ReadbackLayer;
|
||||
class ReadbackProcessor;
|
||||
class RefLayer;
|
||||
|
@ -407,6 +409,11 @@ public:
|
|||
* Create a TextLayer for this manager's layer tree.
|
||||
*/
|
||||
virtual already_AddRefed<TextLayer> CreateTextLayer() = 0;
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
* Create a BorderLayer for this manager's layer tree.
|
||||
*/
|
||||
virtual already_AddRefed<BorderLayer> CreateBorderLayer() { return nullptr; }
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
* Create a CanvasLayer for this manager's layer tree.
|
||||
|
@ -752,6 +759,7 @@ public:
|
|||
TYPE_CONTAINER,
|
||||
TYPE_IMAGE,
|
||||
TYPE_TEXT,
|
||||
TYPE_BORDER,
|
||||
TYPE_READBACK,
|
||||
TYPE_REF,
|
||||
TYPE_SHADOW,
|
||||
|
@ -1536,6 +1544,12 @@ public:
|
|||
*/
|
||||
virtual TextLayer* AsTextLayer() { return nullptr; }
|
||||
|
||||
/**
|
||||
* Dynamic cast to a Border. Returns null if this is not a
|
||||
* ColorLayer.
|
||||
*/
|
||||
virtual BorderLayer* AsBorderLayer() { return nullptr; }
|
||||
|
||||
/**
|
||||
* Dynamic cast to a LayerComposite. Return null if this is not a
|
||||
* LayerComposite. Can be used anytime.
|
||||
|
@ -2391,6 +2405,73 @@ protected:
|
|||
RefPtr<gfx::ScaledFont> mFont;
|
||||
};
|
||||
|
||||
/**
|
||||
* A Layer which renders a rounded rect.
|
||||
*/
|
||||
class BorderLayer : public Layer {
|
||||
public:
|
||||
virtual BorderLayer* AsBorderLayer() override { return this; }
|
||||
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
* Set the color of the layer.
|
||||
*/
|
||||
|
||||
// Colors of each side as in css::Side
|
||||
virtual void SetColors(const BorderColors& aColors)
|
||||
{
|
||||
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) Colors", this));
|
||||
PodCopy(&mColors[0], &aColors[0], 4);
|
||||
Mutated();
|
||||
}
|
||||
|
||||
virtual void SetRect(const LayerRect& aRect)
|
||||
{
|
||||
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) Rect", this));
|
||||
mRect = aRect;
|
||||
Mutated();
|
||||
}
|
||||
|
||||
// Size of each rounded corner as in css::Corner, 0.0 means a
|
||||
// rectangular corner.
|
||||
virtual void SetCornerRadii(const BorderCorners& aCorners)
|
||||
{
|
||||
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) Corners", this));
|
||||
PodCopy(&mCorners[0], &aCorners[0], 4);
|
||||
Mutated();
|
||||
}
|
||||
|
||||
virtual void SetWidths(const BorderWidths& aWidths)
|
||||
{
|
||||
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) Widths", this));
|
||||
PodCopy(&mWidths[0], &aWidths[0], 4);
|
||||
Mutated();
|
||||
}
|
||||
|
||||
MOZ_LAYER_DECL_NAME("BorderLayer", TYPE_BORDER)
|
||||
|
||||
virtual void ComputeEffectiveTransforms(const gfx::Matrix4x4& aTransformToSurface) override
|
||||
{
|
||||
gfx::Matrix4x4 idealTransform = GetLocalTransform() * aTransformToSurface;
|
||||
mEffectiveTransform = SnapTransformTranslation(idealTransform, nullptr);
|
||||
ComputeEffectiveTransformForMaskLayers(aTransformToSurface);
|
||||
}
|
||||
|
||||
protected:
|
||||
BorderLayer(LayerManager* aManager, void* aImplData)
|
||||
: Layer(aManager, aImplData)
|
||||
{}
|
||||
|
||||
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) override;
|
||||
|
||||
virtual void DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent) override;
|
||||
|
||||
BorderColors mColors;
|
||||
LayerRect mRect;
|
||||
BorderCorners mCorners;
|
||||
BorderWidths mWidths;
|
||||
};
|
||||
|
||||
/**
|
||||
* A Layer for HTML Canvas elements. It's backed by either a
|
||||
* gfxASurface or a GLContext (for WebGL layers), and has some control
|
||||
|
|
|
@ -242,6 +242,10 @@ typedef gfx::Matrix4x4Typed<LayerPixel, CSSTransformedLayerPixel> CSSTransformMa
|
|||
typedef gfx::Matrix4x4Typed<ParentLayerPixel, ParentLayerPixel> AsyncTransformComponentMatrix;
|
||||
typedef gfx::Matrix4x4Typed<CSSTransformedLayerPixel, ParentLayerPixel> AsyncTransformMatrix;
|
||||
|
||||
typedef Array<gfx::Color, 4> BorderColors;
|
||||
typedef Array<LayerSize, 4> BorderCorners;
|
||||
typedef Array<LayerCoord, 4> BorderWidths;
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
||||
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
/* -*- 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/. */
|
||||
|
||||
#include "BasicLayersImpl.h" // for FillRectWithMask, etc
|
||||
#include "Layers.h" // for ColorLayer, etc
|
||||
#include "BasicImplData.h" // for BasicImplData
|
||||
#include "BasicLayers.h" // for BasicLayerManager
|
||||
#include "gfxContext.h" // for gfxContext, etc
|
||||
#include "gfxRect.h" // for gfxRect
|
||||
#include "gfx2DGlue.h"
|
||||
#include "mozilla/mozalloc.h" // for operator new
|
||||
#include "nsCOMPtr.h" // for already_AddRefed
|
||||
#include "nsDebug.h" // for NS_ASSERTION
|
||||
#include "nsISupportsImpl.h" // for Layer::AddRef, etc
|
||||
#include "nsRect.h" // for mozilla::gfx::IntRect
|
||||
#include "nsRegion.h" // for nsIntRegion
|
||||
#include "mozilla/gfx/PathHelpers.h"
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
class BasicBorderLayer : public BorderLayer, public BasicImplData {
|
||||
public:
|
||||
explicit BasicBorderLayer(BasicLayerManager* aLayerManager) :
|
||||
BorderLayer(aLayerManager, static_cast<BasicImplData*>(this))
|
||||
{
|
||||
MOZ_COUNT_CTOR(BasicBorderLayer);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~BasicBorderLayer()
|
||||
{
|
||||
MOZ_COUNT_DTOR(BasicBorderLayer);
|
||||
}
|
||||
|
||||
public:
|
||||
virtual void SetVisibleRegion(const LayerIntRegion& aRegion) override
|
||||
{
|
||||
NS_ASSERTION(BasicManager()->InConstruction(),
|
||||
"Can only set properties in construction phase");
|
||||
BorderLayer::SetVisibleRegion(aRegion);
|
||||
}
|
||||
|
||||
virtual void Paint(DrawTarget* aDT,
|
||||
const gfx::Point& aDeviceOffset,
|
||||
Layer* aMaskLayer) override
|
||||
{
|
||||
if (IsHidden()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We currently assume that we never have rounded corners,
|
||||
// and that all borders have the same width and color.
|
||||
|
||||
ColorPattern color(mColors[0]);
|
||||
StrokeOptions strokeOptions(mWidths[0]);
|
||||
|
||||
Rect rect = mRect.ToUnknownRect();
|
||||
rect.Deflate(mWidths[0] / 2.0);
|
||||
aDT->StrokeRect(rect, color, strokeOptions);
|
||||
}
|
||||
|
||||
protected:
|
||||
BasicLayerManager* BasicManager()
|
||||
{
|
||||
return static_cast<BasicLayerManager*>(mManager);
|
||||
}
|
||||
};
|
||||
|
||||
already_AddRefed<BorderLayer>
|
||||
BasicLayerManager::CreateBorderLayer()
|
||||
{
|
||||
NS_ASSERTION(InConstruction(), "Only allowed in construction phase");
|
||||
RefPtr<BorderLayer> layer = new BasicBorderLayer(this);
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
|
@ -115,6 +115,7 @@ public:
|
|||
virtual already_AddRefed<CanvasLayer> CreateCanvasLayer() override;
|
||||
virtual already_AddRefed<ColorLayer> CreateColorLayer() override;
|
||||
virtual already_AddRefed<TextLayer> CreateTextLayer() override;
|
||||
virtual already_AddRefed<BorderLayer> CreateBorderLayer() override;
|
||||
virtual already_AddRefed<ReadbackLayer> CreateReadbackLayer() override;
|
||||
virtual ImageFactory *GetImageFactory();
|
||||
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
/* -*- 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/. */
|
||||
|
||||
#include "ClientLayerManager.h" // for ClientLayerManager, etc
|
||||
#include "Layers.h" // for ColorLayer, etc
|
||||
#include "mozilla/layers/LayersMessages.h" // for ColorLayerAttributes, etc
|
||||
#include "mozilla/mozalloc.h" // for operator new
|
||||
#include "nsCOMPtr.h" // for already_AddRefed
|
||||
#include "nsDebug.h" // for NS_ASSERTION
|
||||
#include "nsISupportsImpl.h" // for Layer::AddRef, etc
|
||||
#include "nsRegion.h" // for nsIntRegion
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
class ClientBorderLayer : public BorderLayer,
|
||||
public ClientLayer {
|
||||
public:
|
||||
explicit ClientBorderLayer(ClientLayerManager* aLayerManager) :
|
||||
BorderLayer(aLayerManager, static_cast<ClientLayer*>(this))
|
||||
{
|
||||
MOZ_COUNT_CTOR(ClientBorderLayer);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~ClientBorderLayer()
|
||||
{
|
||||
MOZ_COUNT_DTOR(ClientBorderLayer);
|
||||
}
|
||||
|
||||
public:
|
||||
virtual void SetVisibleRegion(const LayerIntRegion& aRegion)
|
||||
{
|
||||
NS_ASSERTION(ClientManager()->InConstruction(),
|
||||
"Can only set properties in construction phase");
|
||||
BorderLayer::SetVisibleRegion(aRegion);
|
||||
}
|
||||
|
||||
virtual void RenderLayer()
|
||||
{
|
||||
RenderMaskLayers(this);
|
||||
}
|
||||
|
||||
virtual void FillSpecificAttributes(SpecificLayerAttributes& aAttrs)
|
||||
{
|
||||
aAttrs = BorderLayerAttributes(mRect, mColors, mCorners, mWidths);
|
||||
}
|
||||
|
||||
virtual Layer* AsLayer() { return this; }
|
||||
virtual ShadowableLayer* AsShadowableLayer() { return this; }
|
||||
|
||||
virtual void Disconnect()
|
||||
{
|
||||
ClientLayer::Disconnect();
|
||||
}
|
||||
|
||||
protected:
|
||||
ClientLayerManager* ClientManager()
|
||||
{
|
||||
return static_cast<ClientLayerManager*>(mManager);
|
||||
}
|
||||
};
|
||||
|
||||
already_AddRefed<BorderLayer>
|
||||
ClientLayerManager::CreateBorderLayer()
|
||||
{
|
||||
NS_ASSERTION(InConstruction(), "Only allowed in construction phase");
|
||||
RefPtr<ClientBorderLayer> layer =
|
||||
new ClientBorderLayer(this);
|
||||
CREATE_SHADOW(Border);
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
|
@ -88,6 +88,7 @@ public:
|
|||
virtual already_AddRefed<ReadbackLayer> CreateReadbackLayer() override;
|
||||
virtual already_AddRefed<ColorLayer> CreateColorLayer() override;
|
||||
virtual already_AddRefed<TextLayer> CreateTextLayer() override;
|
||||
virtual already_AddRefed<BorderLayer> CreateBorderLayer() override;
|
||||
virtual already_AddRefed<RefLayer> CreateRefLayer() override;
|
||||
|
||||
void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier);
|
||||
|
|
|
@ -1165,6 +1165,49 @@ public:
|
|||
virtual const char* Name() const override { return "TextLayerComposite"; }
|
||||
};
|
||||
|
||||
class BorderLayerComposite : public BorderLayer,
|
||||
public LayerComposite
|
||||
{
|
||||
public:
|
||||
explicit BorderLayerComposite(LayerManagerComposite *aManager)
|
||||
: BorderLayer(aManager, nullptr)
|
||||
, LayerComposite(aManager)
|
||||
{
|
||||
MOZ_COUNT_CTOR(BorderLayerComposite);
|
||||
mImplData = static_cast<LayerComposite*>(this);
|
||||
}
|
||||
|
||||
protected:
|
||||
~BorderLayerComposite()
|
||||
{
|
||||
MOZ_COUNT_DTOR(BorderLayerComposite);
|
||||
Destroy();
|
||||
}
|
||||
|
||||
public:
|
||||
// LayerComposite Implementation
|
||||
virtual Layer* GetLayer() override { return this; }
|
||||
|
||||
virtual void SetLayerManager(HostLayerManager* aManager) override
|
||||
{
|
||||
LayerComposite::SetLayerManager(aManager);
|
||||
mManager = aManager;
|
||||
}
|
||||
|
||||
virtual void Destroy() override { mDestroyed = true; }
|
||||
|
||||
virtual void RenderLayer(const gfx::IntRect& aClipRect) override {}
|
||||
virtual void CleanupResources() override {};
|
||||
|
||||
virtual void GenEffectChain(EffectChain& aEffect) override {}
|
||||
|
||||
CompositableHost* GetCompositableHost() override { return nullptr; }
|
||||
|
||||
virtual HostLayer* AsHostLayer() override { return this; }
|
||||
|
||||
virtual const char* Name() const override { return "BorderLayerComposite"; }
|
||||
};
|
||||
|
||||
already_AddRefed<PaintedLayer>
|
||||
LayerManagerComposite::CreatePaintedLayer()
|
||||
{
|
||||
|
@ -1235,6 +1278,16 @@ LayerManagerComposite::CreateTextLayer()
|
|||
return RefPtr<TextLayer>(new TextLayerComposite(this)).forget();
|
||||
}
|
||||
|
||||
already_AddRefed<BorderLayer>
|
||||
LayerManagerComposite::CreateBorderLayer()
|
||||
{
|
||||
if (LayerManagerComposite::mDestroyed) {
|
||||
NS_WARNING("Call on destroyed layer manager");
|
||||
return nullptr;
|
||||
}
|
||||
return RefPtr<BorderLayer>(new BorderLayerComposite(this)).forget();
|
||||
}
|
||||
|
||||
LayerManagerComposite::AutoAddMaskEffect::AutoAddMaskEffect(Layer* aMaskLayer,
|
||||
EffectChain& aEffects)
|
||||
: mCompositable(nullptr), mFailed(false)
|
||||
|
|
|
@ -240,6 +240,7 @@ public:
|
|||
virtual already_AddRefed<ImageLayer> CreateImageLayer() override;
|
||||
virtual already_AddRefed<ColorLayer> CreateColorLayer() override;
|
||||
virtual already_AddRefed<TextLayer> CreateTextLayer() override;
|
||||
virtual already_AddRefed<BorderLayer> CreateBorderLayer() override;
|
||||
virtual already_AddRefed<CanvasLayer> CreateCanvasLayer() override;
|
||||
virtual already_AddRefed<RefLayer> CreateRefLayer() override;
|
||||
|
||||
|
|
|
@ -337,6 +337,15 @@ LayerTransactionParent::RecvUpdate(InfallibleTArray<Edit>&& cset,
|
|||
updateHitTestingTree = true;
|
||||
break;
|
||||
}
|
||||
case Edit::TOpCreateBorderLayer: {
|
||||
MOZ_LAYERS_LOG(("[ParentSide] CreateTextLayer"));
|
||||
|
||||
RefPtr<BorderLayer> layer = layer_manager()->CreateBorderLayer();
|
||||
AsLayerComposite(edit.get_OpCreateBorderLayer())->Bind(layer);
|
||||
|
||||
updateHitTestingTree = true;
|
||||
break;
|
||||
}
|
||||
case Edit::TOpCreateCanvasLayer: {
|
||||
MOZ_LAYERS_LOG(("[ParentSide] CreateCanvasLayer"));
|
||||
|
||||
|
@ -480,6 +489,19 @@ LayerTransactionParent::RecvUpdate(InfallibleTArray<Edit>&& cset,
|
|||
textLayer->SetScaledFont(reinterpret_cast<gfx::ScaledFont*>(specific.get_TextLayerAttributes().scaledFont()));
|
||||
break;
|
||||
}
|
||||
case Specific::TBorderLayerAttributes: {
|
||||
MOZ_LAYERS_LOG(("[ParentSide] border layer"));
|
||||
|
||||
BorderLayer* borderLayer = layerParent->AsBorderLayer();
|
||||
if (!borderLayer) {
|
||||
return IPC_FAIL_NO_REASON(this);
|
||||
}
|
||||
borderLayer->SetRect(specific.get_BorderLayerAttributes().rect());
|
||||
borderLayer->SetColors(specific.get_BorderLayerAttributes().colors());
|
||||
borderLayer->SetCornerRadii(specific.get_BorderLayerAttributes().corners());
|
||||
borderLayer->SetWidths(specific.get_BorderLayerAttributes().widths());
|
||||
break;
|
||||
}
|
||||
case Specific::TCanvasLayerAttributes: {
|
||||
MOZ_LAYERS_LOG(("[ParentSide] canvas layer"));
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@ using mozilla::dom::ScreenOrientationInternal from "mozilla/dom/ScreenOrientatio
|
|||
using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
|
||||
using mozilla::LayerMargin from "Units.h";
|
||||
using mozilla::LayerPoint from "Units.h";
|
||||
using mozilla::LayerCoord from "Units.h";
|
||||
using mozilla::LayerSize from "Units.h";
|
||||
using mozilla::LayerRect from "Units.h";
|
||||
using mozilla::LayerIntRegion from "Units.h";
|
||||
using mozilla::ParentLayerIntRect from "Units.h";
|
||||
|
@ -46,6 +48,9 @@ using mozilla::layers::FrameMetrics::ViewID from "FrameMetrics.h";
|
|||
using mozilla::layers::LayersBackend from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::layers::MaybeLayerClip from "FrameMetrics.h";
|
||||
using mozilla::gfx::Glyph from "Layers.h";
|
||||
using mozilla::layers::BorderColors from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::layers::BorderCorners from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::layers::BorderWidths from "mozilla/layers/LayersTypes.h";
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
@ -63,6 +68,7 @@ struct OpCreateContainerLayer { PLayer layer; };
|
|||
struct OpCreateImageLayer { PLayer layer; };
|
||||
struct OpCreateColorLayer { PLayer layer; };
|
||||
struct OpCreateTextLayer { PLayer layer; };
|
||||
struct OpCreateBorderLayer { PLayer layer; };
|
||||
struct OpCreateCanvasLayer { PLayer layer; };
|
||||
struct OpCreateRefLayer { PLayer layer; };
|
||||
|
||||
|
@ -276,6 +282,12 @@ struct RefLayerAttributes {
|
|||
EventRegionsOverride eventRegionsOverride;
|
||||
};
|
||||
struct ImageLayerAttributes { SamplingFilter samplingFilter; IntSize scaleToSize; ScaleMode scaleMode; };
|
||||
struct BorderLayerAttributes {
|
||||
LayerRect rect;
|
||||
BorderColors colors;
|
||||
BorderCorners corners;
|
||||
BorderWidths widths;
|
||||
};
|
||||
|
||||
union SpecificLayerAttributes {
|
||||
null_t;
|
||||
|
@ -286,6 +298,7 @@ union SpecificLayerAttributes {
|
|||
TextLayerAttributes;
|
||||
RefLayerAttributes;
|
||||
ImageLayerAttributes;
|
||||
BorderLayerAttributes;
|
||||
};
|
||||
|
||||
struct LayerAttributes {
|
||||
|
@ -453,6 +466,7 @@ union Edit {
|
|||
OpCreateImageLayer;
|
||||
OpCreateColorLayer;
|
||||
OpCreateTextLayer;
|
||||
OpCreateBorderLayer;
|
||||
OpCreateCanvasLayer;
|
||||
OpCreateRefLayer;
|
||||
|
||||
|
|
|
@ -112,6 +112,14 @@ ShadowLayerParent::AsTextLayer() const
|
|||
: nullptr;
|
||||
}
|
||||
|
||||
BorderLayer*
|
||||
ShadowLayerParent::AsBorderLayer() const
|
||||
{
|
||||
return mLayer && mLayer->GetType() == Layer::TYPE_BORDER
|
||||
? static_cast<BorderLayer*>(mLayer.get())
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
ShadowLayerParent::ActorDestroy(ActorDestroyReason why)
|
||||
{
|
||||
|
|
|
@ -43,6 +43,7 @@ public:
|
|||
ColorLayer* AsColorLayer() const;
|
||||
TextLayer* AsTextLayer() const;
|
||||
ImageLayer* AsImageLayer() const;
|
||||
BorderLayer* AsBorderLayer() const;
|
||||
RefLayer* AsRefLayer() const;
|
||||
PaintedLayer* AsPaintedLayer() const;
|
||||
|
||||
|
|
|
@ -271,6 +271,11 @@ ShadowLayerForwarder::CreatedTextLayer(ShadowableLayer* aColor)
|
|||
CreatedLayer<OpCreateTextLayer>(mTxn, aColor);
|
||||
}
|
||||
void
|
||||
ShadowLayerForwarder::CreatedBorderLayer(ShadowableLayer* aBorder)
|
||||
{
|
||||
CreatedLayer<OpCreateBorderLayer>(mTxn, aBorder);
|
||||
}
|
||||
void
|
||||
ShadowLayerForwarder::CreatedCanvasLayer(ShadowableLayer* aCanvas)
|
||||
{
|
||||
CreatedLayer<OpCreateCanvasLayer>(mTxn, aCanvas);
|
||||
|
|
|
@ -210,6 +210,7 @@ public:
|
|||
void CreatedCanvasLayer(ShadowableLayer* aCanvas);
|
||||
void CreatedRefLayer(ShadowableLayer* aRef);
|
||||
void CreatedTextLayer(ShadowableLayer* aRef);
|
||||
void CreatedBorderLayer(ShadowableLayer* aRef);
|
||||
|
||||
/**
|
||||
* At least one attribute of |aMutant| has changed, and |aMutant|
|
||||
|
|
|
@ -274,6 +274,7 @@ UNIFIED_SOURCES += [
|
|||
'AsyncCanvasRenderer.cpp',
|
||||
'AxisPhysicsModel.cpp',
|
||||
'AxisPhysicsMSDModel.cpp',
|
||||
'basic/BasicBorderLayer.cpp',
|
||||
'basic/BasicCanvasLayer.cpp',
|
||||
'basic/BasicColorLayer.cpp',
|
||||
'basic/BasicCompositor.cpp',
|
||||
|
@ -288,6 +289,7 @@ UNIFIED_SOURCES += [
|
|||
'BufferTexture.cpp',
|
||||
'BufferUnrotate.cpp',
|
||||
'client/CanvasClient.cpp',
|
||||
'client/ClientBorderLayer.cpp',
|
||||
'client/ClientCanvasLayer.cpp',
|
||||
'client/ClientColorLayer.cpp',
|
||||
'client/ClientContainerLayer.cpp',
|
||||
|
|
10
mfbt/Array.h
10
mfbt/Array.h
|
@ -46,6 +46,16 @@ public:
|
|||
return mArr[aIndex];
|
||||
}
|
||||
|
||||
bool operator==(const Array<T, Length>& aOther) const
|
||||
{
|
||||
for (size_t i = 0; i < Length; i++) {
|
||||
if (mArr[i] != aOther[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef T* iterator;
|
||||
typedef const T* const_iterator;
|
||||
typedef ReverseIterator<T*> reverse_iterator;
|
||||
|
|
Загрузка…
Ссылка в новой задаче