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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/common/Color.js

Issue 1986053004: Devtools Color: Basic support for #RRGGBBAA and #RGBA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2009 Joseph Pecoraro 3 * Copyright (C) 2009 Joseph Pecoraro
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 } 55 }
56 56
57 /** 57 /**
58 * @enum {string} 58 * @enum {string}
59 */ 59 */
60 WebInspector.Color.Format = { 60 WebInspector.Color.Format = {
61 Original: "original", 61 Original: "original",
62 Nickname: "nickname", 62 Nickname: "nickname",
63 HEX: "hex", 63 HEX: "hex",
64 ShortHEX: "shorthex", 64 ShortHEX: "shorthex",
pfeldman 2016/05/19 07:14:06 Is there ShortHEXA?
samli 2016/05/20 00:22:18 Done.
65 AlphaHEX: "alphahex",
dgozman 2016/05/19 07:10:59 I'd go for HEXA and ShortHEXA (which is missing he
pfeldman 2016/05/19 07:14:06 HEXA
samli 2016/05/20 00:22:18 Done.
65 RGB: "rgb", 66 RGB: "rgb",
66 RGBA: "rgba", 67 RGBA: "rgba",
67 HSL: "hsl", 68 HSL: "hsl",
68 HSLA: "hsla" 69 HSLA: "hsla"
69 } 70 }
70 71
71 /** 72 /**
72 * @param {string} text 73 * @param {string} text
73 * @return {?WebInspector.Color} 74 * @return {?WebInspector.Color}
74 */ 75 */
75 WebInspector.Color.parse = function(text) 76 WebInspector.Color.parse = function(text)
76 { 77 {
77 // Simple - #hex, rgb(), nickname, hsl() 78 // Simple - #hex, rgb(), nickname, hsl()
78 var value = text.toLowerCase().replace(/\s+/g, ""); 79 var value = text.toLowerCase().replace(/\s+/g, "");
79 var simple = /^(?:#([0-9a-f]{3}|[0-9a-f]{6})|rgb\(((?:-?\d+%?,){2}-?\d+%?)\) |(\w+)|hsl\((-?\d+\.?\d*(?:,-?\d+\.?\d*%){2})\))$/i; 80 var simple = /^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|rgb\(((?:-?\d+%?, ){2}-?\d+%?)\)|(\w+)|hsl\((-?\d+\.?\d*(?:,-?\d+\.?\d*%){2})\))$/i;
pfeldman 2016/05/19 07:14:06 why different treatment of 3-4 ws 6-8?
samli 2016/05/20 00:22:18 "6,8" includes 7 "3,4" is just 3 & 4
80 var match = value.match(simple); 81 var match = value.match(simple);
81 if (match) { 82 if (match) {
82 if (match[1]) { // hex 83 if (match[1]) { // hex
83 var hex = match[1].toLowerCase(); 84 var hex = match[1].toLowerCase();
84 var format; 85 var format;
85 if (hex.length === 3) { 86 if (hex.length === 3) {
86 format = WebInspector.Color.Format.ShortHEX; 87 format = WebInspector.Color.Format.ShortHEX;
87 hex = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt (1) + hex.charAt(2) + hex.charAt(2); 88 hex = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt (1) + hex.charAt(2) + hex.charAt(2);
88 } else 89 } else if (hex.length === 4) {
90 format = WebInspector.Color.Format.AlphaHEX;
91 hex = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt (1) + hex.charAt(2) + hex.charAt(2) + hex.charAt(3) + hex.charAt(3);
92 } else if (hex.length === 6) {
89 format = WebInspector.Color.Format.HEX; 93 format = WebInspector.Color.Format.HEX;
94 } else {
95 format = WebInspector.Color.Format.AlphaHEX;
96 }
90 var r = parseInt(hex.substring(0,2), 16); 97 var r = parseInt(hex.substring(0,2), 16);
91 var g = parseInt(hex.substring(2,4), 16); 98 var g = parseInt(hex.substring(2,4), 16);
92 var b = parseInt(hex.substring(4,6), 16); 99 var b = parseInt(hex.substring(4,6), 16);
93 return new WebInspector.Color([r / 255, g / 255, b / 255, 1], format , text); 100 var a = format === WebInspector.Color.Format.AlphaHEX ? parseInt(hex .substring(6,8), 16) / 255 : 1;
dgozman 2016/05/19 07:10:59 style: missing space after comma
samli 2016/05/20 00:22:18 Done.
101 return new WebInspector.Color([r / 255, g / 255, b / 255, a], format , text);
94 } 102 }
95 103
96 if (match[2]) { // rgb 104 if (match[2]) { // rgb
97 var rgbString = match[2].split(/\s*,\s*/); 105 var rgbString = match[2].split(/\s*,\s*/);
98 var rgba = [ WebInspector.Color._parseRgbNumeric(rgbString[0]), 106 var rgba = [ WebInspector.Color._parseRgbNumeric(rgbString[0]),
99 WebInspector.Color._parseRgbNumeric(rgbString[1]), 107 WebInspector.Color._parseRgbNumeric(rgbString[1]),
100 WebInspector.Color._parseRgbNumeric(rgbString[2]), 1 ]; 108 WebInspector.Color._parseRgbNumeric(rgbString[2]), 1 ];
101 return new WebInspector.Color(rgba, WebInspector.Color.Format.RGB, t ext); 109 return new WebInspector.Color(rgba, WebInspector.Color.Format.RGB, t ext);
102 } 110 }
103 111
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 * @return {boolean} 257 * @return {boolean}
250 */ 258 */
251 hasAlpha: function() 259 hasAlpha: function()
252 { 260 {
253 return this._rgba[3] !== 1; 261 return this._rgba[3] !== 1;
254 }, 262 },
255 263
256 /** 264 /**
257 * @return {boolean} 265 * @return {boolean}
258 */ 266 */
259 canBeShortHex: function() 267 canBeShortHex: function()
dgozman 2016/05/19 07:10:59 I think this function is wrong now. We can replace
samli 2016/05/20 00:22:18 Done. Not all |hasAlpha| changed since asString()
260 { 268 {
261 if (this.hasAlpha()) 269 if (this.hasAlpha())
262 return false; 270 return false;
263 for (var i = 0; i < 3; ++i) { 271 for (var i = 0; i < 3; ++i) {
264 var c = Math.round(this._rgba[i] * 255); 272 var c = Math.round(this._rgba[i] * 255);
265 if (c % 17) 273 if (c % 17)
266 return false; 274 return false;
267 } 275 }
268 return true; 276 return true;
269 }, 277 },
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 case WebInspector.Color.Format.RGBA: 325 case WebInspector.Color.Format.RGBA:
318 return String.sprintf("rgba(%d, %d, %d, %f)", toRgbValue(this._rgba[ 0]), toRgbValue(this._rgba[1]), toRgbValue(this._rgba[2]), this._rgba[3]); 326 return String.sprintf("rgba(%d, %d, %d, %f)", toRgbValue(this._rgba[ 0]), toRgbValue(this._rgba[1]), toRgbValue(this._rgba[2]), this._rgba[3]);
319 case WebInspector.Color.Format.HSL: 327 case WebInspector.Color.Format.HSL:
320 if (this.hasAlpha()) 328 if (this.hasAlpha())
321 return null; 329 return null;
322 var hsl = this.hsla(); 330 var hsl = this.hsla();
323 return String.sprintf("hsl(%d, %d%, %d%)", Math.round(hsl[0] * 360), Math.round(hsl[1] * 100), Math.round(hsl[2] * 100)); 331 return String.sprintf("hsl(%d, %d%, %d%)", Math.round(hsl[0] * 360), Math.round(hsl[1] * 100), Math.round(hsl[2] * 100));
324 case WebInspector.Color.Format.HSLA: 332 case WebInspector.Color.Format.HSLA:
325 var hsla = this.hsla(); 333 var hsla = this.hsla();
326 return String.sprintf("hsla(%d, %d%, %d%, %f)", Math.round(hsla[0] * 360), Math.round(hsla[1] * 100), Math.round(hsla[2] * 100), hsla[3]); 334 return String.sprintf("hsla(%d, %d%, %d%, %f)", Math.round(hsla[0] * 360), Math.round(hsla[1] * 100), Math.round(hsla[2] * 100), hsla[3]);
335 case WebInspector.Color.Format.AlphaHEX:
336 return String.sprintf("#%s%s%s%s", toHexValue(this._rgba[0]), toHexV alue(this._rgba[1]), toHexValue(this._rgba[2]), toHexValue(this._rgba[3])).toLow erCase();;
dgozman 2016/05/19 07:10:59 style: double semicolon
samli 2016/05/20 00:22:18 Done.
327 case WebInspector.Color.Format.HEX: 337 case WebInspector.Color.Format.HEX:
328 if (this.hasAlpha()) 338 if (this.hasAlpha())
329 return null; 339 return null;
330 return String.sprintf("#%s%s%s", toHexValue(this._rgba[0]), toHexVal ue(this._rgba[1]), toHexValue(this._rgba[2])).toLowerCase();; 340 return String.sprintf("#%s%s%s", toHexValue(this._rgba[0]), toHexVal ue(this._rgba[1]), toHexValue(this._rgba[2])).toLowerCase();;
331 case WebInspector.Color.Format.ShortHEX: 341 case WebInspector.Color.Format.ShortHEX:
332 if (!this.canBeShortHex()) 342 if (!this.canBeShortHex())
333 return null; 343 return null;
334 return String.sprintf("#%s%s%s", toShortHexValue(this._rgba[0]), toS hortHexValue(this._rgba[1]), toShortHexValue(this._rgba[2])).toLowerCase();; 344 return String.sprintf("#%s%s%s", toShortHexValue(this._rgba[0]), toS hortHexValue(this._rgba[1]), toShortHexValue(this._rgba[2])).toLowerCase();;
335 case WebInspector.Color.Format.Nickname: 345 case WebInspector.Color.Format.Nickname:
336 return this.nickname(); 346 return this.nickname();
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 format = (color.hasAlpha() ? cf.RGBA : cf.RGB); 823 format = (color.hasAlpha() ? cf.RGBA : cf.RGB);
814 else if (formatSetting === cf.HSL) 824 else if (formatSetting === cf.HSL)
815 format = (color.hasAlpha() ? cf.HSLA : cf.HSL); 825 format = (color.hasAlpha() ? cf.HSLA : cf.HSL);
816 else if (!color.hasAlpha()) 826 else if (!color.hasAlpha())
817 format = (color.canBeShortHex() ? cf.ShortHEX : cf.HEX); 827 format = (color.canBeShortHex() ? cf.ShortHEX : cf.HEX);
818 else 828 else
819 format = cf.RGBA; 829 format = cf.RGBA;
820 830
821 return format; 831 return format;
822 } 832 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698