KHTML
AffineTransform.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "config.h"
00027 #include "wtf/Platform.h"
00028 #include "AffineTransform.h"
00029
00030 #include "FloatRect.h"
00031 #include "IntRect.h"
00032
00033 #include <wtf/MathExtras.h>
00034
00035 namespace WebCore {
00036
00037 bool AffineTransform::isInvertible() const
00038 {
00039 return det() != 0.0;
00040 }
00041
00042 AffineTransform& AffineTransform::multiply(const AffineTransform& other)
00043 {
00044 return (*this) *= other;
00045 }
00046
00047 AffineTransform& AffineTransform::scale(double s)
00048 {
00049 return scale(s, s);
00050 }
00051
00052 AffineTransform& AffineTransform::scaleNonUniform(double sx, double sy)
00053 {
00054 return scale(sx, sy);
00055 }
00056
00057 AffineTransform& AffineTransform::rotateFromVector(double x, double y)
00058 {
00059 return rotate(rad2deg(atan2(y, x)));
00060 }
00061
00062 AffineTransform& AffineTransform::flipX()
00063 {
00064 return scale(-1.0f, 1.0f);
00065 }
00066
00067 AffineTransform& AffineTransform::flipY()
00068 {
00069 return scale(1.0f, -1.0f);
00070 }
00071
00072 AffineTransform& AffineTransform::skew(double angleX, double angleY)
00073 {
00074 return shear(tan(deg2rad(angleX)), tan(deg2rad(angleY)));
00075 }
00076
00077 AffineTransform& AffineTransform::skewX(double angle)
00078 {
00079 return shear(tan(deg2rad(angle)), 0.0f);
00080 }
00081
00082 AffineTransform& AffineTransform::skewY(double angle)
00083 {
00084 return shear(0.0f, tan(deg2rad(angle)));
00085 }
00086
00087 IntPoint AffineTransform::mapPoint(const IntPoint& point) const
00088 {
00089 double x2, y2;
00090 map(point.x(), point.y(), &x2, &y2);
00091
00092
00093 return IntPoint(lround(x2), lround(y2));
00094 }
00095
00096 FloatPoint AffineTransform::mapPoint(const FloatPoint& point) const
00097 {
00098 double x2, y2;
00099 map(point.x(), point.y(), &x2, &y2);
00100
00101 return FloatPoint(static_cast<float>(x2), static_cast<float>(y2));
00102 }
00103
00104 }