15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 2000 Antti Koivisto (koivisto@kde.org)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 2000 Dirk Mueller (mueller@kde.org)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef TransformOperation_h
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define TransformOperation_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatSize.h"
291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/transforms/TransformationMatrix.h"
307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "wtf/PassRefPtr.h"
317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "wtf/RefCounted.h"
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// CSS Transforms (may become part of CSS3)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)class PLATFORM_EXPORT TransformOperation : public RefCounted<TransformOperation> {
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum OperationType {
401fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        ScaleX, ScaleY, Scale,
411fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        TranslateX, TranslateY, Translate,
421fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        Rotate,
431fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        RotateZ = Rotate,
441fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        SkewX, SkewY, Skew,
451fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        Matrix,
461fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        ScaleZ, Scale3D,
471fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        TranslateZ, Translate3D,
481fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        RotateX, RotateY, Rotate3D,
491fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        Matrix3D,
501fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        Perspective,
513c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        Interpolated,
521fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        Identity, None
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~TransformOperation() { }
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool operator==(const TransformOperation&) const = 0;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool operator!=(const TransformOperation& o) const { return !(*this == o); }
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual void apply(TransformationMatrix&, const FloatSize& borderBoxSize) const = 0;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false) = 0;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual OperationType type() const = 0;
6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    bool isSameType(const TransformOperation& other) const { return other.type() == type(); }
6676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual bool canBlendWith(const TransformOperation& other) const = 0;
6702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool is3DOperation() const
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        OperationType opType = type();
711fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        return opType == ScaleZ
721fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == Scale3D
731fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == TranslateZ
741fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == Translate3D
751fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == RotateX
761fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == RotateY
771fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == Rotate3D
781fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch            || opType == Matrix3D
793c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            || opType == Perspective
803c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch            || opType == Interpolated;
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
8351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual bool dependsOnBoxSize() const { return false; }
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // TransformOperation_h
89