From d8543bb6618c17b12da906afa77d216f58cf4058 Mon Sep 17 00:00:00 2001 From: Upstream Date: Mon, 12 Jan 1970 13:46:40 +0000 Subject: external/webkit r30707 --- WebCore/svg/ColorDistance.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 WebCore/svg/ColorDistance.cpp (limited to 'WebCore/svg/ColorDistance.cpp') diff --git a/WebCore/svg/ColorDistance.cpp b/WebCore/svg/ColorDistance.cpp new file mode 100644 index 0000000..9e632ae --- /dev/null +++ b/WebCore/svg/ColorDistance.cpp @@ -0,0 +1,94 @@ +/* + Copyright (C) 2007 Eric Seidel + + This file is part of the WebKit project + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +#include "config.h" +#if ENABLE(SVG) +#include "ColorDistance.h" +#include "Color.h" +#include + +namespace WebCore { + +ColorDistance::ColorDistance() + : m_redDiff(0) + , m_greenDiff(0) + , m_blueDiff(0) +{ +} + +ColorDistance::ColorDistance(const Color& fromColor, const Color& toColor) + : m_redDiff(toColor.red() - fromColor.red()) + , m_greenDiff(toColor.green() - fromColor.green()) + , m_blueDiff(toColor.blue() - fromColor.blue()) +{ +} + +ColorDistance::ColorDistance(int redDiff, int greenDiff, int blueDiff) + : m_redDiff(redDiff) + , m_greenDiff(greenDiff) + , m_blueDiff(blueDiff) +{ +} + +static inline int clampColorValue(int v) +{ + if (v > 255) + v = 255; + else if (v < 0) + v = 0; + return v; +} + +ColorDistance ColorDistance::scaledDistance(float scaleFactor) const +{ + return ColorDistance(static_cast(scaleFactor * m_redDiff), + static_cast(scaleFactor * m_greenDiff), + static_cast(scaleFactor * m_blueDiff)); +} + +Color ColorDistance::addColorsAndClamp(const Color& first, const Color& second) +{ + return Color(clampColorValue(first.red() + second.red()), + clampColorValue(first.green() + second.green()), + clampColorValue(first.blue() + second.blue())); +} + +Color ColorDistance::addToColorAndClamp(const Color& color) const +{ + return Color(clampColorValue(color.red() + m_redDiff), + clampColorValue(color.green() + m_greenDiff), + clampColorValue(color.blue() + m_blueDiff)); +} + +bool ColorDistance::isZero() const +{ + return (m_redDiff == 0 && m_blueDiff == 0 && m_greenDiff == 0); +} + +float ColorDistance::distance() const +{ + // This is just a simple distance calculation, not respecting color spaces + return sqrtf(m_redDiff * m_redDiff + m_blueDiff * m_blueDiff + m_greenDiff * m_greenDiff); +} + +} + +#endif -- cgit v1.1