Home | History | Annotate | Download | only in transforms
      1 /*
      2  * Copyright (C) 1999 Antti Koivisto (koivisto (at) kde.org)
      3  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Library General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Library General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Library General Public License
     16  * along with this library; see the file COPYING.LIB.  If not, write to
     17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18  * Boston, MA 02110-1301, USA.
     19  *
     20  */
     21 
     22 #include "config.h"
     23 #include "MatrixTransformOperation.h"
     24 
     25 #include <algorithm>
     26 
     27 using namespace std;
     28 
     29 namespace WebCore {
     30 
     31 PassRefPtr<TransformOperation> MatrixTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
     32 {
     33     if (from && !from->isSameType(*this))
     34         return this;
     35 
     36     // convert the TransformOperations into matrices
     37     IntSize size;
     38     TransformationMatrix fromT;
     39     TransformationMatrix toT(m_a, m_b, m_c, m_d, m_e, m_f);
     40     if (from) {
     41         const MatrixTransformOperation* m = static_cast<const MatrixTransformOperation*>(from);
     42         fromT.setMatrix(m->m_a, m->m_b, m->m_c, m->m_d, m->m_e, m->m_f);
     43     }
     44 
     45     if (blendToIdentity)
     46         std::swap(fromT, toT);
     47 
     48     toT.blend(fromT, progress);
     49     return MatrixTransformOperation::create(toT.a(), toT.b(), toT.c(), toT.d(), toT.e(), toT.f());
     50 }
     51 
     52 } // namespace WebCore
     53