109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/* 209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * modification, are permitted provided that the following conditions 609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * are met: 709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "config.h" 2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/animation/AnimationTranslationUtil.h" 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/graphics/filters/FilterOperations.h" 3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/graphics/filters/SkiaImageFilterBuilder.h" 3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/InterpolatedTransformOperation.h" 3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/Matrix3DTransformOperation.h" 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/MatrixTransformOperation.h" 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/PerspectiveTransformOperation.h" 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/RotateTransformOperation.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/ScaleTransformOperation.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/SkewTransformOperation.h" 3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/TransformOperations.h" 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/TransformationMatrix.h" 4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/transforms/TranslateTransformOperation.h" 4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebTransformOperations.h" 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void toWebTransformOperations(const TransformOperations& transformOperations, WebTransformOperations* webTransformOperations) 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We need to do a deep copy the transformOperations may contain ref pointers to TransformOperation objects. 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t j = 0; j < transformOperations.size(); ++j) { 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) switch (transformOperations.operations()[j]->type()) { 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::ScaleX: 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::ScaleY: 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::ScaleZ: 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Scale3D: 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Scale: { 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ScaleTransformOperation* transform = static_cast<ScaleTransformOperation*>(transformOperations.operations()[j].get()); 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendScale(transform->x(), transform->y(), transform->z()); 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::TranslateX: 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::TranslateY: 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::TranslateZ: 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Translate3D: 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Translate: { 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TranslateTransformOperation* transform = static_cast<TranslateTransformOperation*>(transformOperations.operations()[j].get()); 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(transform->x().isFixed() && transform->y().isFixed()); 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendTranslate(transform->x().value(), transform->y().value(), transform->z()); 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::RotateX: 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::RotateY: 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Rotate3D: 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Rotate: { 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) RotateTransformOperation* transform = static_cast<RotateTransformOperation*>(transformOperations.operations()[j].get()); 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendRotate(transform->x(), transform->y(), transform->z(), transform->angle()); 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::SkewX: 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::SkewY: 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Skew: { 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SkewTransformOperation* transform = static_cast<SkewTransformOperation*>(transformOperations.operations()[j].get()); 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendSkew(transform->angleX(), transform->angleY()); 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Matrix: { 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) MatrixTransformOperation* transform = static_cast<MatrixTransformOperation*>(transformOperations.operations()[j].get()); 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TransformationMatrix m = transform->matrix(); 8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Matrix3D: { 9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Matrix3DTransformOperation* transform = static_cast<Matrix3DTransformOperation*>(transformOperations.operations()[j].get()); 9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TransformationMatrix m = transform->matrix(); 9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); 9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Perspective: { 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) PerspectiveTransformOperation* transform = static_cast<PerspectiveTransformOperation*>(transformOperations.operations()[j].get()); 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendPerspective(transform->perspective()); 9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Interpolated: { 10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) TransformationMatrix m; 10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) transformOperations.operations()[j]->apply(m, FloatSize()); 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::Identity: 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webTransformOperations->appendIdentity(); 10909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case TransformOperation::None: 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Do nothing. 11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } // switch 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } // for each operation 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 117197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid toWebFilterOperations(const FilterOperations& inOperations, WebFilterOperations* outOperations) 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) SkiaImageFilterBuilder builder; 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FilterOutsets outsets = inOperations.outsets(); 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) builder.setCropOffset(FloatSize(outsets.left(), outsets.top())); 122197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch builder.buildFilterOperations(inOperations, outOperations); 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 125c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 126