// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of dart.sky;

class Color {
  const Color(int value) : _value = (value & 0xFFFFFFFF);
  const Color.fromARGB(int a, int r, int g, int b) :
    _value = ((((a & 0xff) << 24) |
                ((r & 0xff) << 16) |
                ((g & 0xff) << 8) |
                ((b & 0xff) << 0)) & 0xFFFFFFFF);

  final int _value;
  int get value => _value;

  int get alpha => (0xff000000 & _value) >> 24;
  int get red => (0x00ff0000 & _value) >> 16;
  int get green => (0x0000ff00 & _value) >> 8;
  int get blue => (0x000000ff & _value) >> 0;

  bool operator ==(other) => other is Color && _value == other._value;

  Color withAlpha(int a) {
    return new Color.fromARGB(a, red, green, blue);
  }

  Color withRed(int r) {
    return new Color.fromARGB(alpha, r, green, blue);
  }

  Color withGreen(int g) {
    return new Color.fromARGB(alpha, red, g, blue);
  }

  Color withBlue(int b) {
    return new Color.fromARGB(alpha, red, green, b);
  }

  int get hashCode => _value.hashCode;
  String toString() => "Color(0x${_value.toRadixString(16).padLeft(8, '0')})";
}
