2 Copyright (C) 2007 Eric Seidel <eric@webkit.org>
4 This file is part of the WebKit project
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
24 #include "ColorDistance.h"
26 #include <wtf/MathExtras.h>
30 ColorDistance::ColorDistance()
37 ColorDistance::ColorDistance(const Color
& fromColor
, const Color
& toColor
)
38 : m_redDiff(toColor
.red() - fromColor
.red())
39 , m_greenDiff(toColor
.green() - fromColor
.green())
40 , m_blueDiff(toColor
.blue() - fromColor
.blue())
44 ColorDistance::ColorDistance(int redDiff
, int greenDiff
, int blueDiff
)
46 , m_greenDiff(greenDiff
)
47 , m_blueDiff(blueDiff
)
51 static inline int clampColorValue(int v
)
60 ColorDistance
ColorDistance::scaledDistance(float scaleFactor
) const
62 return ColorDistance(static_cast<int>(scaleFactor
* m_redDiff
),
63 static_cast<int>(scaleFactor
* m_greenDiff
),
64 static_cast<int>(scaleFactor
* m_blueDiff
));
67 Color
ColorDistance::addColorsAndClamp(const Color
& first
, const Color
& second
)
69 return Color(clampColorValue(first
.red() + second
.red()),
70 clampColorValue(first
.green() + second
.green()),
71 clampColorValue(first
.blue() + second
.blue()));
74 Color
ColorDistance::addToColorAndClamp(const Color
& color
) const
76 return Color(clampColorValue(color
.red() + m_redDiff
),
77 clampColorValue(color
.green() + m_greenDiff
),
78 clampColorValue(color
.blue() + m_blueDiff
));
81 bool ColorDistance::isZero() const
83 return (m_redDiff
== 0 && m_blueDiff
== 0 && m_greenDiff
== 0);
86 float ColorDistance::distance() const
88 // This is just a simple distance calculation, not respecting color spaces
89 return sqrtf(m_redDiff
* m_redDiff
+ m_blueDiff
* m_blueDiff
+ m_greenDiff
* m_greenDiff
);