#include "Color.h"
#include "HashTools.h"
-#include "PlatformString.h"
-#include <math.h>
#include <wtf/Assertions.h>
+#include <wtf/HexNumber.h>
#include <wtf/MathExtras.h>
+#include <wtf/text/StringBuilder.h>
using namespace std;
-using namespace WTF;
namespace WebCore {
String Color::serialized() const
{
- if (alpha() == 0xFF)
- return String::format("#%02x%02x%02x", red(), green(), blue());
+ DEFINE_STATIC_LOCAL(const String, commaSpace, (", "));
+ DEFINE_STATIC_LOCAL(const String, rgbaParen, ("rgba("));
+ DEFINE_STATIC_LOCAL(const String, zeroPointZero, ("0.0"));
+
+ if (!hasAlpha()) {
+ StringBuilder builder;
+ builder.reserveCapacity(7);
+ builder.append('#');
+ appendByteAsHex(red(), builder, Lowercase);
+ appendByteAsHex(green(), builder, Lowercase);
+ appendByteAsHex(blue(), builder, Lowercase);
+ return builder.toString();
+ }
+
+ Vector<UChar> result;
+ result.reserveInitialCapacity(28);
+
+ append(result, rgbaParen);
+ appendNumber(result, red());
+ append(result, commaSpace);
+ appendNumber(result, green());
+ append(result, commaSpace);
+ appendNumber(result, blue());
+ append(result, commaSpace);
// Match Gecko ("0.0" for zero, 5 decimals for anything else)
if (!alpha())
- return String::format("rgba(%u, %u, %u, 0.0)", red(), green(), blue());
+ append(result, zeroPointZero);
+ else
+ append(result, String::format("%.5f", alpha() / 255.0f));
- return String::format("rgba(%u, %u, %u, %.5f)", red(), green(), blue(), alpha() / 255.0f);
+ result.append(')');
+ return String::adopt(result);
}
-String Color::name() const
+String Color::nameForRenderTreeAsText() const
{
if (alpha() < 0xFF)
return String::format("#%02X%02X%02X%02X", red(), green(), blue(), alpha());