- From: Florian Rivoal <florian@rivoal.net>
- Date: Thu, 21 Aug 2014 15:04:04 +0200
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: "www-style list" <www-style@w3.org>
On Wed, 13 Aug 2014 21:48:52 +0200, Tab Atkins Jr. <jackalmage@gmail.com> wrote: > Once again, the CMYKColor class is merely echoing the behavior of the > device-cmyk() function. I'm not comfortable with making a change to > one without changing the other. > > If you have a suggestion as to how to make device-cmyk() work better, > we can discuss that, and after it's adopted I'll have CMYKColor mirror > it. Once we move into a color managed css world, I assume we will have something along these lines, with the obvious semantics: @color-profile aRGB { type: rgb; src: url("http://www.example.com/adobe-rgb.icc"); } @color-profile fogra39 { type: cmyk; src: url("http://www.example.com/forgra39.icc"); } div { background-color: rgb(0, 128, 255, aRGB); color: cmyk(0, 50%, 50%, 10%, 1, forgra39); } In such a world, rgb(,,) would be the same as rgb(,,,sRGB), where sRGB would be a built-in color space. The declarative syntax we have today is forward compatible with such a world, because the object created by these function is not observable, but understood to carry information (if implicitely) about the color space it is in. I see 3 ways of thinking about the JS syntax we are discussing: 1 - It is a purely syntactic object, distinct from the internal color objects that carry color space information, which are still not observable. If so, there should not be methods on this object to do color math. 2 - It is an (interface to an) instance of this internal representation, in which case it must be color space aware. sRGB device-CMKYK values should be explicitly tagged as such, and APIs expecting these specific color spaces (all of them as of now?) should reject objects that do not carry this tag, or cannot be converted into one. If we want to go that route, the tag should probably be a read only attribute pointing to an object that has (for now), only the name of the color profile as attribute, and can later be augmented with more things. This is my favorite 3 - Every color space gets a different class deriving directly from CSSColor. Adobe RGB for example would not derive from RGBColor, but from CSSColor, and anyone wanting to do HSL in Adobe RGB space would need to define a separate class for that as well, rather than rely on the HSLColor. I suppose this is actually what you intended. If that's the case, I suggest that CMYKColor should be called DeviceCMYKColor (and toCMYK() should be called toDeviceCMYK()), since this is not a generic CMYK class, but a very particular one. Similarly, RGBColor might be better off being called SRGBColor (although the existence of color-correction: auto | sRGB makes this not entirely obvious). I think this could work reasonably well, except that it makes (s)RGB special as the intermediate space of every color space conversion, which is not too great if we ever want to be able to use anything else as the working color space. Either way, I don't think I have the definitive answer to the question, but it does not seem wise to me to settle down on something without considering how that will map to the declarative syntax to for colors in different color spaces, and how it will deal with trying to have something else than sRGB as the working space. I think it is time to go read the API of well established CMS systems, and see that that makes me any wiser. Cheers, Florian
Received on Thursday, 21 August 2014 13:04:35 UTC