WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Type in non-compositing code
patch (text/plain), 26.41 KB, created by
Rik Cabanier
on 2012-10-09 09:37:37 PDT
(
hide
)
Description:
Type in non-compositing code
Filename:
MIME Type:
Creator:
Rik Cabanier
Created:
2012-10-09 09:37:37 PDT
Size:
26.41 KB
patch
obsolete
>Index: Source/WebCore/platform/graphics/GraphicsContext.cpp >=================================================================== >--- Source/WebCore/platform/graphics/GraphicsContext.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/GraphicsContext.cpp (working copy) >@@ -530,27 +530,29 @@ void GraphicsContext::drawTiledImage(Ima > image->drawTiled(this, dest, srcRect, tileScaleFactor, hRule, vRule, styleColorSpace, op); > } > >-void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntPoint& p, CompositeOperator op) >+void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntPoint& p, CompositeOperator op, BlendMode blendMode) > { >- drawImageBuffer(image, styleColorSpace, p, IntRect(0, 0, -1, -1), op); >+ drawImageBuffer(image, styleColorSpace, p, IntRect(0, 0, -1, -1), op, blendMode); > } > >-void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntRect& r, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntRect& r, CompositeOperator op, bool useLowQualityScale, >+ BlendMode blendMode) > { >- drawImageBuffer(image, styleColorSpace, r, IntRect(0, 0, -1, -1), op, useLowQualityScale); >+ drawImageBuffer(image, styleColorSpace, r, IntRect(0, 0, -1, -1), op, useLowQualityScale, blendMode); > } > >-void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntPoint& dest, const IntRect& srcRect, CompositeOperator op) >+void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntPoint& dest, const IntRect& srcRect, CompositeOperator op, >+ BlendMode blendMode) > { >- drawImageBuffer(image, styleColorSpace, IntRect(dest, srcRect.size()), srcRect, op); >+ drawImageBuffer(image, styleColorSpace, IntRect(dest, srcRect.size()), srcRect, op, blendMode); > } > >-void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntRect& dest, const IntRect& srcRect, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const IntRect& dest, const IntRect& srcRect, CompositeOperator op, bool useLowQualityScale, BlendMode blendMode) > { >- drawImageBuffer(image, styleColorSpace, FloatRect(dest), srcRect, op, useLowQualityScale); >+ drawImageBuffer(image, styleColorSpace, FloatRect(dest), srcRect, op, useLowQualityScale, blendMode); > } > >-void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const FloatRect& dest, const FloatRect& src, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImageBuffer(ImageBuffer* image, ColorSpace styleColorSpace, const FloatRect& dest, const FloatRect& src, CompositeOperator op, bool useLowQualityScale, BlendMode blendMode) > { > if (paintingDisabled() || !image) > return; >@@ -578,10 +580,19 @@ void GraphicsContext::drawImageBuffer(Im > // FIXME (49002): Should be InterpolationLow > setImageInterpolationQuality(InterpolationNone); > #endif >+#if ENABLE(CSS_COMPOSITING) >+ image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale, blendMode); >+#else > image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale); >+ UNUSED_PARAM(blendMode); >+#endif > setImageInterpolationQuality(previousInterpolationQuality); > } else >+#if ENABLE(CSS_COMPOSITING) >+ image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale, blendMode); >+#else > image->draw(this, styleColorSpace, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), op, useLowQualityScale); >+#endif > } > > #if !PLATFORM(QT) >@@ -690,7 +701,7 @@ void GraphicsContext::fillRectWithRounde > } > #endif > >-void GraphicsContext::setCompositeOperation(CompositeOperator compositeOperation) >+void GraphicsContext::setCompositeOperation(CompositeOperator compositeOperation ) > { > m_state.compositeOperator = compositeOperation; > setPlatformCompositeOperation(compositeOperation); >Index: Source/WebCore/platform/graphics/GraphicsContext.h >=================================================================== >--- Source/WebCore/platform/graphics/GraphicsContext.h (revision 130730) >+++ Source/WebCore/platform/graphics/GraphicsContext.h (working copy) >@@ -260,7 +260,11 @@ namespace WebCore { > void applyFillPattern(); > void drawPath(const Path&); > >+#if ENABLE(CSS_COMPOSITING) >+ void drawNativeImage(NativeImagePtr, const FloatSize& selfSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator = CompositeSourceOver, ImageOrientation = DefaultImageOrientation, BlendMode = BlendModeNormal); >+#else > void drawNativeImage(NativeImagePtr, const FloatSize& selfSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator = CompositeSourceOver, ImageOrientation = DefaultImageOrientation); >+#endif > > // Allow font smoothing (LCD antialiasing). Not part of the graphics state. > void setAllowsFontSmoothing(bool); >@@ -317,12 +321,11 @@ namespace WebCore { > const FloatSize& tileScaleFactor, Image::TileRule hRule = Image::StretchTile, Image::TileRule vRule = Image::StretchTile, > CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); > >- void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntPoint&, CompositeOperator = CompositeSourceOver); >- void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntRect&, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >- void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntPoint& destPoint, const IntRect& srcRect, CompositeOperator = CompositeSourceOver); >- void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntRect& destRect, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >- void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1), >- CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >+ void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntPoint&, CompositeOperator = CompositeSourceOver, BlendMode = BlendModeNormal); >+ void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntRect&, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false, BlendMode = BlendModeNormal); >+ void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntPoint& destPoint, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, BlendMode = BlendModeNormal); >+ void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const IntRect& destRect, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false, BlendMode = BlendModeNormal); >+ void drawImageBuffer(ImageBuffer*, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1), CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false, BlendMode = BlendModeNormal); > > void setImageInterpolationQuality(InterpolationQuality); > InterpolationQuality imageInterpolationQuality() const; >@@ -545,7 +548,11 @@ namespace WebCore { > void setPlatformShadow(const FloatSize&, float blur, const Color&, ColorSpace); > void clearPlatformShadow(); > >+#if ENABLE(CSS_COMPOSITING) >+ void setPlatformCompositeOperation(CompositeOperator, BlendMode = BlendModeNormal); >+#else > void setPlatformCompositeOperation(CompositeOperator); >+#endif > > void beginPlatformTransparencyLayer(float opacity); > void endPlatformTransparencyLayer(); >Index: Source/WebCore/platform/graphics/GraphicsLayer.cpp >=================================================================== >--- Source/WebCore/platform/graphics/GraphicsLayer.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/GraphicsLayer.cpp (working copy) >@@ -69,6 +69,9 @@ GraphicsLayer::GraphicsLayer(GraphicsLay > , m_anchorPoint(0.5f, 0.5f, 0) > , m_opacity(1) > , m_zPosition(0) >+#if ENABLE(CSS_COMPOSITING) >+ , m_blendMode(BlendModeNormal) >+#endif > , m_backgroundColorSet(false) > , m_contentsOpaque(false) > , m_preserves3D(false) >Index: Source/WebCore/platform/graphics/GraphicsLayer.h >=================================================================== >--- Source/WebCore/platform/graphics/GraphicsLayer.h (revision 130730) >+++ Source/WebCore/platform/graphics/GraphicsLayer.h (working copy) >@@ -33,6 +33,9 @@ > #if ENABLE(CSS_FILTERS) > #include "FilterOperations.h" > #endif >+#if ENABLE(CSS_COMPOSITING) >+#include "GraphicsTypes.h" >+#endif > #include "FloatPoint.h" > #include "FloatPoint3D.h" > #include "FloatSize.h" >@@ -303,6 +306,12 @@ public: > virtual bool setFilters(const FilterOperations& filters) { m_filters = filters; return true; } > #endif > >+#if ENABLE(CSS_COMPOSITING) >+ BlendMode blendMode() const { return m_blendMode; } >+ >+ virtual void setBlendMode(BlendMode blendMode) { m_blendMode = blendMode; } >+#endif >+ > // Some GraphicsLayers paint only the foreground or the background content > GraphicsLayerPaintingPhase paintingPhase() const { return m_paintingPhase; } > void setPaintingPhase(GraphicsLayerPaintingPhase phase) { m_paintingPhase = phase; } >@@ -461,6 +470,10 @@ protected: > FilterOperations m_filters; > #endif > >+#if ENABLE(CSS_COMPOSITING) >+ BlendMode m_blendMode; >+#endif >+ > bool m_backgroundColorSet : 1; > bool m_contentsOpaque : 1; > bool m_preserves3D: 1; >Index: Source/WebCore/platform/graphics/ImageBuffer.h >=================================================================== >--- Source/WebCore/platform/graphics/ImageBuffer.h (revision 130730) >+++ Source/WebCore/platform/graphics/ImageBuffer.h (working copy) >@@ -127,7 +127,11 @@ namespace WebCore { > #endif > void clip(GraphicsContext*, const FloatRect&) const; > >+#if ENABLE(CSS_COMPOSITING) >+ void draw(GraphicsContext*, ColorSpace, const FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1), CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false, BlendMode = BlendModeNormal); >+#else > void draw(GraphicsContext*, ColorSpace, const FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1), CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >+#endif > void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& destRect); > > inline void genericConvertToLuminanceMask(); >Index: Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp >=================================================================== >--- Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp (working copy) >@@ -265,7 +265,11 @@ void GraphicsContext::restorePlatformSta > m_data->m_userToDeviceTransformKnownToBeIdentity = false; > } > >+#if ENABLE(CSS_COMPOSITING) >+void GraphicsContext::drawNativeImage(NativeImagePtr imagePtr, const FloatSize& imageSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op, ImageOrientation orientation, BlendMode blendMode) >+#else > void GraphicsContext::drawNativeImage(NativeImagePtr imagePtr, const FloatSize& imageSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op, ImageOrientation orientation) >+#endif > { > RetainPtr<CGImageRef> image(imagePtr); > >@@ -324,7 +328,11 @@ void GraphicsContext::drawNativeImage(Na > if (!shouldUseSubimage && currHeight < imageSize.height()) > adjustedDestRect.setHeight(adjustedDestRect.height() * currHeight / imageSize.height()); > >+#if ENABLE(CSS_COMPOSITING) >+ setPlatformCompositeOperation(op, blendMode); >+#else > setPlatformCompositeOperation(op); >+#endif > > // Flip the coords. > CGContextTranslateCTM(context, adjustedDestRect.x(), adjustedDestRect.maxY()); >@@ -1110,7 +1118,7 @@ void GraphicsContext::beginPlatformTrans > save(); > > CGContextRef context = platformContext(); >- CGContextSetAlpha(context, opacity); >+ CGContextSetAlpha(context, opacity); > CGContextBeginTransparencyLayer(context, 0); > m_data->m_userToDeviceTransformKnownToBeIdentity = false; > } >@@ -1686,12 +1694,67 @@ void GraphicsContext::setPlatformShouldS > CGContextSetShouldSmoothFonts(platformContext(), enable); > } > >+#if ENABLE(CSS_COMPOSITING) >+void GraphicsContext::setPlatformCompositeOperation(CompositeOperator mode, BlendMode blendMode) >+#else > void GraphicsContext::setPlatformCompositeOperation(CompositeOperator mode) >+#endif > { > if (paintingDisabled()) > return; > > CGBlendMode target = kCGBlendModeNormal; >+#if ENABLE(CSS_COMPOSITING) >+ if (blendMode != BlendModeNormal) >+ switch (blendMode) { >+ case BlendModeMultiply: >+ target = kCGBlendModeMultiply; >+ break; >+ case BlendModeScreen: >+ target = kCGBlendModeScreen; >+ break; >+ case BlendModeOverlay: >+ target = kCGBlendModeOverlay; >+ break; >+ case BlendModeDarken: >+ target = kCGBlendModeDarken; >+ break; >+ case BlendModeLighten: >+ target = kCGBlendModeLighten; >+ break; >+ case BlendModeColorDodge: >+ target = kCGBlendModeColorDodge; >+ break; >+ case BlendModeColorBurn: >+ target = kCGBlendModeColorBurn; >+ break; >+ case BlendModeHardLight: >+ target = kCGBlendModeHardLight; >+ break; >+ case BlendModeSoftLight: >+ target = kCGBlendModeSoftLight; >+ break; >+ case BlendModeDifference: >+ target = kCGBlendModeDifference; >+ break; >+ case BlendModeExclusion: >+ target = kCGBlendModeExclusion; >+ break; >+ case BlendModeHue: >+ target = kCGBlendModeHue; >+ break; >+ case BlendModeSaturation: >+ target = kCGBlendModeSaturation; >+ break; >+ case BlendModeColor: >+ target = kCGBlendModeColor; >+ break; >+ case BlendModeLuminosity: >+ target = kCGBlendModeLuminosity; >+ default: >+ break; >+ } else >+#endif > switch (mode) { > case CompositeClear: > target = kCGBlendModeClear; >Index: Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp >=================================================================== >--- Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp (working copy) >@@ -259,7 +259,11 @@ NativeImagePtr ImageBuffer::copyNativeIm > return image; > } > >+#if ENABLE(CSS_COMPOSITING) >+void ImageBuffer::draw(GraphicsContext* destContext, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op, bool useLowQualityScale, BlendMode blendMode) >+#else > void ImageBuffer::draw(GraphicsContext* destContext, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op, bool useLowQualityScale) >+#endif > { > UNUSED_PARAM(useLowQualityScale); > ColorSpace colorSpace = (destContext == m_context) ? ColorSpaceDeviceRGB : styleColorSpace; >@@ -272,7 +276,11 @@ void ImageBuffer::draw(GraphicsContext* > > FloatRect adjustedSrcRect = srcRect; > adjustedSrcRect.scale(m_resolutionScale, m_resolutionScale); >- destContext->drawNativeImage(image.get(), internalSize(), colorSpace, destRect, adjustedSrcRect, op); >+#if ENABLE(CSS_COMPOSITING) >+ destContext->drawNativeImage(image.get(), internalSize(), colorSpace, destRect, adjustedSrcRect, op, DefaultImageOrientation, blendMode); >+#else >+ destContext->drawNativeImage(image.get(), internalSize(), colorSpace, destRect, adjustedSrcRect, op, DefaultImageOrientation); >+#endif > } > > void ImageBuffer::drawPattern(GraphicsContext* destContext, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect) >Index: Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp >=================================================================== >--- Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp (working copy) >@@ -1229,7 +1229,7 @@ void GraphicsContext::setAlpha(float opa > p->setOpacity(opacity); > } > >-void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op) >+void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op, BlendMode) > { > if (paintingDisabled()) > return; >Index: Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp >=================================================================== >--- Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp (revision 130730) >+++ Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp (working copy) >@@ -126,7 +126,7 @@ PassRefPtr<Image> ImageBuffer::copyImage > } > > void ImageBuffer::draw(GraphicsContext* destContext, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, >- CompositeOperator op, bool useLowQualityScale) >+ CompositeOperator op, bool useLowQualityScale, BlendMode) > { > if (destContext == context()) { > // We're drawing into our own buffer. In order for this to work, we need to copy the source buffer first. >Index: Source/WebCore/rendering/FilterEffectRenderer.cpp >=================================================================== >--- Source/WebCore/rendering/FilterEffectRenderer.cpp (revision 130730) >+++ Source/WebCore/rendering/FilterEffectRenderer.cpp (working copy) >@@ -445,6 +445,35 @@ LayoutRect FilterEffectRenderer::compute > return rectForRepaint; > } > >+void FilterEffectRenderer::createPassthroughFilter() >+{ >+#if ENABLE(CSS_SHADERS) >+ m_hasCustomShaderFilter = false; >+#endif >+ >+ RefPtr<FilterEffect> previousEffect = m_sourceGraphic; >+ >+ ComponentTransferFunction nullFunction; >+ ComponentTransferFunction transferFunction; >+ transferFunction.type = FECOMPONENTTRANSFER_TYPE_TABLE; >+ Vector<float> transferParameters; >+ transferParameters.append(0); >+ transferParameters.append(1.0f); >+ transferFunction.tableValues = transferParameters; >+ >+ RefPtr<FilterEffect> effect = FEComponentTransfer::create(this, nullFunction, nullFunction, nullFunction, transferFunction); >+ effect->setClipsToBounds(false); >+ effect->setColorSpace(ColorSpaceDeviceRGB); >+ effect->inputEffects().append(previousEffect); >+ >+ m_effects.clear(); >+ m_effects.append(effect); >+ >+ previousEffect = effect.release(); >+ >+ setMaxEffectRects(m_sourceDrawingRegion); >+} >+ > bool FilterEffectRendererHelper::prepareFilterEffect(RenderLayer* renderLayer, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect, const LayoutRect& layerRepaintRect) > { > ASSERT(m_haveFilterEffect && renderLayer->filterRenderer()); >@@ -509,8 +538,12 @@ GraphicsContext* FilterEffectRendererHel > // Get the filtered output and draw it in place. > LayoutRect destRect = filter->outputRect(); > destRect.move(m_paintOffset.x(), m_paintOffset.y()); >- >+ >+#if ENABLE(CSS_COMPOSITING) >+ m_savedGraphicsContext->drawImageBuffer(filter->output(), m_renderLayer->renderer()->style()->colorSpace(), pixelSnappedIntRect(destRect), CompositeSourceOver, false, m_renderLayer->blendMode()); >+#else > m_savedGraphicsContext->drawImageBuffer(filter->output(), m_renderLayer->renderer()->style()->colorSpace(), pixelSnappedIntRect(destRect), CompositeSourceOver); >+#endif > > filter->clearIntermediateResults(); > >Index: Source/WebCore/rendering/FilterEffectRenderer.h >=================================================================== >--- Source/WebCore/rendering/FilterEffectRenderer.h (revision 130730) >+++ Source/WebCore/rendering/FilterEffectRenderer.h (working copy) >@@ -107,7 +107,7 @@ public: > void allocateBackingStoreIfNeeded(); > void clearIntermediateResults(); > void apply(); >- >+ > IntRect outputRect() const { return lastEffect()->hasResult() ? lastEffect()->requestedRegionOfInputImageData(IntRect(m_filterRegion)) : IntRect(); } > > bool hasFilterThatMovesPixels() const { return m_hasFilterThatMovesPixels; } >@@ -116,6 +116,8 @@ public: > #if ENABLE(CSS_SHADERS) > bool hasCustomShaderFilter() const { return m_hasCustomShaderFilter; } > #endif >+ >+ void createPassthroughFilter(); > private: > void setMaxEffectRects(const FloatRect& effectRect) > { >Index: Source/WebCore/rendering/RenderLayer.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayer.cpp (revision 130730) >+++ Source/WebCore/rendering/RenderLayer.cpp (working copy) >@@ -52,6 +52,7 @@ > #include "EventHandler.h" > #if ENABLE(CSS_FILTERS) > #include "FEColorMatrix.h" >+#include "FEComponentTransfer.h" > #include "FEMerge.h" > #include "FilterEffectRenderer.h" > #endif >@@ -282,7 +283,7 @@ bool RenderLayer::canRender3DTransforms( > bool RenderLayer::paintsWithFilters() const > { > // FIXME: Eventually there will be more factors than isComposited() to decide whether or not to render the filter >- if (!renderer()->hasFilter()) >+ if (!renderer()->hasFilter() && !renderer()->hasBlendMode()) > return false; > > #if USE(ACCELERATED_COMPOSITING) >@@ -1189,7 +1190,7 @@ bool RenderLayer::isTransparent() const > if (renderer()->node() && renderer()->node()->namespaceURI() == SVGNames::svgNamespaceURI) > return false; > #endif >- return renderer()->isTransparent() || renderer()->hasMask(); >+ return renderer()->isTransparent() || renderer()->hasMask() || renderer()->hasBlendMode(); > } > > RenderLayer* RenderLayer::transparentPaintingAncestor() >@@ -3165,9 +3166,9 @@ void RenderLayer::paintLayerContents(Ren > } > #endif > } >- >+ > #if ENABLE(CSS_FILTERS) >- FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilters()); >+ FilterEffectRendererHelper filterPainter(filterRenderer() && (paintsWithFilters() || hasBlendMode())); > if (filterPainter.haveFilterEffect() && !context->paintingDisabled()) { > LayoutPoint rootLayerOffset; > convertToLayerCoords(rootLayer, rootLayerOffset); >@@ -5054,7 +5055,7 @@ void RenderLayer::updateReflectionStyle( > #if ENABLE(CSS_FILTERS) > void RenderLayer::updateOrRemoveFilterEffect() > { >- if (!hasFilter()) { >+ if (!hasFilter() && !hasBlendMode()) { > removeFilterInfoIfNeeded(); > return; > } >@@ -5073,7 +5074,7 @@ void RenderLayer::updateOrRemoveFilterEf > filterInfo()->removeReferenceFilterClients(); > #endif > >- if (!paintsWithFilters()) { >+ if (!paintsWithFilters() && !hasBlendMode()) { > // Don't delete the whole filter info here, because we might use it > // for loading CSS shader files. > if (RenderLayerFilterInfo* filterInfo = this->filterInfo()) >@@ -5091,8 +5092,11 @@ void RenderLayer::updateOrRemoveFilterEf > > // If the filter fails to build, remove it from the layer. It will still attempt to > // go through regular processing (e.g. compositing), but never apply anything. >- if (!filterInfo->renderer()->build(renderer()->document(), renderer()->style()->filter())) >+ if (!filterInfo->renderer()->build(renderer()->document(), renderer()->style()->filter())&& !hasBlendMode()) > filterInfo->setRenderer(0); >+ >+ if (hasBlendMode() && !hasFilter()) >+ filterInfo->renderer()->createPassthroughFilter(); > } > > void RenderLayer::filterNeedsRepaint() >Index: Source/WebCore/rendering/RenderLayer.h >=================================================================== >--- Source/WebCore/rendering/RenderLayer.h (revision 130730) >+++ Source/WebCore/rendering/RenderLayer.h (working copy) >@@ -614,7 +614,8 @@ public: > #endif > > #if ENABLE(CSS_COMPOSITING) >- bool hasBlendMode() const { return renderer()->hasBlendMode(); } >+ bool hasBlendMode() const { return m_blendMode != BlendModeNormal; } >+ BlendMode blendMode() const { return m_blendMode; } > #else > bool hasBlendMode() const { return false; } > #endif >Index: Source/WebCore/rendering/RenderLayerBacking.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayerBacking.cpp (revision 130730) >+++ Source/WebCore/rendering/RenderLayerBacking.cpp (working copy) >@@ -254,8 +254,9 @@ void RenderLayerBacking::updateFilters(c > #endif > > #if ENABLE(CSS_COMPOSITING) >-void RenderLayerBacking::updateLayerBlendMode(const RenderStyle*) >+void RenderLayerBacking::updateLayerBlendMode(const RenderStyle* style) > { >+ m_graphicsLayer->setBlendMode(style->blendMode()); > } > #endif > >Index: Source/WebCore/rendering/RenderObject.h >=================================================================== >--- Source/WebCore/rendering/RenderObject.h (revision 130730) >+++ Source/WebCore/rendering/RenderObject.h (working copy) >@@ -817,6 +817,11 @@ public: > > bool isTransparent() const { return style()->opacity() < 1.0f; } > float opacity() const { return style()->opacity(); } >+#if ENABLE(CSS_COMPOSITING) >+ BlendMode blendMode() const { return style()->blendMode(); } >+#else >+ BlendMode blendMode() const { return BlendModeNormal; } >+#endif > > bool hasReflection() const { return m_bitfields.hasReflection(); } > >Index: Source/WebKit2/Configurations/FeatureDefines.xcconfig >=================================================================== >--- Source/WebKit2/Configurations/FeatureDefines.xcconfig (revision 130730) >+++ Source/WebKit2/Configurations/FeatureDefines.xcconfig (working copy) >@@ -38,7 +38,7 @@ ENABLE_BLOB = ENABLE_BLOB; > ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING; > ENABLE_CSP_NEXT = ; > ENABLE_CSS_BOX_DECORATION_BREAK = ENABLE_CSS_BOX_DECORATION_BREAK; >-ENABLE_CSS_COMPOSITING = CSS_COMPOSITING; >+ENABLE_CSS_COMPOSITING = ENABLE_CSS_COMPOSITING; > ENABLE_CSS_EXCLUSIONS = ENABLE_CSS_EXCLUSIONS; > ENABLE_CSS_FILTERS = ENABLE_CSS_FILTERS; > ENABLE_CSS_HIERARCHIES = ;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 98450
:
167593
|
167602
|
167622
|
167705
|
167709
|
167710
|
167712
|
167774
|
167794
|
167848
|
167862