layout/style/StyleComplexColor.h
author Xidorn Quan <me@upsuper.org>
Tue, 27 Sep 2016 14:00:05 +1000
changeset 418917 9626d350649f4ba6dba597e3df05fe1829307610
parent 415411 ee7bca9676a2f1a05d126b7208323080fae109ae
child 452699 fb3a1c201c9c4fee46f939e4bedbcf1d737f9a3a
child 452830 dfd8876b734c4656f2990b448d153500105dfeb2
permissions -rw-r--r--
Bug 1266621 part 4 - Remove constructors of StyleComplexColor. r=heycam So that they can be put inside anonymous structs and unions. MozReview-Commit-ID: 8OMxkSZJEOz

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* represent a color combines a numeric color and currentcolor */

#ifndef mozilla_StyleComplexColor_h_
#define mozilla_StyleComplexColor_h_

#include "nsColor.h"

namespace mozilla {

/**
 * This struct represents a combined color from a numeric color and
 * the current foreground color (currentcolor keyword).
 * Conceptually, the formula is "color * (1 - p) + currentcolor * p"
 * where p is mForegroundRatio. See mozilla::LinearBlendColors for
 * the actual algorithm.
 */
struct StyleComplexColor
{
  nscolor mColor;
  uint8_t mForegroundRatio;

  static StyleComplexColor FromColor(nscolor aColor) { return {aColor, 0}; }
  static StyleComplexColor CurrentColor() { return {NS_RGBA(0, 0, 0, 0), 255}; }

  bool IsNumericColor() const { return mForegroundRatio == 0; }
  bool IsCurrentColor() const { return mForegroundRatio == 255; }

  bool operator==(const StyleComplexColor& aOther) const {
    return mForegroundRatio == aOther.mForegroundRatio &&
           (IsCurrentColor() || mColor == aOther.mColor);
  }
  bool operator!=(const StyleComplexColor& aOther) const {
    return !(*this == aOther);
  }
};

}

#endif // mozilla_StyleComplexColor_h_