Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: ui/gfx/color_space.cc

Issue 2598833002: Add SkColorSpace to gfx::ColorSpace (Closed)
Patch Set: Add tests Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/gfx/color_space.h ('k') | ui/gfx/color_transform_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/color_space.h" 5 #include "ui/gfx/color_space.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 ColorSpace::ColorSpace(int primaries, int transfer, int matrix, RangeID range) 59 ColorSpace::ColorSpace(int primaries, int transfer, int matrix, RangeID range)
60 : primaries_(PrimaryIDFromInt(primaries)), 60 : primaries_(PrimaryIDFromInt(primaries)),
61 transfer_(TransferIDFromInt(transfer)), 61 transfer_(TransferIDFromInt(transfer)),
62 matrix_(MatrixIDFromInt(matrix)), 62 matrix_(MatrixIDFromInt(matrix)),
63 range_(range) { 63 range_(range) {
64 memset(custom_primary_matrix_, 0, sizeof(custom_primary_matrix_)); 64 memset(custom_primary_matrix_, 0, sizeof(custom_primary_matrix_));
65 // TODO: Set profile_id_ 65 // TODO: Set profile_id_
66 } 66 }
67 67
68 ColorSpace::ColorSpace(const ColorSpace& other)
69 : primaries_(other.primaries_),
70 transfer_(other.transfer_),
71 matrix_(other.matrix_),
72 range_(other.range_),
73 icc_profile_id_(other.icc_profile_id_),
74 sk_color_space_(other.sk_color_space_) {
75 memcpy(custom_primary_matrix_, other.custom_primary_matrix_,
76 sizeof(custom_primary_matrix_));
77 }
78
79 ColorSpace::~ColorSpace() = default;
80
68 // static 81 // static
69 ColorSpace ColorSpace::CreateSRGB() { 82 ColorSpace ColorSpace::CreateSRGB() {
70 return ColorSpace(PrimaryID::BT709, TransferID::IEC61966_2_1, MatrixID::RGB, 83 ColorSpace result(PrimaryID::BT709, TransferID::IEC61966_2_1, MatrixID::RGB,
71 RangeID::FULL); 84 RangeID::FULL);
85 result.sk_color_space_ = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
86 return result;
72 } 87 }
73 88
74 // Static 89 // Static
75 ColorSpace ColorSpace::CreateXYZD50() { 90 ColorSpace ColorSpace::CreateXYZD50() {
76 return ColorSpace(PrimaryID::XYZ_D50, TransferID::LINEAR, MatrixID::RGB, 91 return ColorSpace(PrimaryID::XYZ_D50, TransferID::LINEAR, MatrixID::RGB,
77 RangeID::FULL); 92 RangeID::FULL);
78 } 93 }
79 94
80 // static 95 // static
81 ColorSpace ColorSpace::CreateJpeg() { 96 ColorSpace ColorSpace::CreateJpeg() {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 sizeof(custom_primary_matrix_)); 148 sizeof(custom_primary_matrix_));
134 if (primary_result < 0) 149 if (primary_result < 0)
135 return true; 150 return true;
136 if (primary_result > 0) 151 if (primary_result > 0)
137 return false; 152 return false;
138 } 153 }
139 return false; 154 return false;
140 } 155 }
141 156
142 sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const { 157 sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const {
143 // Unspecified color spaces are represented as nullptr SkColorSpaces. 158 return sk_color_space_;
144 if (*this == gfx::ColorSpace())
145 return nullptr;
146 if (*this == gfx::ColorSpace::CreateSRGB())
147 return SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
148
149 // TODO(crbug.com/634102): Support more than just ICC profile based color
150 // spaces. The DCHECK here is to ensure that callers that expect a valid
151 // result are notified of this incomplete functionality.
152 std::vector<char> icc_data = gfx::ICCProfile::FromColorSpace(*this).GetData();
153 sk_sp<SkColorSpace> result =
154 SkColorSpace::MakeICC(icc_data.data(), icc_data.size());
155 DCHECK(result);
156 return result;
157 } 159 }
158 160
159 ColorSpace ColorSpace::FromSkColorSpace( 161 ColorSpace ColorSpace::FromSkColorSpace(
160 const sk_sp<SkColorSpace>& sk_color_space) { 162 const sk_sp<SkColorSpace>& sk_color_space) {
161 if (!sk_color_space) 163 if (!sk_color_space)
162 return gfx::ColorSpace(); 164 return gfx::ColorSpace();
163 if (SkColorSpace::Equals( 165 if (SkColorSpace::Equals(
164 sk_color_space.get(), 166 sk_color_space.get(),
165 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get())) 167 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get()))
166 return gfx::ColorSpace::CreateSRGB(); 168 return gfx::ColorSpace::CreateSRGB();
167 169
168 // TODO(crbug.com/634102): Add conversion to gfx::ColorSpace. 170 // TODO(crbug.com/634102): Add conversion to gfx::ColorSpace for
169 return gfx::ColorSpace(); 171 // non-ICC-profile based color spaces.
172 ICCProfile icc_profile = ICCProfile::FromSkColorSpace(sk_color_space);
173 return icc_profile.GetColorSpace();
170 } 174 }
171 175
172 } // namespace gfx 176 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/color_space.h ('k') | ui/gfx/color_transform_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698