Backed out 7 changesets (bug 902525) for B2G reftest failures.

Backed out changeset bbca63772c83 (bug 902525)
Backed out changeset edb386989dbd (bug 902525)
Backed out changeset 3137dadb4fcd (bug 902525)
Backed out changeset e562afcb3c89 (bug 902525)
Backed out changeset 8ef3a516bd68 (bug 902525)
Backed out changeset 520fcd422150 (bug 902525)
Backed out changeset 4e553e8da44e (bug 902525)
This commit is contained in:
Ryan VanderMeulen 2013-09-15 18:59:27 -04:00
Родитель 53987a6270
Коммит a3f1ea6990
73 изменённых файлов: 17 добавлений и 1376 удалений

Просмотреть файл

@ -181,8 +181,6 @@ Layer::Layer(LayerManager* aManager, void* aImplData) :
mPostXScale(1.0f),
mPostYScale(1.0f),
mOpacity(1.0),
mMixBlendMode(gfxContext::OPERATOR_OVER),
mForceIsolatedGroup(false),
mContentFlags(0),
mUseClipRect(false),
mUseTileSourceRect(false),
@ -683,20 +681,6 @@ Layer::GetEffectiveOpacity()
return opacity;
}
gfxContext::GraphicsOperator
Layer::GetEffectiveMixBlendMode()
{
if(mMixBlendMode != gfxContext::OPERATOR_OVER)
return mMixBlendMode;
for (ContainerLayer* c = GetParent(); c && !c->UseIntermediateSurface();
c = c->GetParent()) {
if(c->mMixBlendMode != gfxContext::OPERATOR_OVER)
return c->mMixBlendMode;
}
return mMixBlendMode;
}
void
Layer::ComputeEffectiveTransformForMaskLayer(const gfx3DMatrix& aTransformToSurface)
{

Просмотреть файл

@ -12,7 +12,6 @@
#include "FrameMetrics.h" // for FrameMetrics
#include "Units.h" // for LayerMargin, LayerPoint
#include "gfx3DMatrix.h" // for gfx3DMatrix
#include "gfxContext.h" // for GraphicsOperator
#include "gfxASurface.h" // for gfxASurface, etc
#include "gfxColor.h" // for gfxRGBA
#include "gfxMatrix.h" // for gfxMatrix
@ -733,29 +732,6 @@ public:
}
}
void SetMixBlendMode(gfxContext::GraphicsOperator aMixBlendMode)
{
if (mMixBlendMode != aMixBlendMode) {
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) MixBlendMode", this));
mMixBlendMode = aMixBlendMode;
Mutated();
}
}
void SetForceIsolatedGroup(bool aForceIsolatedGroup)
{
if(mForceIsolatedGroup != aForceIsolatedGroup) {
MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) ForceIsolatedGroup", this));
mForceIsolatedGroup = aForceIsolatedGroup;
Mutated();
}
}
bool GetForceIsolatedGroup() const
{
return mForceIsolatedGroup;
}
/**
* CONSTRUCTION PHASE ONLY
* Set a clip rect which will be applied to this layer as it is
@ -961,7 +937,6 @@ public:
// These getters can be used anytime.
float GetOpacity() { return mOpacity; }
gfxContext::GraphicsOperator GetMixBlendMode() const { return mMixBlendMode; }
const nsIntRect* GetClipRect() { return mUseClipRect ? &mClipRect : nullptr; }
uint32_t GetContentFlags() { return mContentFlags; }
const nsIntRegion& GetVisibleRegion() { return mVisibleRegion; }
@ -1127,18 +1102,11 @@ public:
// accounting for this layer possibly being a shadow.
const nsIntRect* GetEffectiveClipRect();
const nsIntRegion& GetEffectiveVisibleRegion();
/**
* Returns the product of the opacities of this layer and all ancestors up
* to and excluding the nearest ancestor that has UseIntermediateSurface() set.
*/
float GetEffectiveOpacity();
/**
* Returns the blendmode of this layer.
*/
gfxContext::GraphicsOperator GetEffectiveMixBlendMode();
/**
* This returns the effective transform computed by
* ComputeEffectiveTransforms. Typically this is a transform that transforms
@ -1336,8 +1304,6 @@ protected:
AnimationArray mAnimations;
InfallibleTArray<AnimData> mAnimationData;
float mOpacity;
gfxContext::GraphicsOperator mMixBlendMode;
bool mForceIsolatedGroup;
nsIntRect mClipRect;
nsIntRect mTileSourceRect;
nsIntRegion mInvalidRegion;

Просмотреть файл

@ -27,8 +27,7 @@ BasicCanvasLayer::Paint(gfxContext* aContext, Layer* aMaskLayer)
UpdateSurface();
FireDidTransactionCallback();
gfxContext::GraphicsOperator mixBlendMode = GetEffectiveMixBlendMode();
PaintWithOpacity(aContext, GetEffectiveOpacity(), aMaskLayer, mixBlendMode != gfxContext::OPERATOR_OVER ? mixBlendMode : GetOperator());
PaintWithOpacity(aContext, GetEffectiveOpacity(), aMaskLayer, GetOperator());
}
already_AddRefed<CanvasLayer>

Просмотреть файл

@ -48,8 +48,7 @@ public:
if (IsHidden())
return;
gfxContextAutoSaveRestore contextSR(aContext);
gfxContext::GraphicsOperator mixBlendMode = GetEffectiveMixBlendMode();
AutoSetOperator setOptimizedOperator(aContext, mixBlendMode != gfxContext::OPERATOR_OVER ? mixBlendMode : GetOperator());
AutoSetOperator setOperator(aContext, GetOperator());
aContext->SetColor(mColor);

Просмотреть файл

@ -58,24 +58,15 @@ BasicContainerLayer::ComputeEffectiveTransforms(const gfx3DMatrix& aTransformToS
ComputeEffectiveTransformForMaskLayer(aTransformToSurface);
Layer* child = GetFirstChild();
bool hasSingleBlendingChild = false;
if (!HasMultipleChildren() && child) {
hasSingleBlendingChild = child->GetMixBlendMode() != gfxContext::OPERATOR_OVER;
}
/* If we have a single childand it is not blending,, it can just inherit our opacity,
/* If we have a single child, it can just inherit our opacity,
* otherwise we need a PushGroup and we need to mark ourselves as using
* an intermediate surface so our children don't inherit our opacity
* via GetEffectiveOpacity.
* Having a mask layer always forces our own push group
* Having a blend mode also always forces our own push group
*/
mUseIntermediateSurface =
GetMaskLayer() ||
GetForceIsolatedGroup() ||
(GetMixBlendMode() != gfxContext::OPERATOR_OVER && HasMultipleChildren()) ||
(GetEffectiveOpacity() != 1.0 && (HasMultipleChildren() || hasSingleBlendingChild));
GetMaskLayer() || (GetEffectiveOpacity() != 1.0 &&
HasMultipleChildren());
}
bool

Просмотреть файл

@ -110,9 +110,7 @@ BasicImageLayer::GetAndPaintCurrentImage(gfxContext* aContext,
// The visible region can extend outside the image, so just draw
// within the image bounds.
if (aContext) {
gfxContext::GraphicsOperator mixBlendMode = GetEffectiveMixBlendMode();
AutoSetOperator setOptimizedOperator(aContext, mixBlendMode != gfxContext::OPERATOR_OVER ? mixBlendMode : GetOperator());
AutoSetOperator setOperator(aContext, GetOperator());
PaintContext(pat,
nsIntRegion(nsIntRect(0, 0, size.width, size.height)),
aOpacity, aContext, aMaskLayer);

Просмотреть файл

@ -109,7 +109,6 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext,
canUseOpaqueSurface ? gfxASurface::CONTENT_COLOR :
gfxASurface::CONTENT_COLOR_ALPHA;
float opacity = GetEffectiveOpacity();
gfxContext::GraphicsOperator mixBlendMode = GetEffectiveMixBlendMode();
if (!BasicManager()->IsRetained()) {
NS_ASSERTION(readbackUpdates.IsEmpty(), "Can't do readback for non-retained layer");
@ -131,13 +130,13 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext,
bool needsClipToVisibleRegion = GetClipToVisibleRegion();
bool needsGroup =
opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER || mixBlendMode != gfxContext::OPERATOR_OVER || aMaskLayer;
opacity != 1.0 || GetOperator() != gfxContext::OPERATOR_OVER || aMaskLayer;
nsRefPtr<gfxContext> groupContext;
if (needsGroup) {
groupContext =
BasicManager()->PushGroupForLayer(aContext, this, toDraw,
&needsClipToVisibleRegion);
if (GetOperator() != gfxContext::OPERATOR_OVER || mixBlendMode != gfxContext::OPERATOR_OVER) {
if (GetOperator() != gfxContext::OPERATOR_OVER) {
needsClipToVisibleRegion = true;
}
} else {
@ -150,7 +149,7 @@ BasicThebesLayer::PaintThebes(gfxContext* aContext,
if (needsClipToVisibleRegion) {
gfxUtils::ClipToRegion(aContext, toDraw);
}
AutoSetOperator setOptimizedOperator(aContext, mixBlendMode != gfxContext::OPERATOR_OVER ? mixBlendMode : GetOperator());
AutoSetOperator setOperator(aContext, GetOperator());
PaintWithMask(aContext, opacity, aMaskLayer);
}

Просмотреть файл

@ -3,7 +3,6 @@ DECLARE_DISPLAY_ITEM_TYPE(ALT_FEEDBACK)
DECLARE_DISPLAY_ITEM_TYPE(BACKGROUND)
DECLARE_DISPLAY_ITEM_TYPE(THEMED_BACKGROUND)
DECLARE_DISPLAY_ITEM_TYPE_FLAGS(BACKGROUND_COLOR,TYPE_RENDERS_NO_IMAGES)
DECLARE_DISPLAY_ITEM_TYPE(BLEND_CONTAINER)
DECLARE_DISPLAY_ITEM_TYPE(BORDER)
DECLARE_DISPLAY_ITEM_TYPE(BOX_SHADOW_OUTER)
DECLARE_DISPLAY_ITEM_TYPE(BOX_SHADOW_INNER)
@ -30,7 +29,6 @@ DECLARE_DISPLAY_ITEM_TYPE(FRAMESET_BLANK)
DECLARE_DISPLAY_ITEM_TYPE(HEADER_FOOTER)
DECLARE_DISPLAY_ITEM_TYPE(IMAGE)
DECLARE_DISPLAY_ITEM_TYPE(LIST_FOCUS)
DECLARE_DISPLAY_ITEM_TYPE(MIX_BLEND_MODE)
DECLARE_DISPLAY_ITEM_TYPE(OPACITY)
DECLARE_DISPLAY_ITEM_TYPE(OPTION_EVENT_GRABBER)
DECLARE_DISPLAY_ITEM_TYPE(OUTLINE)

Просмотреть файл

@ -486,8 +486,7 @@ nsDisplayListBuilder::nsDisplayListBuilder(nsIFrame* aReferenceFrame,
mHasFixedItems(false),
mIsInFixedPosition(false),
mIsCompositingCheap(false),
mContainsPluginItem(false),
mContainsBlendMode(false)
mContainsPluginItem(false)
{
MOZ_COUNT_CTOR(nsDisplayListBuilder);
PL_InitArenaPool(&mPool, "displayListArena", 1024,
@ -3118,144 +3117,6 @@ bool nsDisplayOpacity::TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* a
return true;
}
nsDisplayMixBlendMode::nsDisplayMixBlendMode(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
uint32_t aFlags)
: nsDisplayWrapList(aBuilder, aFrame, aList) {
MOZ_COUNT_CTOR(nsDisplayMixBlendMode);
}
#ifdef NS_BUILD_REFCNT_LOGGING
nsDisplayMixBlendMode::~nsDisplayMixBlendMode() {
MOZ_COUNT_DTOR(nsDisplayMixBlendMode);
}
#endif
nsRegion nsDisplayMixBlendMode::GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
bool* aSnap) {
*aSnap = false;
// We are never considered opaque
return nsRegion();
}
static gfxContext::GraphicsOperator GetGFXBlendMode(uint8_t mBlendMode) {
switch (mBlendMode) {
case NS_STYLE_BLEND_NORMAL: return gfxContext::OPERATOR_OVER;
case NS_STYLE_BLEND_MULTIPLY: return gfxContext::OPERATOR_MULTIPLY;
case NS_STYLE_BLEND_SCREEN: return gfxContext::OPERATOR_SCREEN;
case NS_STYLE_BLEND_OVERLAY: return gfxContext::OPERATOR_OVERLAY;
case NS_STYLE_BLEND_DARKEN: return gfxContext::OPERATOR_DARKEN;
case NS_STYLE_BLEND_LIGHTEN: return gfxContext::OPERATOR_LIGHTEN;
case NS_STYLE_BLEND_COLOR_DODGE: return gfxContext::OPERATOR_COLOR_DODGE;
case NS_STYLE_BLEND_COLOR_BURN: return gfxContext::OPERATOR_COLOR_BURN;
case NS_STYLE_BLEND_HARD_LIGHT: return gfxContext::OPERATOR_HARD_LIGHT;
case NS_STYLE_BLEND_SOFT_LIGHT: return gfxContext::OPERATOR_SOFT_LIGHT;
case NS_STYLE_BLEND_DIFFERENCE: return gfxContext::OPERATOR_DIFFERENCE;
case NS_STYLE_BLEND_EXCLUSION: return gfxContext::OPERATOR_EXCLUSION;
case NS_STYLE_BLEND_HUE: return gfxContext::OPERATOR_HUE;
case NS_STYLE_BLEND_SATURATION: return gfxContext::OPERATOR_SATURATION;
case NS_STYLE_BLEND_COLOR: return gfxContext::OPERATOR_COLOR;
case NS_STYLE_BLEND_LUMINOSITY: return gfxContext::OPERATOR_LUMINOSITY;
default: MOZ_ASSERT(false); return gfxContext::OPERATOR_OVER;
}
return gfxContext::OPERATOR_OVER;
}
// nsDisplayMixBlendMode uses layers for rendering
already_AddRefed<Layer>
nsDisplayMixBlendMode::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aContainerParameters) {
ContainerParameters newContainerParameters = aContainerParameters;
newContainerParameters.mDisableSubpixelAntialiasingInDescendants = true;
nsRefPtr<Layer> container = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, mList,
newContainerParameters, nullptr);
if (!container) {
return nullptr;
}
container->SetMixBlendMode(GetGFXBlendMode(mFrame->StyleDisplay()->mMixBlendMode));
return container.forget();
}
bool nsDisplayMixBlendMode::ComputeVisibility(nsDisplayListBuilder* aBuilder,
nsRegion* aVisibleRegion,
const nsRect& aAllowVisibleRegionExpansion) {
// Our children are need their backdrop so we should not allow them to subtract
// area from aVisibleRegion. We do need to find out what is visible under
// our children in the temporary compositing buffer, because if our children
// paint our entire bounds opaquely then we don't need an alpha channel in
// the temporary compositing buffer.
nsRect bounds = GetClippedBounds(aBuilder);
nsRegion visibleUnderChildren;
visibleUnderChildren.And(*aVisibleRegion, bounds);
nsRect allowExpansion = bounds.Intersect(aAllowVisibleRegionExpansion);
return
nsDisplayWrapList::ComputeVisibility(aBuilder, &visibleUnderChildren,
allowExpansion);
}
bool nsDisplayMixBlendMode::TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) {
if (aItem->GetType() != TYPE_MIX_BLEND_MODE)
return false;
// items for the same content element should be merged into a single
// compositing group
// aItem->GetUnderlyingFrame() returns non-null because it's nsDisplayOpacity
if (aItem->Frame()->GetContent() != mFrame->GetContent())
return false;
if (aItem->GetClip() != GetClip())
return false;
MergeFromTrackingMergedFrames(static_cast<nsDisplayMixBlendMode*>(aItem));
return true;
}
nsDisplayBlendContainer::nsDisplayBlendContainer(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
uint32_t aFlags)
: nsDisplayWrapList(aBuilder, aFrame, aList) {
MOZ_COUNT_CTOR(nsDisplayBlendContainer);
}
#ifdef NS_BUILD_REFCNT_LOGGING
nsDisplayBlendContainer::~nsDisplayBlendContainer() {
MOZ_COUNT_DTOR(nsDisplayBlendContainer);
}
#endif
// nsDisplayBlendContainer uses layers for rendering
already_AddRefed<Layer>
nsDisplayBlendContainer::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aContainerParameters) {
nsRefPtr<Layer> container = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, mList,
aContainerParameters, nullptr);
if (!container) {
return nullptr;
}
container->SetForceIsolatedGroup(true);
return container.forget();
}
bool nsDisplayBlendContainer::TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) {
if (aItem->GetType() != TYPE_BLEND_CONTAINER)
return false;
// items for the same content element should be merged into a single
// compositing group
// aItem->GetUnderlyingFrame() returns non-null because it's nsDisplayOpacity
if (aItem->Frame()->GetContent() != mFrame->GetContent())
return false;
if (aItem->GetClip() != GetClip())
return false;
MergeFromTrackingMergedFrames(static_cast<nsDisplayBlendContainer*>(aItem));
return true;
}
nsDisplayOwnLayer::nsDisplayOwnLayer(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
uint32_t aFlags)

Просмотреть файл

@ -622,14 +622,6 @@ public:
void SetContainsPluginItem() { mContainsPluginItem = true; }
bool ContainsPluginItem() { return mContainsPluginItem; }
/**
* mContainsBlendMode is true if we processed a display item that
* has a blend mode attached. We do this so we can insert a
* nsDisplayBlendContainer in the parent stacking context.
*/
void SetContainsBlendMode(bool aContainsBlendMode) { mContainsBlendMode = aContainsBlendMode; }
bool ContainsBlendMode() const { return mContainsBlendMode; }
DisplayListClipState& ClipState() { return mClipState; }
private:
@ -688,7 +680,6 @@ private:
bool mIsInFixedPosition;
bool mIsCompositingCheap;
bool mContainsPluginItem;
bool mContainsBlendMode;
};
class nsDisplayItem;
@ -2507,59 +2498,6 @@ public:
bool CanUseAsyncAnimations(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE;
};
class nsDisplayMixBlendMode : public nsDisplayWrapList {
public:
nsDisplayMixBlendMode(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList, uint32_t aFlags = 0);
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplayMixBlendMode();
#endif
nsRegion GetOpaqueRegion(nsDisplayListBuilder* aBuilder, bool* aSnap);
virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aContainerParameters) MOZ_OVERRIDE;
virtual void ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
const nsDisplayItemGeometry* aGeometry,
nsRegion* aInvalidRegion) MOZ_OVERRIDE
{
// We don't need to compute an invalidation region since we have LayerTreeInvalidation
}
virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aParameters) MOZ_OVERRIDE
{
return mozilla::LAYER_INACTIVE;
}
virtual bool ComputeVisibility(nsDisplayListBuilder* aBuilder,
nsRegion* aVisibleRegion,
const nsRect& aAllowVisibleRegionExpansion) MOZ_OVERRIDE;
virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE;
NS_DISPLAY_DECL_NAME("MixBlendMode", TYPE_MIX_BLEND_MODE)
};
class nsDisplayBlendContainer : public nsDisplayWrapList {
public:
nsDisplayBlendContainer(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList, uint32_t aFlags = 0);
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplayBlendContainer();
#endif
virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aContainerParameters) MOZ_OVERRIDE;
virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerParameters& aParameters) MOZ_OVERRIDE
{
return mozilla::LAYER_INACTIVE;
}
virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE;
NS_DISPLAY_DECL_NAME("BlendContainer", TYPE_BLEND_CONTAINER)
};
/**
* A display item that has no purpose but to ensure its contents get
* their own layer.

Просмотреть файл

@ -1758,21 +1758,6 @@ WrapPreserve3DList(nsIFrame* aFrame, nsDisplayListBuilder* aBuilder, nsDisplayLi
return rv;
}
class AutoSaveRestoreBlendMode
{
nsDisplayListBuilder& mBuilder;
bool AutoResetContainsBlendMode;
public:
AutoSaveRestoreBlendMode(nsDisplayListBuilder& aBuilder)
: mBuilder(aBuilder),
AutoResetContainsBlendMode(aBuilder.ContainsBlendMode()) {
}
~AutoSaveRestoreBlendMode() {
mBuilder.SetContainsBlendMode(AutoResetContainsBlendMode);
}
};
void
nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
@ -1801,12 +1786,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
bool inTransform = aBuilder->IsInTransform();
bool isTransformed = IsTransformed();
// reset blend mode so we can keep track if this stacking context needs have
// a nsDisplayBlendContainer. Set the blend mode back when the routine exits
// so we keep track if the parent stacking context needs a container too.
AutoSaveRestoreBlendMode autoRestoreBlendMode(*aBuilder);
aBuilder->SetContainsBlendMode(false);
if (isTransformed) {
if (aBuilder->IsForPainting() &&
nsDisplayTransform::ShouldPrerenderTransformedContent(aBuilder, this)) {
@ -1839,7 +1818,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
}
bool useOpacity = HasOpacity() && !nsSVGUtils::CanOptimizeOpacity(this);
bool useBlendMode = disp->mMixBlendMode != NS_STYLE_BLEND_NORMAL;
bool usingSVGEffects = nsSVGIntegrationUtils::UsingEffectsForFrame(this);
bool useStickyPosition = disp->mPosition == NS_STYLE_POSITION_STICKY &&
IsScrollFrameActive(nsLayoutUtils::GetNearestScrollableFrame(GetParent(),
@ -1848,7 +1826,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
DisplayListClipState::AutoSaveRestore clipState(aBuilder);
if (isTransformed || useOpacity || useBlendMode || usingSVGEffects || useStickyPosition) {
if (isTransformed || useOpacity || usingSVGEffects || useStickyPosition) {
// We don't need to pass ancestor clipping down to our children;
// everything goes inside a display item's child list, and the display
// item itself will be clipped.
@ -1998,21 +1976,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
}
}
/* If there's blending, wrap up the list in a blend-mode item. Note
* that opacity can be applied before blending as the blend color is
* not affected by foreground opacity (only background alpha).
*/
if (useBlendMode && !resultList.IsEmpty()) {
resultList.AppendNewToTop(
new (aBuilder) nsDisplayMixBlendMode(aBuilder, this, &resultList));
}
if (aBuilder->ContainsBlendMode()) {
resultList.AppendNewToTop(
new (aBuilder) nsDisplayBlendContainer(aBuilder, this, &resultList));
}
aList->AppendToTop(&resultList);
}
@ -2143,12 +2106,11 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
return;
// Child is composited if it's transformed, partially transparent, or has
// SVG effects or a blend mode..
// SVG effects.
const nsStyleDisplay* disp = child->StyleDisplay();
const nsStylePosition* pos = child->StylePosition();
bool isVisuallyAtomic = child->HasOpacity()
|| child->IsTransformed()
|| disp->mMixBlendMode != NS_STYLE_BLEND_NORMAL
|| nsSVGIntegrationUtils::UsingEffectsForFrame(child);
bool isPositioned = disp->IsPositioned(child);
@ -2203,9 +2165,6 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
nsDisplayList list;
nsDisplayList extraPositionedDescendants;
if (isStackingContext) {
if (disp->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
aBuilder->SetContainsBlendMode(true);
}
// True stacking context.
// For stacking contexts, BuildDisplayListForStackingContext handles
// clipping and MarkAbsoluteFramesForDisplayList.

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 14 KiB

Просмотреть файл

@ -1,28 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<script type="text/javascript">
window.onload = function() {
var c = document.getElementById("b");
var ctx = c.getContext("2d");
ctx.fillStyle = "rgb(0,0,0)";
ctx.fillRect(0,0,100,100);
}
</script>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
}
</style>
<div id="a">
<canvas width="100" height="100" id="b"/>
</div>
</html>

Просмотреть файл

@ -1,29 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<script type="text/javascript">
window.onload = function() {
var c = document.getElementById("b");
var ctx = c.getContext("2d");
ctx.fillStyle = "rgb(0,255,0)";
ctx.fillRect(0,0,100,100);
}
</script>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
mix-blend-mode:difference;
}
</style>
<div id="a">
<canvas width="100" height="100" id="b"/>
</div>
</html>

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
background-color: rgb(0,0,0);
}
</style>
<div id="a">
<div id="b">
</div>
</div>
</html>

Просмотреть файл

@ -1,23 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
background-color: rgb(0,255,0);
mix-blend-mode:difference;
}
</style>
<div id="a">
<div id="b">
</div>
</div>
</html>

Просмотреть файл

@ -1,20 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
background-color: rgb(0,255,0);
width: 200px;
height: 210px;
}
#b {
width: 100px;
height: 100px;
background-color: rgb(0,0,0);
}
</style>
<div id="a">
</div>
</html>

Просмотреть файл

@ -1,30 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
.a {
background-color: rgb(0,255,0);
}
#b {
width: 200px;
height: 210px;
}
.c {
width: 100px;
height: 100px;
mix-blend-mode: difference;
}
#d {
z-index: 1;
position: absolute;
top:110px;
}
</style>
<div id="b" class="a">
<div id="d">
<div class="a c"></div>
</div>
</div>
</html>

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
background: linear-gradient(rgb(0,255,255), rgb(255,255,0));
}
</style>
<div id="a">
<div id="b">
</div>
</div>
</html>

Просмотреть файл

@ -1,23 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
background: linear-gradient(rgb(0,0,255), rgb(255,0,0));
mix-blend-mode:difference;
}
</style>
<div id="a">
<div id="b">
</div>
</div>
</html>

Просмотреть файл

@ -1,20 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
}
</style>
<div id="a">
<img src="as-image/black100x100.png" id="b"/>
</div>
</html>

Просмотреть файл

@ -1,21 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#a {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#b {
width: 100px;
height: 100px;
mix-blend-mode:difference;
}
</style>
<div id="a">
<img src="as-image/green100x100.png" id="b"/>
</div>
</html>

Просмотреть файл

@ -1,5 +0,0 @@
pref(layout.css.mix-blend-mode.enabled,true) == blend-canvas.html blend-canvas-ref.html
pref(layout.css.mix-blend-mode.enabled,true) == blend-constant-background-color.html blend-constant-background-color-ref.html
pref(layout.css.mix-blend-mode.enabled,true) == blend-gradient-background-color.html blend-gradient-background-color-ref.html
pref(layout.css.mix-blend-mode.enabled,true) == blend-image.html blend-image-ref.html
pref(layout.css.mix-blend-mode.enabled,true) == blend-difference-stacking.html blend-difference-stacking-ref.html

Просмотреть файл

@ -51,9 +51,6 @@ include canvas/reftest.list
# css animations
include css-animations/reftest.list
# blending/
skip-if(Android&&AndroidVersion<15) include css-blending/reftest.list
# css calc() tests
include css-calc/reftest.list

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: color-burn;"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 754 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,255,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(253,253,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: color-dodge"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 754 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,105,105,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(93,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,52,52,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,131,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,48,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,192,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(55,55,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(137,137,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(95,95,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(86,86,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(164,164,37,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(31,31,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: color"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 748 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: darken"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 749 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(128,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,128,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(128,127,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(127,128,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,28 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#b {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#c {
z-index: 1;
position: absolute;
top:100px;
}
</style>
<div id="b">
<svg width="100" height="100" viewBox="0 0 100 100" >
<rect style="fill:#000000;" width="100" height="100"/>
</svg>
<div id="c">
<svg width="100" height="100" viewBox="0 0 100 100" >
<rect style="fill:#00FF00;" width="100" height="100"/>
</svg>
</div>
</div>
</html>

Просмотреть файл

@ -1,28 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<style>
#b {
width: 200px;
height: 200px;
background-color: rgb(0,255,0);
}
#c {
z-index: 1;
position: absolute;
top:100px;
}
</style>
<div id="b">
<svg width="100" height="100" viewBox="0 0 100 100" >
<rect style="fill:#00FF00;mix-blend-mode:difference;" width="100" height="100"/>
</svg>
<div id="c">
<svg width="100" height="100" viewBox="0 0 100 100" >
<rect style="fill:#00FF00;mix-blend-mode:difference;" width="100" height="100"/>
</svg>
</div>
</div>
</html>

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: difference"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 753 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(128,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,128,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(128,127,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(127,128,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: exclusion"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 752 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(254,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,254,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: hard-light"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 753 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,105,105,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(93,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(202,75,75,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,131,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,48,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(38,165,38,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(55,55,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(137,137,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(99,99,226,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(87,87,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(169,169,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(31,31,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: hue"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 746 B

Просмотреть файл

@ -1,7 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 301 B

Просмотреть файл

@ -1,10 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
<g style="mix-blend-mode: multiply">
<rect x="40" y="40" width="80" height="80" fill="rgb(0,255,0)" style="mix-blend-mode: difference"/>
</g>
</svg>

До

Ширина:  |  Высота:  |  Размер: 451 B

Просмотреть файл

@ -1,7 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 302 B

Просмотреть файл

@ -1,15 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<filter id="f1" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="15" />
</filter>
</defs>
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
<g filter="url(#f1)">
<rect x="40" y="40" width="80" height="80" fill="rgb(0,255,0)" style="mix-blend-mode: difference"/>
</g>
</svg>

До

Ширина:  |  Высота:  |  Размер: 546 B

Просмотреть файл

@ -1,7 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 301 B

Просмотреть файл

@ -1,15 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<mask id="msk">
<rect x="10" y="10" width="20" height="20" />
</mask>
</defs>
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
<g mask="url(#msk)">
<rect x="40" y="40" width="80" height="80" fill="rgb(0,255,0)" style="mix-blend-mode: difference"/>
</g>
</svg>

До

Ширина:  |  Высота:  |  Размер: 520 B

Просмотреть файл

@ -1,7 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 299 B

Просмотреть файл

@ -1,10 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<rect x="0" y="0" width="160" height="160" fill="rgb(0,255,0)"/>
<g opacity=".5">
<rect x="40" y="40" width="80" height="80" fill="rgb(0,255,0)" style="mix-blend-mode: difference"/>
</g>
</svg>

До

Ширина:  |  Высота:  |  Размер: 432 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,255,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,127,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(127,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: lighten"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 750 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,131,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(55,55,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(86,86,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,105,105,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(137,137,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(164,164,37,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(93,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,48,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(31,31,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,52,52,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,192,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(95,95,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: luminosity"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 753 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,127,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(127,63,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,127,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(64,127,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(63,63,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(191,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,191,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,127,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(95,95,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="opacity: .5; mix-blend-mode: multiply"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 764 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(127,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,127,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(63,63,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: multiply"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 751 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: normal"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 750 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(254,0,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(0,254,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(0,0,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(126,126,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: overlay"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 751 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(166,39,39,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(76,203,76,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(14,14,141,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(127,127,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: saturation"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 754 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(255,127,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,255,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(127,255,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,255,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,255,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,127,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(127,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(127,127,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(190,190,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.4 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: screen"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 750 B

Просмотреть файл

@ -1,22 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400">
<rect x="0" y="0" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="0" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="0" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="0" width="40" height="40" fill="rgba(190,63,0,1)"></rect>
<rect x="0" y="40" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="40" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="40" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="40" width="40" height="40" fill="rgba(64,190,0,1)"></rect>
<rect x="0" y="80" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="80" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="80" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="80" width="40" height="40" fill="rgba(63,63,0,1)"></rect>
<rect x="0" y="120" width="40" height="40" fill="rgba(255,0,0,1)"></rect>
<rect x="40" y="120" width="40" height="40" fill="rgba(0,255,0,1)"></rect>
<rect x="80" y="120" width="40" height="40" fill="rgba(0,0,255,1)"></rect>
<rect x="120" y="120" width="40" height="40" fill="rgba(126,126,0,1)"></rect>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.5 KiB

Просмотреть файл

@ -1,16 +0,0 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" >
<defs>
<g id="patch">
<rect x="0" y="0" width="40" height="160" fill="rgb(255,0,0)"/>
<rect x="40" y="0" width="40" height="160" fill="rgb(0,255,0)"/>
<rect x="80" y="0" width="40" height="160" fill="rgb(0,0,255)"/>
<rect x="120" y="0" width="40" height="160" fill="rgb(127,127,0)"/>
</g>
</defs>
<use xlink:href="#patch" x="0" y="0" width="160" height="160"></use>
<use xlink:href="#patch" x="0" y="0" width="160" height="160" transform="rotate(90 80 80)" style="mix-blend-mode: soft-light"></use>
</svg>

До

Ширина:  |  Высота:  |  Размер: 754 B

Просмотреть файл

@ -367,26 +367,3 @@ skip-if(B2G) == tspan-xy-anchor-end-01.svg tspan-xy-anchor-end-ref.svg # bug 773
== svg-effects-area-zoomed-out.xhtml svg-effects-area-zoomed-out-ref.xhtml
== href-attr-change-restyles.svg href-attr-change-restyles-ref.svg
== mask-img.html mask-img-ref.html
skip-if(d2d||(Android&&AndroidVersion<15)) pref(layout.css.mix-blend-mode.enabled,true) == blend-color-burn.svg blend-color-burn-ref.svg
skip-if(d2d||(Android&&AndroidVersion<15)) pref(layout.css.mix-blend-mode.enabled,true) == blend-color-dodge.svg blend-color-dodge-ref.svg
# pref(layout.css.mix-blend-mode.enabled,true) == blend-color.svg blend-color-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-darken.svg blend-darken-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-difference.svg blend-difference-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-exclusion.svg blend-exclusion-ref.svg
# pref(layout.css.mix-blend-mode.enabled,true) == blend-hard-light.svg blend-hard-light-ref.svg
# pref(layout.css.mix-blend-mode.enabled,true) == blend-hue.svg blend-hue-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-blend.svg blend-layer-blend-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-filter.svg blend-layer-filter-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-mask.svg blend-layer-mask-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-opacity.svg blend-layer-opacity-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-lighten.svg blend-lighten-ref.svg
# pref(layout.css.mix-blend-mode.enabled,true) == blend-luminosity.svg blend-luminosity-ref.svg
#skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-multiply-alpha.svg blend-multiply-alpha-ref.svg
skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-multiply.svg blend-multiply-ref.svg
pref(layout.css.mix-blend-mode.enabled,true) == blend-normal.svg blend-normal-ref.svg
#skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-overlay.svg blend-overlay-ref.svg
#skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-saturation.svg blend-saturation-ref.svg
#skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-screen.svg blend-screen-ref.svg
# skip-if(Android&&AndroidVersion<15) pref(layout.css.mix-blend-mode.enabled,true) == blend-soft-light.svg blend-soft-light-ref.svg
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-difference-stacking.html blend-difference-stacking-ref.html

Просмотреть файл

@ -342,7 +342,7 @@ nsSVGImageFrame::PaintSVG(nsRenderingContext *aContext,
opacity = StyleDisplay()->mOpacity;
}
if (opacity != 1.0f || StyleDisplay()->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
if (opacity != 1.0f) {
ctx->PushGroup(gfxASurface::CONTENT_COLOR_ALPHA);
}
@ -396,7 +396,7 @@ nsSVGImageFrame::PaintSVG(nsRenderingContext *aContext,
drawFlags);
}
if (opacity != 1.0f || StyleDisplay()->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
if (opacity != 1.0f) {
ctx->PopGroupToSource();
ctx->SetOperator(gfxContext::OPERATOR_OVER);
ctx->Paint(opacity);

Просмотреть файл

@ -494,8 +494,7 @@ nsSVGIntegrationUtils::PaintFramesWithEffects(nsRenderingContext* aCtx,
bool complexEffects = false;
/* Check if we need to do additional operations on this child's
* rendering, which necessitates rendering into another surface. */
if (opacity != 1.0f || maskFrame || (clipPathFrame && !isTrivialClip)
|| aFrame->StyleDisplay()->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
if (opacity != 1.0f || maskFrame || (clipPathFrame && !isTrivialClip)) {
complexEffects = true;
gfx->Save();
aCtx->IntersectClip(aFrame->GetVisualOverflowRectRelativeToSelf() +

Просмотреть файл

@ -846,8 +846,7 @@ nsSVGUtils::PaintFrameWithEffects(nsRenderingContext *aContext,
/* Check if we need to do additional operations on this child's
* rendering, which necessitates rendering into another surface. */
if (opacity != 1.0f || maskFrame || (clipPathFrame && !isTrivialClip)
|| aFrame->StyleDisplay()->mMixBlendMode != NS_STYLE_BLEND_NORMAL) {
if (opacity != 1.0f || maskFrame || (clipPathFrame && !isTrivialClip)) {
complexEffects = true;
gfx->Save();
if (!(aFrame->GetStateBits() & NS_FRAME_IS_NONDISPLAY)) {