1 /* 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AS IS AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 #include "config.h" 31 32 #include "core/platform/graphics/filters/custom/CustomFilterOperation.h" 33 34 #include "core/platform/graphics/filters/FilterOperation.h" 35 #include "core/platform/graphics/filters/custom/CustomFilterParameter.h" 36 #include "core/platform/graphics/filters/custom/CustomFilterProgram.h" 37 38 namespace WebCore { 39 40 CustomFilterOperation::CustomFilterOperation(PassRefPtr<CustomFilterProgram> program, const CustomFilterParameterList& sortedParameters, unsigned meshRows, unsigned meshColumns, CustomFilterMeshType meshType) 41 : FilterOperation(CUSTOM) 42 , m_program(program) 43 , m_parameters(sortedParameters) 44 , m_meshRows(meshRows) 45 , m_meshColumns(meshColumns) 46 , m_meshType(meshType) 47 { 48 // Make sure that the parameters are alwyas sorted by name. We use that to merge two CustomFilterOperations in animations. 49 ASSERT(m_parameters.checkAlphabeticalOrder()); 50 } 51 52 CustomFilterOperation::~CustomFilterOperation() 53 { 54 } 55 56 PassRefPtr<FilterOperation> CustomFilterOperation::blend(const FilterOperation* from, double progress, bool blendToPassthrough) 57 { 58 // FIXME: There's no way to decide what is the "passthrough filter" for shaders using the current CSS Syntax. 59 // https://bugs.webkit.org/show_bug.cgi?id=84903 60 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=16861 61 if (blendToPassthrough || !from || !from->isSameType(*this)) 62 return this; 63 64 const CustomFilterOperation* fromOp = static_cast<const CustomFilterOperation*>(from); 65 if (m_program.get() != fromOp->m_program.get() 66 || m_meshRows != fromOp->m_meshRows 67 || m_meshColumns != fromOp->m_meshColumns 68 || m_meshType != fromOp->m_meshType) 69 return this; 70 71 CustomFilterParameterList animatedParameters; 72 m_parameters.blend(fromOp->m_parameters, progress, animatedParameters); 73 return CustomFilterOperation::create(m_program, animatedParameters, m_meshRows, m_meshColumns, m_meshType); 74 } 75 76 } // namespace WebCore 77 78