OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Brian Grinstead All rights reserved. | 2 * Copyright (C) 2011 Brian Grinstead All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 this._hexValue.addEventListener("keydown", this._inputChanged.bind(this), fa
lse); | 95 this._hexValue.addEventListener("keydown", this._inputChanged.bind(this), fa
lse); |
96 this._hexValue.addEventListener("mousewheel", this._inputChanged.bind(this),
false); | 96 this._hexValue.addEventListener("mousewheel", this._inputChanged.bind(this),
false); |
97 | 97 |
98 var label = this._hexContainer.createChild("div", "spectrum-text-label"); | 98 var label = this._hexContainer.createChild("div", "spectrum-text-label"); |
99 label.textContent = "HEX"; | 99 label.textContent = "HEX"; |
100 | 100 |
101 WebInspector.installDragHandle(this._hueElement, dragStart.bind(this, positi
onHue.bind(this)), positionHue.bind(this), null, "default"); | 101 WebInspector.installDragHandle(this._hueElement, dragStart.bind(this, positi
onHue.bind(this)), positionHue.bind(this), null, "default"); |
102 WebInspector.installDragHandle(this._alphaElement, dragStart.bind(this, posi
tionAlpha.bind(this)), positionAlpha.bind(this), null, "default"); | 102 WebInspector.installDragHandle(this._alphaElement, dragStart.bind(this, posi
tionAlpha.bind(this)), positionAlpha.bind(this), null, "default"); |
103 WebInspector.installDragHandle(this._colorElement, dragStart.bind(this, posi
tionColor.bind(this)), positionColor.bind(this), null, "default"); | 103 WebInspector.installDragHandle(this._colorElement, dragStart.bind(this, posi
tionColor.bind(this)), positionColor.bind(this), null, "default"); |
104 | 104 |
105 if (Runtime.experiments.isEnabled("colorPalettes")) { | 105 this.element.classList.add("palettes-enabled"); |
106 this.element.classList.add("palettes-enabled"); | 106 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */ |
107 /** @type {!Map.<string, !WebInspector.Spectrum.Palette>} */ | 107 this._palettes = new Map(); |
108 this._palettes = new Map(); | 108 this._palettePanel = this.contentElement.createChild("div", "palette-panel")
; |
109 this._palettePanel = this.contentElement.createChild("div", "palette-pan
el"); | 109 this._palettePanelShowing = false; |
110 this._palettePanelShowing = false; | 110 this._paletteContainer = this.contentElement.createChild("div", "spectrum-pa
lette"); |
111 this._paletteContainer = this.contentElement.createChild("div", "spectru
m-palette"); | 111 this._paletteContainer.addEventListener("contextmenu", this._showPaletteColo
rContextMenu.bind(this, -1)); |
112 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-p
alette-switcher spectrum-switcher"); | 112 WebInspector.installDragHandle(this._paletteContainer, this._paletteDragStar
t.bind(this), this._paletteDrag.bind(this), this._paletteDragEnd.bind(this), "de
fault"); |
113 appendSwitcherIcon(paletteSwitcher); | 113 var paletteSwitcher = this.contentElement.createChild("div", "spectrum-palet
te-switcher spectrum-switcher"); |
114 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind(
this, true)); | 114 appendSwitcherIcon(paletteSwitcher); |
115 var overlay = this.contentElement.createChild("div", "spectrum-overlay f
ill"); | 115 paletteSwitcher.addEventListener("click", this._togglePalettePanel.bind(this
, true)); |
116 overlay.addEventListener("click", this._togglePalettePanel.bind(this, fa
lse)); | 116 var overlay = this.contentElement.createChild("div", "spectrum-overlay fill"
); |
| 117 overlay.addEventListener("click", this._togglePalettePanel.bind(this, false)
); |
117 | 118 |
118 this._addColorToolbar = new WebInspector.Toolbar(); | 119 this._addColorToolbar = new WebInspector.Toolbar(); |
119 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIStrin
g("Add to palette"), "add-toolbar-item"); | 120 this._addColorToolbar.element.classList.add("add-color-toolbar"); |
120 addColorButton.addEventListener("click", this._addColorToCustomPalette.b
ind(this)); | 121 var addColorButton = new WebInspector.ToolbarButton(WebInspector.UIString("A
dd to palette"), "add-toolbar-item"); |
121 this._addColorToolbar.appendToolbarItem(addColorButton); | 122 addColorButton.addEventListener("click", this._addColorToCustomPalette.bind(
this)); |
| 123 this._addColorToolbar.appendToolbarItem(addColorButton); |
122 | 124 |
123 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded.
bind(this)); | 125 new WebInspector.Spectrum.PaletteGenerator(this._generatedPaletteLoaded.bind
(this)); |
124 } | |
125 | 126 |
126 /** | 127 /** |
127 * @param {function(!Event)} callback | 128 * @param {function(!Event)} callback |
128 * @param {!Event} event | 129 * @param {!Event} event |
129 * @return {boolean} | 130 * @return {boolean} |
130 * @this {WebInspector.Spectrum} | 131 * @this {WebInspector.Spectrum} |
131 */ | 132 */ |
132 function dragStart(callback, event) | 133 function dragStart(callback, event) |
133 { | 134 { |
134 this._hueAlphaLeft = this._hueElement.totalOffsetLeft(); | 135 this._hueAlphaLeft = this._hueElement.totalOffsetLeft(); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 Input: "Input", | 181 Input: "Input", |
181 Model: "Model", | 182 Model: "Model", |
182 Other: "Other" | 183 Other: "Other" |
183 } | 184 } |
184 | 185 |
185 WebInspector.Spectrum.Events = { | 186 WebInspector.Spectrum.Events = { |
186 ColorChanged: "ColorChanged", | 187 ColorChanged: "ColorChanged", |
187 SizeChanged: "SizeChanged" | 188 SizeChanged: "SizeChanged" |
188 }; | 189 }; |
189 | 190 |
| 191 WebInspector.Spectrum._colorChipSize = 24; |
| 192 WebInspector.Spectrum._itemsPerPaletteRow = 8; |
| 193 |
190 WebInspector.Spectrum.prototype = { | 194 WebInspector.Spectrum.prototype = { |
191 _updatePalettePanel: function() | 195 _updatePalettePanel: function() |
192 { | 196 { |
193 this._palettePanel.removeChildren(); | 197 this._palettePanel.removeChildren(); |
194 var title = this._palettePanel.createChild("div", "palette-title"); | 198 var title = this._palettePanel.createChild("div", "palette-title"); |
195 title.textContent = WebInspector.UIString("Color Palettes"); | 199 title.textContent = WebInspector.UIString("Color Palettes"); |
196 var toolbar = new WebInspector.Toolbar(this._palettePanel); | 200 var toolbar = new WebInspector.Toolbar(this._palettePanel); |
197 var closeButton = new WebInspector.ToolbarButton("Return to color picker
", "delete-toolbar-item"); | 201 var closeButton = new WebInspector.ToolbarButton("Return to color picker
", "delete-toolbar-item"); |
198 closeButton.addEventListener("click", this._togglePalettePanel.bind(this
, false)); | 202 closeButton.addEventListener("click", this._togglePalettePanel.bind(this
, false)); |
199 toolbar.appendToolbarItem(closeButton); | 203 toolbar.appendToolbarItem(closeButton); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 * @param {!WebInspector.Spectrum.Palette} palette | 237 * @param {!WebInspector.Spectrum.Palette} palette |
234 * @param {boolean} animate | 238 * @param {boolean} animate |
235 * @param {!Event=} event | 239 * @param {!Event=} event |
236 */ | 240 */ |
237 _showPalette: function(palette, animate, event) | 241 _showPalette: function(palette, animate, event) |
238 { | 242 { |
239 this._paletteContainer.removeChildren(); | 243 this._paletteContainer.removeChildren(); |
240 for (var i = 0; i < palette.colors.length; i++) { | 244 for (var i = 0; i < palette.colors.length; i++) { |
241 var animationDelay = animate ? i * 100 / palette.colors.length : 0; | 245 var animationDelay = animate ? i * 100 / palette.colors.length : 0; |
242 var colorElement = this._createPaletteColor(palette.colors[i], anima
tionDelay); | 246 var colorElement = this._createPaletteColor(palette.colors[i], anima
tionDelay); |
243 colorElement.addEventListener("click", this._paletteColorSelected.bi
nd(this, palette.colors[i])); | 247 colorElement.addEventListener("mousedown", this._paletteColorSelecte
d.bind(this, palette.colors[i])); |
244 if (palette.mutable) | 248 if (palette.mutable) { |
| 249 colorElement.__mutable = true; |
| 250 colorElement.__color = palette.colors[i]; |
245 colorElement.addEventListener("contextmenu", this._showPaletteCo
lorContextMenu.bind(this, i)); | 251 colorElement.addEventListener("contextmenu", this._showPaletteCo
lorContextMenu.bind(this, i)); |
| 252 } |
246 this._paletteContainer.appendChild(colorElement); | 253 this._paletteContainer.appendChild(colorElement); |
247 } | 254 } |
| 255 this._paletteContainerMutable = palette.mutable; |
248 | 256 |
249 var numItems = palette.colors.length; | 257 var numItems = palette.colors.length; |
250 if (palette.mutable) | 258 if (palette.mutable) |
251 numItems++; | 259 numItems++; |
252 var rowsNeeded = Math.max(1, Math.ceil(numItems / 8)); | 260 var rowsNeeded = Math.max(1, Math.ceil(numItems / WebInspector.Spectrum.
_itemsPerPaletteRow)); |
253 for (var i = 0; palette.mutable && i < rowsNeeded * 8 - numItems; i++) | 261 for (var i = 0; palette.mutable && i < rowsNeeded * WebInspector.Spectru
m._itemsPerPaletteRow - numItems; i++) |
254 this._paletteContainer.createChild("div", "spectrum-palette-color em
pty-color"); | 262 this._paletteContainer.createChild("div", "spectrum-palette-color em
pty-color"); |
255 if (palette.mutable) | 263 if (palette.mutable) |
256 this._paletteContainer.appendChild(this._addColorToolbar.element); | 264 this.contentElement.appendChild(this._addColorToolbar.element); |
| 265 else |
| 266 this._addColorToolbar.element.remove(); |
257 | 267 |
258 this._togglePalettePanel(false); | 268 this._togglePalettePanel(false); |
259 var paletteColorHeight = 12; | 269 var paletteColorHeight = 12; |
260 var paletteMargin = 12; | 270 var paletteMargin = 12; |
261 this.element.style.height = (this._paletteContainer.offsetTop + paletteM
argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px"; | 271 this.element.style.height = (this._paletteContainer.offsetTop + paletteM
argin + (paletteColorHeight + paletteMargin) * rowsNeeded) + "px"; |
262 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged); | 272 this.dispatchEventToListeners(WebInspector.Spectrum.Events.SizeChanged); |
263 }, | 273 }, |
264 | 274 |
265 /** | 275 /** |
| 276 * @param {!Event} e |
| 277 * @return {number} |
| 278 */ |
| 279 _slotIndexForEvent: function(e) |
| 280 { |
| 281 var localX = e.pageX - this._paletteContainer.totalOffsetLeft(); |
| 282 var localY = e.pageY - this._paletteContainer.totalOffsetTop(); |
| 283 var col = Math.min(localX / WebInspector.Spectrum._colorChipSize | 0, We
bInspector.Spectrum._itemsPerPaletteRow - 1); |
| 284 var row = (localY / WebInspector.Spectrum._colorChipSize) | 0; |
| 285 return Math.min(row * WebInspector.Spectrum._itemsPerPaletteRow + col, t
his._paletteContainer.children.length - 1); |
| 286 }, |
| 287 |
| 288 /** |
| 289 * @param {!Event} e |
| 290 * @return {boolean} |
| 291 */ |
| 292 _paletteDragStart: function(e) |
| 293 { |
| 294 var element = e.deepElementFromPoint(); |
| 295 if (!element.__mutable) |
| 296 return false; |
| 297 |
| 298 var index = this._slotIndexForEvent(e); |
| 299 this._dragElement = element; |
| 300 this._dragHotSpotX = e.pageX - (index % WebInspector.Spectrum._itemsPerP
aletteRow) * WebInspector.Spectrum._colorChipSize; |
| 301 this._dragHotSpotY = e.pageY - (index / WebInspector.Spectrum._itemsPerP
aletteRow | 0) * WebInspector.Spectrum._colorChipSize; |
| 302 return true; |
| 303 }, |
| 304 |
| 305 /** |
| 306 * @param {!Event} e |
| 307 */ |
| 308 _paletteDrag: function(e) |
| 309 { |
| 310 if (e.pageX < this._paletteContainer.totalOffsetLeft() || e.pageY < this
._paletteContainer.totalOffsetTop()) |
| 311 return; |
| 312 var newIndex = this._slotIndexForEvent(e); |
| 313 var offsetX = e.pageX - (newIndex % WebInspector.Spectrum._itemsPerPalet
teRow) * WebInspector.Spectrum._colorChipSize; |
| 314 var offsetY = e.pageY - (newIndex / WebInspector.Spectrum._itemsPerPalet
teRow | 0) * WebInspector.Spectrum._colorChipSize; |
| 315 |
| 316 this._dragElement.style.position = "relative"; |
| 317 this._dragElement.style.left = (offsetX - this._dragHotSpotX) + "px"; |
| 318 this._dragElement.style.top = (offsetY - this._dragHotSpotY) + "px"; |
| 319 var children = Array.prototype.slice.call(this._paletteContainer.childre
n); |
| 320 var index = children.indexOf(this._dragElement); |
| 321 if (index !== newIndex) |
| 322 this._paletteContainer.insertBefore(this._dragElement, children[newI
ndex > index ? newIndex + 1 : newIndex]); |
| 323 }, |
| 324 |
| 325 /** |
| 326 * @param {!Event} e |
| 327 */ |
| 328 _paletteDragEnd: function(e) |
| 329 { |
| 330 this._dragElement.style.removeProperty("position"); |
| 331 this._dragElement.style.removeProperty("left"); |
| 332 this._dragElement.style.removeProperty("top"); |
| 333 var children = this._paletteContainer.children; |
| 334 var colors = []; |
| 335 for (var i = 0; i < children.length; ++i) { |
| 336 if (children[i].__color) |
| 337 colors.push(children[i].__color); |
| 338 } |
| 339 var palette = this._customPaletteSetting.get(); |
| 340 palette.colors = colors; |
| 341 this._customPaletteSetting.set(palette); |
| 342 this._showPalette(this._customPaletteSetting.get(), false); |
| 343 }, |
| 344 |
| 345 /** |
266 * @param {!WebInspector.Spectrum.Palette} generatedPalette | 346 * @param {!WebInspector.Spectrum.Palette} generatedPalette |
267 */ | 347 */ |
268 _generatedPaletteLoaded: function(generatedPalette) | 348 _generatedPaletteLoaded: function(generatedPalette) |
269 { | 349 { |
270 if (generatedPalette.colors.length) | 350 if (generatedPalette.colors.length) |
271 this._palettes.set(generatedPalette.title, generatedPalette); | 351 this._palettes.set(generatedPalette.title, generatedPalette); |
272 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe
ctor.Spectrum.MaterialPalette); | 352 this._palettes.set(WebInspector.Spectrum.MaterialPalette.title, WebInspe
ctor.Spectrum.MaterialPalette); |
273 /** @type {!WebInspector.Spectrum.Palette} */ | 353 /** @type {!WebInspector.Spectrum.Palette} */ |
274 var defaultCustomPalette = { title: "Custom", colors: [], mutable: true
}; | 354 var defaultCustomPalette = { title: "Custom", colors: [], mutable: true
}; |
275 this._customPaletteSetting = WebInspector.settings.createSetting("custom
ColorPalette", defaultCustomPalette); | 355 this._customPaletteSetting = WebInspector.settings.createSetting("custom
ColorPalette", defaultCustomPalette); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 this._customPaletteSetting.set(palette); | 407 this._customPaletteSetting.set(palette); |
328 this._showPalette(this._customPaletteSetting.get(), false); | 408 this._showPalette(this._customPaletteSetting.get(), false); |
329 }, | 409 }, |
330 | 410 |
331 /** | 411 /** |
332 * @param {number} colorIndex | 412 * @param {number} colorIndex |
333 * @param {!Event} event | 413 * @param {!Event} event |
334 */ | 414 */ |
335 _showPaletteColorContextMenu: function(colorIndex, event) | 415 _showPaletteColorContextMenu: function(colorIndex, event) |
336 { | 416 { |
| 417 if (!this._paletteContainerMutable) |
| 418 return; |
337 var contextMenu = new WebInspector.ContextMenu(event); | 419 var contextMenu = new WebInspector.ContextMenu(event); |
338 contextMenu.appendItem(WebInspector.UIString("Remove color"), this._dele
tePaletteColor.bind(this, colorIndex)); | 420 if (colorIndex !== -1) { |
339 contextMenu.appendItem(WebInspector.UIString("Clear palette"), this._del
etePaletteColor.bind(this, undefined)); | 421 contextMenu.appendItem(WebInspector.UIString("Remove color"), this._
deletePaletteColors.bind(this, colorIndex, false)); |
| 422 contextMenu.appendItem(WebInspector.UIString("Remove all to the righ
t"), this._deletePaletteColors.bind(this, colorIndex, true)); |
| 423 } |
| 424 contextMenu.appendItem(WebInspector.UIString("Clear palette"), this._del
etePaletteColors.bind(this, -1, true)); |
340 contextMenu.show(); | 425 contextMenu.show(); |
341 }, | 426 }, |
342 | 427 |
343 /** | 428 /** |
344 * @param {number=} colorIndex | 429 * @param {number} colorIndex |
| 430 * @param {boolean} toRight |
345 */ | 431 */ |
346 _deletePaletteColor: function(colorIndex) | 432 _deletePaletteColors: function(colorIndex, toRight) |
347 { | 433 { |
348 var palette = this._customPaletteSetting.get(); | 434 var palette = this._customPaletteSetting.get(); |
349 if (colorIndex !== undefined) | 435 if (toRight) |
| 436 palette.colors.splice(colorIndex + 1, palette.colors.length - colorI
ndex - 1); |
| 437 else |
350 palette.colors.splice(colorIndex, 1); | 438 palette.colors.splice(colorIndex, 1); |
351 else | |
352 palette.colors = []; | |
353 this._customPaletteSetting.set(palette); | 439 this._customPaletteSetting.set(palette); |
354 this._showPalette(this._customPaletteSetting.get(), false); | 440 this._showPalette(this._customPaletteSetting.get(), false); |
355 }, | 441 }, |
356 | 442 |
357 /** | 443 /** |
358 * @param {!WebInspector.Color} color | 444 * @param {!WebInspector.Color} color |
359 * @param {string} colorFormat | 445 * @param {string} colorFormat |
360 */ | 446 */ |
361 setColor: function(color, colorFormat) | 447 setColor: function(color, colorFormat) |
362 { | 448 { |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 "#8BC34A", | 894 "#8BC34A", |
809 "#CDDC39", | 895 "#CDDC39", |
810 "#FFEB3B", | 896 "#FFEB3B", |
811 "#FFC107", | 897 "#FFC107", |
812 "#FF9800", | 898 "#FF9800", |
813 "#FF5722", | 899 "#FF5722", |
814 "#795548", | 900 "#795548", |
815 "#9E9E9E", | 901 "#9E9E9E", |
816 "#607D8B" | 902 "#607D8B" |
817 ]}; | 903 ]}; |
OLD | NEW |