Reviewed by Dave Hyatt.
[WebKit-https.git] / WebCore / platform / graphics / transforms / ScaleTransformOperation.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6  * Copyright (C) 2006 Graham Dennis (graham.dennis@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 ScaleTransformOperation_h
26 #define ScaleTransformOperation_h
27
28 #include "TransformOperation.h"
29
30 namespace WebCore {
31
32 class ScaleTransformOperation : public TransformOperation {
33 public:
34     static PassRefPtr<ScaleTransformOperation> create(double sx, double sy, OperationType type)
35     {
36         return adoptRef(new ScaleTransformOperation(sx, sy, type));
37     }
38
39     virtual bool isIdentity() const { return m_x == 1 &&  m_y == 1; }
40     virtual OperationType getOperationType() const { return m_type; }
41     virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
42
43     virtual bool operator==(const TransformOperation& o) const
44     {
45         if (!isSameType(o))
46             return false;
47         const ScaleTransformOperation* s = static_cast<const ScaleTransformOperation*>(&o);
48         return m_x == s->m_x && m_y == s->m_y;
49     }
50
51     virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
52     {
53         transform.scale(m_x, m_y);
54         return false;
55     }
56
57     virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
58
59 private:
60     ScaleTransformOperation(double sx, double sy, OperationType type)
61         : m_x(sx)
62         , m_y(sy)
63         , m_type(type)
64     {
65     }
66         
67     double m_x;
68     double m_y;
69     OperationType m_type;
70 };
71
72 } // namespace WebCore
73
74 #endif // ScaleTransformOperation_h
75 /*
76  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
77  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
78  *           (C) 2000 Dirk Mueller (mueller@kde.org)
79  * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
80  * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
81  *
82  * This library is free software; you can redistribute it and/or
83  * modify it under the terms of the GNU Library General Public
84  * License as published by the Free Software Foundation; either
85  * version 2 of the License, or (at your option) any later version.
86  *
87  * This library is distributed in the hope that it will be useful,
88  * but WITHOUT ANY WARRANTY; without even the implied warranty of
89  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
90  * Library General Public License for more details.
91  *
92  * You should have received a copy of the GNU Library General Public License
93  * along with this library; see the file COPYING.LIB.  If not, write to
94  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
95  * Boston, MA 02110-1301, USA.
96  *
97  */
98
99 #ifndef ScaleTransformOperation_h
100 #define ScaleTransformOperation_h
101
102 #include "TransformOperation.h"
103
104 namespace WebCore {
105
106 class ScaleTransformOperation : public TransformOperation {
107 public:
108     static PassRefPtr<ScaleTransformOperation> create(double sx, double sy, OperationType type)
109     {
110         return adoptRef(new ScaleTransformOperation(sx, sy, type));
111     }
112
113     virtual bool isIdentity() const { return m_x == 1 &&  m_y == 1; }
114     virtual OperationType getOperationType() const { return m_type; }
115     virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
116
117     virtual bool operator==(const TransformOperation& o) const
118     {
119         if (!isSameType(o))
120             return false;
121         const ScaleTransformOperation* s = static_cast<const ScaleTransformOperation*>(&o);
122         return m_x == s->m_x && m_y == s->m_y;
123     }
124
125     virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
126     {
127         transform.scale(m_x, m_y);
128         return false;
129     }
130
131     virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
132
133 private:
134     ScaleTransformOperation(double sx, double sy, OperationType type)
135         : m_x(sx)
136         , m_y(sy)
137         , m_type(type)
138     {
139     }
140         
141     double m_x;
142     double m_y;
143     OperationType m_type;
144 };
145
146 } // namespace WebCore
147
148 #endif // ScaleTransformOperation_h