Home | History | Annotate | Download | only in transforms
      1 /*
      2  * Copyright (C) 2000 Lars Knoll (knoll (at) kde.org)
      3  *           (C) 2000 Antti Koivisto (koivisto (at) kde.org)
      4  *           (C) 2000 Dirk Mueller (mueller (at) kde.org)
      5  * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
      6  * Copyright (C) 2006 Graham Dennis (graham.dennis (at) gmail.com)
      7  *
      8  * This library is free software; you can redistribute it and/or
      9  * modify it under the terms of the GNU Library General Public
     10  * License as published by the Free Software Foundation; either
     11  * version 2 of the License, or (at your option) any later version.
     12  *
     13  * This library is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  * Library General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Library General Public License
     19  * along with this library; see the file COPYING.LIB.  If not, write to
     20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     21  * Boston, MA 02110-1301, USA.
     22  *
     23  */
     24 
     25 #ifndef TransformOperation_h
     26 #define TransformOperation_h
     27 
     28 #include "TransformationMatrix.h"
     29 #include "IntSize.h"
     30 #include <wtf/PassRefPtr.h>
     31 #include <wtf/RefCounted.h>
     32 
     33 namespace WebCore {
     34 
     35 // CSS Transforms (may become part of CSS3)
     36 
     37 class TransformOperation : public RefCounted<TransformOperation> {
     38 public:
     39     enum OperationType {
     40         SCALE_X, SCALE_Y, SCALE,
     41         TRANSLATE_X, TRANSLATE_Y, TRANSLATE,
     42         ROTATE,
     43         ROTATE_Z = ROTATE,
     44         SKEW_X, SKEW_Y, SKEW,
     45         MATRIX,
     46         SCALE_Z, SCALE_3D,
     47         TRANSLATE_Z, TRANSLATE_3D,
     48         ROTATE_X, ROTATE_Y, ROTATE_3D,
     49         MATRIX_3D,
     50         PERSPECTIVE,
     51         IDENTITY, NONE
     52     };
     53 
     54     virtual ~TransformOperation() { }
     55 
     56     virtual bool operator==(const TransformOperation&) const = 0;
     57     bool operator!=(const TransformOperation& o) const { return !(*this == o); }
     58 
     59     virtual bool isIdentity() const = 0;
     60 
     61     // Return true if the borderBoxSize was used in the computation, false otherwise.
     62     virtual bool apply(TransformationMatrix&, const IntSize& borderBoxSize) const = 0;
     63 
     64     virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false) = 0;
     65 
     66     virtual OperationType getOperationType() const = 0;
     67     virtual bool isSameType(const TransformOperation&) const { return false; }
     68 
     69     bool is3DOperation() const
     70     {
     71         OperationType opType = getOperationType();
     72         return opType == SCALE_Z ||
     73                opType == SCALE_3D ||
     74                opType == TRANSLATE_Z ||
     75                opType == TRANSLATE_3D ||
     76                opType == ROTATE_X ||
     77                opType == ROTATE_Y ||
     78                opType == ROTATE_3D ||
     79                opType == MATRIX_3D ||
     80                opType == PERSPECTIVE;
     81     }
     82 };
     83 
     84 } // namespace WebCore
     85 
     86 #endif // TransformOperation_h
     87