| Index: ui/gfx/color_space.cc
|
| diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc
|
| index 2bf317bcecb7ec8db177ad8da6c18507680c4e6a..820ec5edf14d3c6a7b845724152e2c7ae7b7f910 100644
|
| --- a/ui/gfx/color_space.cc
|
| +++ b/ui/gfx/color_space.cc
|
| @@ -41,6 +41,7 @@ ColorSpace::MatrixID ColorSpace::MatrixIDFromInt(int matrix_id) {
|
| }
|
|
|
| ColorSpace::ColorSpace() {
|
| + memset(custom_transfer_params_, 0, sizeof(custom_transfer_params_));
|
| memset(custom_primary_matrix_, 0, sizeof(custom_primary_matrix_));
|
| }
|
|
|
| @@ -52,8 +53,8 @@ ColorSpace::ColorSpace(PrimaryID primaries,
|
| transfer_(transfer),
|
| matrix_(matrix),
|
| range_(range) {
|
| + memset(custom_transfer_params_, 0, sizeof(custom_transfer_params_));
|
| memset(custom_primary_matrix_, 0, sizeof(custom_primary_matrix_));
|
| - // TODO: Set profile_id_
|
| }
|
|
|
| ColorSpace::ColorSpace(int primaries, int transfer, int matrix, RangeID range)
|
| @@ -61,8 +62,8 @@ ColorSpace::ColorSpace(int primaries, int transfer, int matrix, RangeID range)
|
| transfer_(TransferIDFromInt(transfer)),
|
| matrix_(MatrixIDFromInt(matrix)),
|
| range_(range) {
|
| + memset(custom_transfer_params_, 0, sizeof(custom_transfer_params_));
|
| memset(custom_primary_matrix_, 0, sizeof(custom_primary_matrix_));
|
| - // TODO: Set profile_id_
|
| }
|
|
|
| ColorSpace::ColorSpace(const ColorSpace& other)
|
| @@ -72,6 +73,8 @@ ColorSpace::ColorSpace(const ColorSpace& other)
|
| range_(other.range_),
|
| icc_profile_id_(other.icc_profile_id_),
|
| sk_color_space_(other.sk_color_space_) {
|
| + memcpy(custom_transfer_params_, other.custom_transfer_params_,
|
| + sizeof(custom_transfer_params_));
|
| memcpy(custom_primary_matrix_, other.custom_primary_matrix_,
|
| sizeof(custom_primary_matrix_));
|
| }
|
| @@ -124,6 +127,10 @@ bool ColorSpace::operator==(const ColorSpace& other) const {
|
| memcmp(custom_primary_matrix_, other.custom_primary_matrix_,
|
| sizeof(custom_primary_matrix_)))
|
| return false;
|
| + if (transfer_ == TransferID::CUSTOM &&
|
| + memcmp(custom_transfer_params_, other.custom_transfer_params_,
|
| + sizeof(custom_transfer_params_)))
|
| + return false;
|
| return true;
|
| }
|
|
|
| @@ -162,6 +169,15 @@ bool ColorSpace::operator<(const ColorSpace& other) const {
|
| if (primary_result > 0)
|
| return false;
|
| }
|
| + if (transfer_ == TransferID::CUSTOM) {
|
| + int transfer_result =
|
| + memcmp(custom_transfer_params_, other.custom_transfer_params_,
|
| + sizeof(custom_transfer_params_));
|
| + if (transfer_result < 0)
|
| + return true;
|
| + if (transfer_result > 0)
|
| + return false;
|
| + }
|
| return false;
|
| }
|
|
|
| @@ -180,4 +196,28 @@ ColorSpace ColorSpace::FromSkColorSpace(
|
| return icc_profile.GetColorSpace();
|
| }
|
|
|
| +bool ColorSpace::GetPrimaryMatrix(SkMatrix44* to_XYZD50) const {
|
| + if (primaries_ == PrimaryID::CUSTOM) {
|
| + to_XYZD50->set3x3RowMajorf(custom_primary_matrix_);
|
| + return true;
|
| + }
|
| + // TODO(ccameron): Merge with primary look-up in ColorTransform.
|
| + return false;
|
| +}
|
| +
|
| +bool ColorSpace::GetTransferFunction(SkColorSpaceTransferFn* fn) const {
|
| + if (transfer_ == TransferID::CUSTOM) {
|
| + fn->fA = custom_transfer_params_[0];
|
| + fn->fB = custom_transfer_params_[1];
|
| + fn->fC = custom_transfer_params_[2];
|
| + fn->fD = custom_transfer_params_[3];
|
| + fn->fE = custom_transfer_params_[4];
|
| + fn->fF = custom_transfer_params_[5];
|
| + fn->fG = custom_transfer_params_[6];
|
| + return true;
|
| + }
|
| + // TODO(ccameron): Add transfer look-up for non-CUSTOM transfer functions.
|
| + return false;
|
| +}
|
| +
|
| } // namespace gfx
|
|
|