@babylonjs/gui 7.3.0 → 7.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. package/2D/advancedDynamicTexture.js.map +1 -1
  2. package/2D/controls/button.js.map +1 -1
  3. package/2D/controls/checkbox.js.map +1 -1
  4. package/2D/controls/colorpicker.js.map +1 -1
  5. package/2D/controls/container.js.map +1 -1
  6. package/2D/controls/control.d.ts +2 -1
  7. package/2D/controls/control.js +5 -2
  8. package/2D/controls/control.js.map +1 -1
  9. package/2D/controls/displayGrid.js.map +1 -1
  10. package/2D/controls/ellipse.js.map +1 -1
  11. package/2D/controls/focusableButton.js.map +1 -1
  12. package/2D/controls/gradient/LinearGradient.js.map +1 -1
  13. package/2D/controls/gradient/RadialGradient.js.map +1 -1
  14. package/2D/controls/grid.js.map +1 -1
  15. package/2D/controls/image.js.map +1 -1
  16. package/2D/controls/inputPassword.js.map +1 -1
  17. package/2D/controls/inputText.js.map +1 -1
  18. package/2D/controls/inputTextArea.js.map +1 -1
  19. package/2D/controls/line.js.map +1 -1
  20. package/2D/controls/multiLine.js.map +1 -1
  21. package/2D/controls/radioButton.js.map +1 -1
  22. package/2D/controls/rectangle.js.map +1 -1
  23. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  24. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  25. package/2D/controls/selector.js.map +1 -1
  26. package/2D/controls/sliders/baseSlider.js.map +1 -1
  27. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  28. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  29. package/2D/controls/sliders/scrollBar.js.map +1 -1
  30. package/2D/controls/sliders/slider.js.map +1 -1
  31. package/2D/controls/stackPanel.js.map +1 -1
  32. package/2D/controls/textBlock.js.map +1 -1
  33. package/2D/controls/toggleButton.js.map +1 -1
  34. package/2D/controls/virtualKeyboard.js.map +1 -1
  35. package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -1
  36. package/3D/controls/abstractButton3D.js.map +1 -1
  37. package/3D/controls/button3D.js.map +1 -1
  38. package/3D/controls/container3D.js.map +1 -1
  39. package/3D/controls/handMenu.js.map +1 -1
  40. package/3D/controls/holographicBackplate.js.map +1 -1
  41. package/3D/controls/holographicButton.js.map +1 -1
  42. package/3D/controls/holographicSlate.js.map +1 -1
  43. package/3D/controls/meshButton3D.js.map +1 -1
  44. package/3D/controls/nearMenu.js.map +1 -1
  45. package/3D/controls/scatterPanel.js.map +1 -1
  46. package/3D/controls/slider3D.js.map +1 -1
  47. package/3D/controls/stackPanel3D.js.map +1 -1
  48. package/3D/controls/touchButton3D.js.map +1 -1
  49. package/3D/controls/touchHolographicButton.js.map +1 -1
  50. package/3D/controls/touchHolographicMenu.js.map +1 -1
  51. package/3D/controls/touchMeshButton3D.js.map +1 -1
  52. package/3D/controls/volumeBasedPanel.js.map +1 -1
  53. package/3D/gizmos/slateGizmo.js.map +1 -1
  54. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  55. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  56. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  57. package/3D/materials/handle/handleMaterial.js.map +1 -1
  58. package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -1
  59. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  60. package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -1
  61. package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -1
  62. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  63. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  64. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"colorpicker.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/colorpicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText\";\r\nimport { Rectangle } from \"./rectangle\";\r\nimport { Button } from \"./button\";\r\nimport { Grid } from \"./grid\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { TextBlock } from \"../controls/textBlock\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvas, ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/** Class used to create color pickers */\r\nexport class ColorPicker extends Control {\r\n private static _Epsilon = 0.000001;\r\n private _colorWheelCanvas: ICanvas;\r\n\r\n private _value: Color3 = Color3.Red();\r\n private _tmpColor = new Color3();\r\n\r\n private _pointerStartedOnSquare = false;\r\n private _pointerStartedOnWheel = false;\r\n\r\n private _squareLeft = 0;\r\n private _squareTop = 0;\r\n private _squareSize = 0;\r\n\r\n private _h = 360;\r\n private _s = 1;\r\n private _v = 1;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n /**\r\n * Observable raised when the value changes\r\n */\r\n public onValueChangedObservable = new Observable<Color3>();\r\n\r\n /** Gets or sets the color of the color picker */\r\n @serialize()\r\n public get value(): Color3 {\r\n return this._value;\r\n }\r\n\r\n public set value(value: Color3) {\r\n if (this._value.equals(value)) {\r\n return;\r\n }\r\n\r\n this._value.copyFrom(value);\r\n\r\n this._value.toHSVToRef(this._tmpColor);\r\n\r\n this._h = this._tmpColor.r;\r\n this._s = Math.max(this._tmpColor.g, 0.00001);\r\n this._v = Math.max(this._tmpColor.b, 0.00001);\r\n\r\n this._markAsDirty();\r\n\r\n if (this._value.r <= ColorPicker._Epsilon) {\r\n this._value.r = 0;\r\n }\r\n\r\n if (this._value.g <= ColorPicker._Epsilon) {\r\n this._value.g = 0;\r\n }\r\n\r\n if (this._value.b <= ColorPicker._Epsilon) {\r\n this._value.b = 0;\r\n }\r\n\r\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.r = 1.0;\r\n }\r\n\r\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.g = 1.0;\r\n }\r\n\r\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.b = 1.0;\r\n }\r\n\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n /**\r\n * Gets or sets control width\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n if (this._width.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._width.fromString(value);\r\n }\r\n this._height.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets control height\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public get height(): string | number {\r\n return this._height.toString(this._host);\r\n }\r\n\r\n /** Gets or sets control height */\r\n public set height(value: string | number) {\r\n if (this._height.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._height.fromString(value)) {\r\n if (this._height.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._height.fromString(value);\r\n }\r\n this._width.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets control size */\r\n @serialize()\r\n public get size(): string | number {\r\n return this.width;\r\n }\r\n\r\n public set size(value: string | number) {\r\n this.width = value;\r\n }\r\n\r\n /**\r\n * Creates a new ColorPicker\r\n * @param name defines the control name\r\n */\r\n constructor(public name?: string) {\r\n super(name);\r\n this.value = new Color3(0.88, 0.1, 0.1);\r\n this.size = \"200px\";\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"ColorPicker\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _preMeasure(parentMeasure: Measure): void {\r\n if (parentMeasure.width < parentMeasure.height) {\r\n this._currentMeasure.height = parentMeasure.width;\r\n } else {\r\n this._currentMeasure.width = parentMeasure.height;\r\n }\r\n }\r\n\r\n private _updateSquareProps(): void {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const innerDiameter = (radius - wheelThickness) * 2;\r\n const squareSize = innerDiameter / Math.sqrt(2);\r\n const offset = radius - squareSize * 0.5;\r\n\r\n this._squareLeft = this._currentMeasure.left + offset;\r\n this._squareTop = this._currentMeasure.top + offset;\r\n this._squareSize = squareSize;\r\n }\r\n\r\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\r\n const lgh = context.createLinearGradient(left, top, width + left, top);\r\n lgh.addColorStop(0, \"#fff\");\r\n lgh.addColorStop(1, \"hsl(\" + hueValue + \", 100%, 50%)\");\r\n\r\n context.fillStyle = lgh;\r\n context.fillRect(left, top, width, height);\r\n\r\n const lgv = context.createLinearGradient(left, top, left, height + top);\r\n lgv.addColorStop(0, \"rgba(0,0,0,0)\");\r\n lgv.addColorStop(1, \"#000\");\r\n\r\n context.fillStyle = lgv;\r\n context.fillRect(left, top, width, height);\r\n }\r\n\r\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#333333\";\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff\";\r\n context.stroke();\r\n }\r\n\r\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\r\n // Shoudl abstract platform instead of using LastCreatedEngine\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(radius * 2, radius * 2);\r\n const context = canvas.getContext(\"2d\");\r\n const image = context.getImageData(0, 0, radius * 2, radius * 2);\r\n const data = image.data;\r\n\r\n const color = this._tmpColor;\r\n const maxDistSq = radius * radius;\r\n const innerRadius = radius - thickness;\r\n const minDistSq = innerRadius * innerRadius;\r\n\r\n for (let x = -radius; x < radius; x++) {\r\n for (let y = -radius; y < radius; y++) {\r\n const distSq = x * x + y * y;\r\n\r\n if (distSq > maxDistSq || distSq < minDistSq) {\r\n continue;\r\n }\r\n\r\n const dist = Math.sqrt(distSq);\r\n const ang = Math.atan2(y, x);\r\n\r\n Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);\r\n\r\n const index = (x + radius + (y + radius) * 2 * radius) * 4;\r\n\r\n data[index] = color.r * 255;\r\n data[index + 1] = color.g * 255;\r\n data[index + 2] = color.b * 255;\r\n let alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n //apply less alpha to bigger color pickers\r\n let alphaAmount = 0.2;\r\n const maxAlpha = 0.2;\r\n const minAlpha = 0.04;\r\n const lowerRadius = 50;\r\n const upperRadius = 150;\r\n\r\n if (radius < lowerRadius) {\r\n alphaAmount = maxAlpha;\r\n } else if (radius > upperRadius) {\r\n alphaAmount = minAlpha;\r\n } else {\r\n alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;\r\n }\r\n\r\n alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n if (alphaRatio < alphaAmount) {\r\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\r\n } else if (alphaRatio > 1 - alphaAmount) {\r\n data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);\r\n } else {\r\n data[index + 3] = 255;\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(image, 0, 0);\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const left = this._currentMeasure.left;\r\n const top = this._currentMeasure.top;\r\n\r\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\r\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\r\n }\r\n\r\n this._updateSquareProps();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n\r\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\r\n }\r\n\r\n context.drawImage(this._colorWheelCanvas, left, top);\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);\r\n\r\n let cx = this._squareLeft + this._squareSize * this._s;\r\n let cy = this._squareTop + this._squareSize * (1 - this._v);\r\n\r\n this._drawCircle(cx, cy, radius * 0.04, context);\r\n\r\n const dist = radius - wheelThickness * 0.5;\r\n cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;\r\n cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;\r\n this._drawCircle(cx, cy, wheelThickness * 0.35, context);\r\n\r\n context.restore();\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n private _updateValueFromPointer(x: number, y: number): void {\r\n if (this._pointerStartedOnWheel) {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;\r\n } else if (this._pointerStartedOnSquare) {\r\n this._updateSquareProps();\r\n this._s = (x - this._squareLeft) / this._squareSize;\r\n this._v = 1 - (y - this._squareTop) / this._squareSize;\r\n this._s = Math.min(this._s, 1);\r\n this._s = Math.max(this._s, ColorPicker._Epsilon);\r\n this._v = Math.min(this._v, 1);\r\n this._v = Math.max(this._v, ColorPicker._Epsilon);\r\n }\r\n\r\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\r\n\r\n this.value = this._tmpColor;\r\n }\r\n\r\n private _isPointOnSquare(x: number, y: number): boolean {\r\n this._updateSquareProps();\r\n\r\n const left = this._squareLeft;\r\n const top = this._squareTop;\r\n const size = this._squareSize;\r\n\r\n if (x >= left && x <= left + size && y >= top && y <= top + size) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _isPointOnWheel(x: number, y: number): boolean {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n const wheelThickness = radius * 0.2;\r\n const innerRadius = radius - wheelThickness;\r\n const radiusSq = radius * radius;\r\n const innerRadiusSq = innerRadius * innerRadius;\r\n\r\n const dx = x - centerX;\r\n const dy = y - centerY;\r\n\r\n const distSq = dx * dx + dy * dy;\r\n\r\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._pointerIsDown = true;\r\n\r\n this._pointerStartedOnSquare = false;\r\n this._pointerStartedOnWheel = false;\r\n\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._isPointOnSquare(x, y)) {\r\n this._pointerStartedOnSquare = true;\r\n } else if (this._isPointOnWheel(x, y)) {\r\n this._pointerStartedOnWheel = true;\r\n }\r\n\r\n this._updateValueFromPointer(x, y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (!this.isReadOnly) {\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._pointerIsDown) {\r\n this._updateValueFromPointer(x, y);\r\n }\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n\r\n public _onCanvasBlur() {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n /**\r\n * This function expands the color picker by creating a color picker dialog with manual\r\n * color value input and the ability to save colors into an array to be used later in\r\n * subsequent launches of the dialogue.\r\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\r\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\r\n * @param options.pickerWidth\r\n * @param options.pickerHeight\r\n * @param options.headerHeight\r\n * @param options.lastColor\r\n * @param options.swatchLimit\r\n * @param options.numSwatchesPerLine\r\n * @param options.savedColors\r\n * @returns picked color as a hex string and the saved colors array as hex strings.\r\n */\r\n public static ShowPickerDialogAsync(\r\n advancedTexture: AdvancedDynamicTexture,\r\n options: {\r\n pickerWidth?: string;\r\n pickerHeight?: string;\r\n headerHeight?: string;\r\n lastColor?: string;\r\n swatchLimit?: number;\r\n numSwatchesPerLine?: number;\r\n savedColors?: Array<string>;\r\n }\r\n ): Promise<{\r\n savedColors?: string[];\r\n pickedColor: string;\r\n }> {\r\n return new Promise((resolve) => {\r\n // Default options\r\n options.pickerWidth = options.pickerWidth || \"640px\";\r\n options.pickerHeight = options.pickerHeight || \"400px\";\r\n options.headerHeight = options.headerHeight || \"35px\";\r\n options.lastColor = options.lastColor || \"#000000\";\r\n options.swatchLimit = options.swatchLimit || 20;\r\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\r\n\r\n // Window size settings\r\n const drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\r\n const rawSwatchSize: number = parseFloat(<string>options.pickerWidth) / options.numSwatchesPerLine;\r\n const gutterSize: number = Math.floor(rawSwatchSize * 0.25);\r\n const colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\r\n const swatchSize: number = Math.floor((parseFloat(<string>options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\r\n const drawerMaxSize: number = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);\r\n const containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\r\n\r\n // Button Colors\r\n const buttonColor: string = \"#c0c0c0\";\r\n const buttonBackgroundColor: string = \"#535353\";\r\n const buttonBackgroundHoverColor: string = \"#414141\";\r\n const buttonBackgroundClickColor: string = \"515151\";\r\n const buttonDisabledColor: string = \"#555555\";\r\n const buttonDisabledBackgroundColor: string = \"#454545\";\r\n const currentSwatchesOutlineColor: string = \"#404040\";\r\n const luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\r\n const luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\r\n const iconColorDark: string = \"#aaaaaa\";\r\n const iconColorLight: string = \"#ffffff\";\r\n\r\n // Button settings\r\n let buttonFontSize: number;\r\n let butEdit: Button;\r\n\r\n // Input Text Colors\r\n const inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\r\n const inputTextBackgroundColor: string = \"#454545\";\r\n const inputTextColor: string = \"#f0f0f0\";\r\n\r\n // This int is used for naming swatches and serves as the index for calling them from the list\r\n let swatchNumber: number;\r\n\r\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\r\n let swatchDrawer: Grid;\r\n let editSwatchMode: boolean = false;\r\n\r\n // Color InputText fields that will be updated upon value change\r\n let butSave: Button;\r\n let lastVal: string;\r\n let activeField: string;\r\n\r\n // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\r\n const dialogContainer: Grid = new Grid();\r\n dialogContainer.name = \"Dialog Container\";\r\n dialogContainer.width = options.pickerWidth;\r\n if (options.savedColors) {\r\n dialogContainer.height = containerSize;\r\n const topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\r\n dialogContainer.addRowDefinition(topRow, false);\r\n dialogContainer.addRowDefinition(1.0 - topRow, false);\r\n } else {\r\n dialogContainer.height = options.pickerHeight;\r\n dialogContainer.addRowDefinition(1.0, false);\r\n }\r\n advancedTexture.addControl(dialogContainer);\r\n\r\n // Swatch drawer which contains all saved color buttons\r\n if (options.savedColors) {\r\n swatchDrawer = new Grid();\r\n swatchDrawer.name = \"Swatch Drawer\";\r\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n swatchDrawer.background = buttonBackgroundColor;\r\n swatchDrawer.width = options.pickerWidth!;\r\n const initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\r\n let gutterCount: number;\r\n if (initialRows == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = initialRows + 1;\r\n }\r\n swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + \"px\";\r\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\r\n for (let i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n for (let i = 0; i < options.numSwatchesPerLine! * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addColumnDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addColumnDefinition(gutterSize, true);\r\n }\r\n }\r\n dialogContainer.addControl(swatchDrawer, 1, 0);\r\n }\r\n\r\n // Picker container\r\n const pickerPanel: Grid = new Grid();\r\n pickerPanel.name = \"Picker Panel\";\r\n pickerPanel.height = options.pickerHeight;\r\n const panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\r\n const pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\r\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\r\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\r\n dialogContainer.addControl(pickerPanel, 0, 0);\r\n\r\n // Picker container header\r\n const header: Rectangle = new Rectangle();\r\n header.name = \"Dialogue Header Bar\";\r\n header.background = \"#cccccc\";\r\n header.thickness = 0;\r\n pickerPanel.addControl(header, 0, 0);\r\n\r\n // Header close button\r\n const closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\r\n closeButton.fontFamily = \"coreglyphs\";\r\n const headerColor3: Color3 = Color3.FromHexString(header.background);\r\n const closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight!) * 0.6);\r\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\r\n closeButton.height = closeButton.width = options.headerHeight;\r\n closeButton.background = header.background;\r\n closeButton.thickness = 0;\r\n closeButton.pointerDownAnimation = () => {};\r\n closeButton.pointerUpAnimation = () => {\r\n closeButton.background = header.background;\r\n };\r\n closeButton.pointerEnterAnimation = () => {\r\n closeButton.color = header.background;\r\n closeButton.background = \"red\";\r\n };\r\n closeButton.pointerOutAnimation = () => {\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.background = header.background;\r\n };\r\n closeButton.onPointerClickObservable.add(() => {\r\n closePicker(currentSwatch.background);\r\n });\r\n pickerPanel.addControl(closeButton, 0, 0);\r\n\r\n // Dialog container body\r\n const dialogBody: Grid = new Grid();\r\n dialogBody.name = \"Dialogue Body\";\r\n dialogBody.background = buttonBackgroundColor;\r\n const dialogBodyCols: number[] = [0.4375, 0.5625];\r\n dialogBody.addRowDefinition(1.0, false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\r\n pickerPanel.addControl(dialogBody, 1, 0);\r\n\r\n // Picker grid\r\n const pickerGrid: Grid = new Grid();\r\n pickerGrid.name = \"Picker Grid\";\r\n pickerGrid.addRowDefinition(0.85, false);\r\n pickerGrid.addRowDefinition(0.15, false);\r\n dialogBody.addControl(pickerGrid, 0, 0);\r\n\r\n // Picker control\r\n const picker = new ColorPicker();\r\n picker.name = \"GUI Color Picker\";\r\n if (options.pickerHeight < options.pickerWidth) {\r\n picker.width = 0.89;\r\n } else {\r\n picker.height = 0.89;\r\n }\r\n picker.value = Color3.FromHexString(options.lastColor);\r\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n picker.onPointerDownObservable.add(() => {\r\n activeField = picker.name!;\r\n lastVal = \"\";\r\n editSwatches(false);\r\n });\r\n picker.onValueChangedObservable.add(function (value) {\r\n // value is a color3\r\n if (activeField == picker.name) {\r\n updateValues(value, picker.name);\r\n }\r\n });\r\n pickerGrid.addControl(picker, 0, 0);\r\n\r\n // Picker body right quarant\r\n const pickerBodyRight: Grid = new Grid();\r\n pickerBodyRight.name = \"Dialogue Right Half\";\r\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n const pickerBodyRightRows: number[] = [0.514, 0.486];\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\r\n dialogBody.addControl(pickerBodyRight, 1, 1);\r\n\r\n // Picker container swatches and buttons\r\n const pickerSwatchesButtons: Grid = new Grid();\r\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\r\n const pickerButtonsCol: number[] = [0.417, 0.583];\r\n pickerSwatchesButtons.addRowDefinition(1.0, false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\r\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\r\n\r\n // Picker Swatches quadrant\r\n const pickerSwatches: Grid = new Grid();\r\n pickerSwatches.name = \"New and Current Swatches\";\r\n const pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\r\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\r\n\r\n // Active swatches\r\n const activeSwatches: Grid = new Grid();\r\n activeSwatches.name = \"Active Swatches\";\r\n activeSwatches.width = 0.67;\r\n activeSwatches.addRowDefinition(0.5, false);\r\n activeSwatches.addRowDefinition(0.5, false);\r\n pickerSwatches.addControl(activeSwatches, 2, 0);\r\n\r\n const labelWidth: number = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);\r\n const labelHeight: number = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);\r\n\r\n let labelTextSize: number;\r\n if (options.pickerWidth > options.pickerHeight) {\r\n labelTextSize = labelHeight;\r\n } else {\r\n labelTextSize = labelWidth;\r\n }\r\n // New color swatch and previous color button\r\n const newText: TextBlock = new TextBlock();\r\n newText.text = \"new\";\r\n newText.name = \"New Color Label\";\r\n newText.color = buttonColor;\r\n newText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(newText, 1, 0);\r\n\r\n const newSwatch = new Rectangle();\r\n newSwatch.name = \"New Color Swatch\";\r\n newSwatch.background = options.lastColor;\r\n newSwatch.thickness = 0;\r\n activeSwatches.addControl(newSwatch, 0, 0);\r\n\r\n const currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\r\n currentSwatch.background = options.lastColor;\r\n currentSwatch.thickness = 0;\r\n currentSwatch.onPointerClickObservable.add(() => {\r\n const revertColor = Color3.FromHexString(currentSwatch.background);\r\n updateValues(revertColor, currentSwatch.name!);\r\n editSwatches(false);\r\n });\r\n currentSwatch.pointerDownAnimation = () => {};\r\n currentSwatch.pointerUpAnimation = () => {};\r\n currentSwatch.pointerEnterAnimation = () => {};\r\n currentSwatch.pointerOutAnimation = () => {};\r\n activeSwatches.addControl(currentSwatch, 1, 0);\r\n\r\n const swatchOutline: Rectangle = new Rectangle();\r\n swatchOutline.name = \"Swatch Outline\";\r\n swatchOutline.width = 0.67;\r\n swatchOutline.thickness = 2;\r\n swatchOutline.color = currentSwatchesOutlineColor;\r\n swatchOutline.isHitTestVisible = false;\r\n pickerSwatches.addControl(swatchOutline, 2, 0);\r\n\r\n const currentText: TextBlock = new TextBlock();\r\n currentText.name = \"Current Color Label\";\r\n currentText.text = \"current\";\r\n currentText.color = buttonColor;\r\n currentText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(currentText, 3, 0);\r\n\r\n // Buttons grid\r\n const buttonGrid: Grid = new Grid();\r\n buttonGrid.name = \"Button Grid\";\r\n buttonGrid.height = 0.8;\r\n const buttonGridRows: number = 1 / 3;\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\r\n\r\n // Determine pixel width and height for all buttons from overall panel dimensions\r\n const buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + \"px\";\r\n const buttonHeight =\r\n Math.floor(\r\n parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7\r\n ).toString() + \"px\";\r\n\r\n // Determine button type size\r\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\r\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\r\n } else {\r\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\r\n }\r\n\r\n // Panel Buttons\r\n const butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\r\n butOK.width = buttonWidth;\r\n butOK.height = buttonHeight;\r\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butOK.thickness = 2;\r\n butOK.color = buttonColor;\r\n butOK.fontSize = buttonFontSize;\r\n butOK.background = buttonBackgroundColor;\r\n butOK.onPointerEnterObservable.add(() => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n });\r\n butOK.onPointerOutObservable.add(() => {\r\n butOK.background = buttonBackgroundColor;\r\n });\r\n butOK.pointerDownAnimation = () => {\r\n butOK.background = buttonBackgroundClickColor;\r\n };\r\n butOK.pointerUpAnimation = () => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n };\r\n butOK.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(newSwatch.background);\r\n });\r\n buttonGrid.addControl(butOK, 0, 0);\r\n\r\n const butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\r\n butCancel.width = buttonWidth;\r\n butCancel.height = buttonHeight;\r\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butCancel.thickness = 2;\r\n butCancel.color = buttonColor;\r\n butCancel.fontSize = buttonFontSize;\r\n butCancel.background = buttonBackgroundColor;\r\n butCancel.onPointerEnterObservable.add(() => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n });\r\n butCancel.onPointerOutObservable.add(() => {\r\n butCancel.background = buttonBackgroundColor;\r\n });\r\n butCancel.pointerDownAnimation = () => {\r\n butCancel.background = buttonBackgroundClickColor;\r\n };\r\n butCancel.pointerUpAnimation = () => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n };\r\n butCancel.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(currentSwatch.background);\r\n });\r\n buttonGrid.addControl(butCancel, 1, 0);\r\n\r\n if (options.savedColors) {\r\n butSave = Button.CreateSimpleButton(\"butSave\", \"Save\");\r\n butSave.width = buttonWidth;\r\n butSave.height = buttonHeight;\r\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butSave.thickness = 2;\r\n butSave.fontSize = buttonFontSize;\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.color = buttonColor;\r\n butSave.background = buttonBackgroundColor;\r\n } else {\r\n disableButton(butSave, true);\r\n }\r\n butSave.onPointerEnterObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n });\r\n butSave.onPointerOutObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundColor;\r\n }\r\n }\r\n });\r\n butSave.pointerDownAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundClickColor;\r\n }\r\n }\r\n };\r\n butSave.pointerUpAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n };\r\n butSave.onPointerClickObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length == 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n updateSwatches(newSwatch.background, butSave);\r\n }\r\n editSwatches(false);\r\n }\r\n });\r\n if (options.savedColors.length > 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n buttonGrid.addControl(butSave, 2, 0);\r\n }\r\n\r\n // Picker color values input\r\n const pickerColorValues: Grid = new Grid();\r\n pickerColorValues.name = \"Dialog Lower Right\";\r\n pickerColorValues.addRowDefinition(0.02, false);\r\n pickerColorValues.addRowDefinition(0.63, false);\r\n pickerColorValues.addRowDefinition(0.21, false);\r\n pickerColorValues.addRowDefinition(0.14, false);\r\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\r\n\r\n // RGB values text boxes\r\n const currentColor = Color3.FromHexString(options.lastColor);\r\n const rgbValuesQuadrant: Grid = new Grid();\r\n rgbValuesQuadrant.name = \"RGB Values\";\r\n rgbValuesQuadrant.width = 0.82;\r\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\r\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\r\n\r\n for (let i = 0; i < inputFieldLabels.length; i++) {\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = inputFieldLabels[i];\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n rgbValuesQuadrant.addControl(labelText, i, 0);\r\n }\r\n\r\n // Input fields for RGB values\r\n const rValInt = new InputText();\r\n rValInt.width = 0.83;\r\n rValInt.height = 0.72;\r\n rValInt.name = \"rIntField\";\r\n rValInt.fontSize = buttonFontSize;\r\n rValInt.text = (currentColor.r * 255).toString();\r\n rValInt.color = inputTextColor;\r\n rValInt.background = inputTextBackgroundColor;\r\n rValInt.onFocusObservable.add(() => {\r\n activeField = rValInt.name!;\r\n lastVal = rValInt.text;\r\n editSwatches(false);\r\n });\r\n rValInt.onBlurObservable.add(() => {\r\n if (rValInt.text == \"\") {\r\n rValInt.text = \"0\";\r\n }\r\n updateInt(rValInt, \"r\");\r\n if (activeField == rValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValInt.onTextChangedObservable.add(() => {\r\n if (activeField == rValInt.name) {\r\n updateInt(rValInt, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\r\n\r\n const gValInt = new InputText();\r\n gValInt.width = 0.83;\r\n gValInt.height = 0.72;\r\n gValInt.name = \"gIntField\";\r\n gValInt.fontSize = buttonFontSize;\r\n gValInt.text = (currentColor.g * 255).toString();\r\n gValInt.color = inputTextColor;\r\n gValInt.background = inputTextBackgroundColor;\r\n gValInt.onFocusObservable.add(() => {\r\n activeField = gValInt.name!;\r\n lastVal = gValInt.text;\r\n editSwatches(false);\r\n });\r\n gValInt.onBlurObservable.add(() => {\r\n if (gValInt.text == \"\") {\r\n gValInt.text = \"0\";\r\n }\r\n updateInt(gValInt, \"g\");\r\n if (activeField == gValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValInt.onTextChangedObservable.add(() => {\r\n if (activeField == gValInt.name) {\r\n updateInt(gValInt, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\r\n\r\n const bValInt = new InputText();\r\n bValInt.width = 0.83;\r\n bValInt.height = 0.72;\r\n bValInt.name = \"bIntField\";\r\n bValInt.fontSize = buttonFontSize;\r\n bValInt.text = (currentColor.b * 255).toString();\r\n bValInt.color = inputTextColor;\r\n bValInt.background = inputTextBackgroundColor;\r\n bValInt.onFocusObservable.add(() => {\r\n activeField = bValInt.name!;\r\n lastVal = bValInt.text;\r\n editSwatches(false);\r\n });\r\n bValInt.onBlurObservable.add(() => {\r\n if (bValInt.text == \"\") {\r\n bValInt.text = \"0\";\r\n }\r\n updateInt(bValInt, \"b\");\r\n if (activeField == bValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValInt.onTextChangedObservable.add(() => {\r\n if (activeField == bValInt.name) {\r\n updateInt(bValInt, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\r\n\r\n const rValDec = new InputText();\r\n rValDec.width = 0.95;\r\n rValDec.height = 0.72;\r\n rValDec.name = \"rDecField\";\r\n rValDec.fontSize = buttonFontSize;\r\n rValDec.text = currentColor.r.toString();\r\n rValDec.color = inputTextColor;\r\n rValDec.background = inputTextBackgroundColor;\r\n rValDec.onFocusObservable.add(() => {\r\n activeField = rValDec.name!;\r\n lastVal = rValDec.text;\r\n editSwatches(false);\r\n });\r\n rValDec.onBlurObservable.add(() => {\r\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\r\n rValDec.text = \"0\";\r\n updateFloat(rValDec, \"r\");\r\n }\r\n if (activeField == rValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValDec.onTextChangedObservable.add(() => {\r\n if (activeField == rValDec.name) {\r\n updateFloat(rValDec, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\r\n\r\n const gValDec = new InputText();\r\n gValDec.width = 0.95;\r\n gValDec.height = 0.72;\r\n gValDec.name = \"gDecField\";\r\n gValDec.fontSize = buttonFontSize;\r\n gValDec.text = currentColor.g.toString();\r\n gValDec.color = inputTextColor;\r\n gValDec.background = inputTextBackgroundColor;\r\n gValDec.onFocusObservable.add(() => {\r\n activeField = gValDec.name!;\r\n lastVal = gValDec.text;\r\n editSwatches(false);\r\n });\r\n gValDec.onBlurObservable.add(() => {\r\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\r\n gValDec.text = \"0\";\r\n updateFloat(gValDec, \"g\");\r\n }\r\n if (activeField == gValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValDec.onTextChangedObservable.add(() => {\r\n if (activeField == gValDec.name) {\r\n updateFloat(gValDec, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\r\n\r\n const bValDec = new InputText();\r\n bValDec.width = 0.95;\r\n bValDec.height = 0.72;\r\n bValDec.name = \"bDecField\";\r\n bValDec.fontSize = buttonFontSize;\r\n bValDec.text = currentColor.b.toString();\r\n bValDec.color = inputTextColor;\r\n bValDec.background = inputTextBackgroundColor;\r\n bValDec.onFocusObservable.add(() => {\r\n activeField = bValDec.name!;\r\n lastVal = bValDec.text;\r\n editSwatches(false);\r\n });\r\n bValDec.onBlurObservable.add(() => {\r\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\r\n bValDec.text = \"0\";\r\n updateFloat(bValDec, \"b\");\r\n }\r\n if (activeField == bValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValDec.onTextChangedObservable.add(() => {\r\n if (activeField == bValDec.name) {\r\n updateFloat(bValDec, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\r\n\r\n // Hex value input\r\n const hexValueQuadrant: Grid = new Grid();\r\n hexValueQuadrant.name = \"Hex Value\";\r\n hexValueQuadrant.width = 0.82;\r\n hexValueQuadrant.addRowDefinition(1.0, false);\r\n hexValueQuadrant.addColumnDefinition(0.1, false);\r\n hexValueQuadrant.addColumnDefinition(0.9, false);\r\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\r\n\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = \"#\";\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n hexValueQuadrant.addControl(labelText, 0, 0);\r\n\r\n const hexVal = new InputText();\r\n hexVal.width = 0.96;\r\n hexVal.height = 0.72;\r\n hexVal.name = \"hexField\";\r\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n hexVal.fontSize = buttonFontSize;\r\n const minusPound = options.lastColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n hexVal.color = inputTextColor;\r\n hexVal.background = inputTextBackgroundColor;\r\n hexVal.onFocusObservable.add(() => {\r\n activeField = hexVal.name!;\r\n lastVal = hexVal.text;\r\n editSwatches(false);\r\n });\r\n hexVal.onBlurObservable.add(() => {\r\n if (hexVal.text.length == 3) {\r\n const val = hexVal.text.split(\"\");\r\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n if (hexVal.text == \"\") {\r\n hexVal.text = \"000000\";\r\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\r\n }\r\n if (activeField == hexVal.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n hexVal.onTextChangedObservable.add(() => {\r\n let newHexValue: string = hexVal.text;\r\n const checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\r\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\r\n hexVal.text = lastVal;\r\n } else {\r\n if (hexVal.text.length < 6) {\r\n const leadingZero: number = 6 - hexVal.text.length;\r\n for (let i = 0; i < leadingZero; i++) {\r\n newHexValue = \"0\" + newHexValue;\r\n }\r\n }\r\n if (hexVal.text.length == 3) {\r\n const val: string[] = hexVal.text.split(\"\");\r\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n newHexValue = \"#\" + newHexValue;\r\n if (activeField == hexVal.name) {\r\n lastVal = hexVal.text;\r\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\r\n }\r\n }\r\n });\r\n hexValueQuadrant.addControl(hexVal, 0, 1);\r\n\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n updateSwatches(\"\", butSave!);\r\n }\r\n\r\n /**\r\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\r\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\r\n * are will receive no update. This is to prevent the input from the user being overwritten.\r\n * @param value\r\n * @param inputField\r\n */\r\n function updateValues(value: Color3, inputField: string) {\r\n activeField = inputField;\r\n const pickedColor: string = value.toHexString();\r\n newSwatch.background = pickedColor;\r\n if (rValInt.name != activeField) {\r\n rValInt.text = Math.floor(value.r * 255).toString();\r\n }\r\n if (gValInt.name != activeField) {\r\n gValInt.text = Math.floor(value.g * 255).toString();\r\n }\r\n if (bValInt.name != activeField) {\r\n bValInt.text = Math.floor(value.b * 255).toString();\r\n }\r\n if (rValDec.name != activeField) {\r\n rValDec.text = value.r.toString();\r\n }\r\n if (gValDec.name != activeField) {\r\n gValDec.text = value.g.toString();\r\n }\r\n if (bValDec.name != activeField) {\r\n bValDec.text = value.b.toString();\r\n }\r\n if (hexVal.name != activeField) {\r\n const minusPound: string[] = pickedColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n }\r\n if (picker.name != activeField) {\r\n picker.value = value;\r\n }\r\n }\r\n\r\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateInt(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\") {\r\n if (Math.floor(parseInt(newValue)) < 0) {\r\n newValue = \"0\";\r\n } else if (Math.floor(parseInt(newValue)) > 255) {\r\n newValue = \"255\";\r\n } else if (isNaN(parseInt(newValue))) {\r\n newValue = \"0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\") {\r\n newValue = parseInt(newValue).toString();\r\n field.text = newValue;\r\n const newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateFloat(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9.]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n if (parseFloat(newValue) < 0.0) {\r\n newValue = \"0.0\";\r\n } else if (parseFloat(newValue) > 1.0) {\r\n newValue = \"1.0\";\r\n } else if (isNaN(parseFloat(newValue))) {\r\n newValue = \"0.0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n newValue = parseFloat(newValue).toString();\r\n field.text = newValue;\r\n } else {\r\n newValue = \"0.0\";\r\n }\r\n const newSwatchRGB = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\r\n }\r\n }\r\n }\r\n\r\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\r\n function deleteSwatch(index: number) {\r\n if (options.savedColors) {\r\n options.savedColors.splice(index, 1);\r\n }\r\n if (options.savedColors && options.savedColors.length == 0) {\r\n setEditButtonVisibility(false);\r\n editSwatchMode = false;\r\n }\r\n }\r\n\r\n // Creates and styles an individual swatch when updateSwatches is called.\r\n function createSwatch() {\r\n if (options.savedColors && options.savedColors[swatchNumber]) {\r\n let icon: string;\r\n if (editSwatchMode) {\r\n icon = \"b\";\r\n } else {\r\n icon = \"\";\r\n }\r\n const swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\r\n swatch.fontFamily = \"coreglyphs\";\r\n const swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\r\n const swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\r\n\r\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\r\n if (swatchLuminence > luminanceLimit) {\r\n swatch.color = iconColorDark;\r\n } else {\r\n swatch.color = iconColorLight;\r\n }\r\n swatch.fontSize = Math.floor(swatchSize * 0.7);\r\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n swatch.height = swatch.width = swatchSize.toString() + \"px\";\r\n swatch.background = options.savedColors[swatchNumber];\r\n swatch.thickness = 2;\r\n const metadata = swatchNumber;\r\n swatch.pointerDownAnimation = () => {\r\n swatch.thickness = 4;\r\n };\r\n swatch.pointerUpAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerEnterAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerOutAnimation = () => {\r\n swatch.thickness = 2;\r\n };\r\n swatch.onPointerClickObservable.add(() => {\r\n if (!editSwatchMode) {\r\n if (options.savedColors) {\r\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\r\n }\r\n } else {\r\n deleteSwatch(metadata);\r\n updateSwatches(\"\", butSave);\r\n }\r\n });\r\n return swatch;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Mode switch to render button text and close symbols on swatch controls\r\n function editSwatches(mode?: boolean) {\r\n if (mode !== undefined) {\r\n editSwatchMode = mode;\r\n }\r\n let thisButton: Button;\r\n if (editSwatchMode) {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"b\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Done\";\r\n }\r\n } else {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Edit\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\r\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\r\n * creates one swatch per color. It will also set the height of the drawer control based on how many\r\n * saved colors there are and how many can be stored per row.\r\n * @param color\r\n * @param button\r\n */\r\n function updateSwatches(color: string, button: Button) {\r\n if (options.savedColors) {\r\n if (color != \"\") {\r\n options.savedColors.push(color);\r\n }\r\n swatchNumber = 0;\r\n swatchDrawer.clearControls();\r\n const rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\r\n let gutterCount: number;\r\n if (rowCount == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = rowCount + 1;\r\n }\r\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\r\n const currentRows: number = swatchDrawer.rowCount;\r\n for (let i = 0; i < currentRows; i++) {\r\n swatchDrawer.removeRowDefinition(0);\r\n }\r\n for (let i = 0; i < rowCount + gutterCount; i++) {\r\n if (i % 2) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n }\r\n swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + \"px\";\r\n\r\n for (let y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\r\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\r\n let totalButtonsThisRow: number;\r\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\r\n totalButtonsThisRow = options.numSwatchesPerLine!;\r\n } else {\r\n totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine!;\r\n }\r\n const buttonIterations: number = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!);\r\n for (let x = 0, w = 1; x < buttonIterations; x++) {\r\n if (x > options.numSwatchesPerLine!) {\r\n continue;\r\n }\r\n const swatch: Button | null = createSwatch();\r\n if (swatch != null) {\r\n swatchDrawer.addControl(swatch, y, w);\r\n w += 2;\r\n swatchNumber++;\r\n } else {\r\n continue;\r\n }\r\n }\r\n }\r\n if (options.savedColors.length >= options.swatchLimit!) {\r\n disableButton(button, true);\r\n } else {\r\n disableButton(button, false);\r\n }\r\n }\r\n }\r\n\r\n // Shows or hides edit swatches button depending on if there are saved swatches\r\n function setEditButtonVisibility(enableButton: boolean) {\r\n if (enableButton) {\r\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\r\n butEdit.width = buttonWidth;\r\n butEdit.height = buttonHeight;\r\n butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + \"px\";\r\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\r\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\r\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n butEdit.thickness = 2;\r\n butEdit.color = buttonColor;\r\n butEdit.fontSize = buttonFontSize;\r\n butEdit.background = buttonBackgroundColor;\r\n butEdit.onPointerEnterObservable.add(() => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n });\r\n butEdit.onPointerOutObservable.add(() => {\r\n butEdit.background = buttonBackgroundColor;\r\n });\r\n butEdit.pointerDownAnimation = () => {\r\n butEdit.background = buttonBackgroundClickColor;\r\n };\r\n butEdit.pointerUpAnimation = () => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n };\r\n butEdit.onPointerClickObservable.add(() => {\r\n if (editSwatchMode) {\r\n editSwatchMode = false;\r\n } else {\r\n editSwatchMode = true;\r\n }\r\n editSwatches();\r\n });\r\n pickerGrid.addControl(butEdit, 1, 0);\r\n } else {\r\n pickerGrid.removeControl(butEdit);\r\n }\r\n }\r\n\r\n // Called when the user hits the limit of saved colors in the drawer.\r\n function disableButton(button: Button, disabled: boolean) {\r\n if (disabled) {\r\n button.color = buttonDisabledColor;\r\n button.background = buttonDisabledBackgroundColor;\r\n } else {\r\n button.color = buttonColor;\r\n button.background = buttonBackgroundColor;\r\n }\r\n }\r\n\r\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\r\n function closePicker(color: string) {\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n resolve({\r\n savedColors: options.savedColors,\r\n pickedColor: color,\r\n });\r\n } else {\r\n resolve({\r\n pickedColor: color,\r\n });\r\n }\r\n advancedTexture.removeControl(dialogContainer);\r\n }\r\n });\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);\r\n"]}
1
+ {"version":3,"file":"colorpicker.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/colorpicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText\";\r\nimport { Rectangle } from \"./rectangle\";\r\nimport { Button } from \"./button\";\r\nimport { Grid } from \"./grid\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { TextBlock } from \"../controls/textBlock\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvas, ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/** Class used to create color pickers */\r\nexport class ColorPicker extends Control {\r\n private static _Epsilon = 0.000001;\r\n private _colorWheelCanvas: ICanvas;\r\n\r\n private _value: Color3 = Color3.Red();\r\n private _tmpColor = new Color3();\r\n\r\n private _pointerStartedOnSquare = false;\r\n private _pointerStartedOnWheel = false;\r\n\r\n private _squareLeft = 0;\r\n private _squareTop = 0;\r\n private _squareSize = 0;\r\n\r\n private _h = 360;\r\n private _s = 1;\r\n private _v = 1;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n /**\r\n * Observable raised when the value changes\r\n */\r\n public onValueChangedObservable = new Observable<Color3>();\r\n\r\n /** Gets or sets the color of the color picker */\r\n @serialize()\r\n public get value(): Color3 {\r\n return this._value;\r\n }\r\n\r\n public set value(value: Color3) {\r\n if (this._value.equals(value)) {\r\n return;\r\n }\r\n\r\n this._value.copyFrom(value);\r\n\r\n this._value.toHSVToRef(this._tmpColor);\r\n\r\n this._h = this._tmpColor.r;\r\n this._s = Math.max(this._tmpColor.g, 0.00001);\r\n this._v = Math.max(this._tmpColor.b, 0.00001);\r\n\r\n this._markAsDirty();\r\n\r\n if (this._value.r <= ColorPicker._Epsilon) {\r\n this._value.r = 0;\r\n }\r\n\r\n if (this._value.g <= ColorPicker._Epsilon) {\r\n this._value.g = 0;\r\n }\r\n\r\n if (this._value.b <= ColorPicker._Epsilon) {\r\n this._value.b = 0;\r\n }\r\n\r\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.r = 1.0;\r\n }\r\n\r\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.g = 1.0;\r\n }\r\n\r\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.b = 1.0;\r\n }\r\n\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n /**\r\n * Gets or sets control width\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public override set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n if (this._width.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._width.fromString(value);\r\n }\r\n this._height.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets control height\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get height(): string | number {\r\n return this._height.toString(this._host);\r\n }\r\n\r\n /** Gets or sets control height */\r\n public override set height(value: string | number) {\r\n if (this._height.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._height.fromString(value)) {\r\n if (this._height.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._height.fromString(value);\r\n }\r\n this._width.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets control size */\r\n @serialize()\r\n public get size(): string | number {\r\n return this.width;\r\n }\r\n\r\n public set size(value: string | number) {\r\n this.width = value;\r\n }\r\n\r\n /**\r\n * Creates a new ColorPicker\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n this.value = new Color3(0.88, 0.1, 0.1);\r\n this.size = \"200px\";\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"ColorPicker\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _preMeasure(parentMeasure: Measure): void {\r\n if (parentMeasure.width < parentMeasure.height) {\r\n this._currentMeasure.height = parentMeasure.width;\r\n } else {\r\n this._currentMeasure.width = parentMeasure.height;\r\n }\r\n }\r\n\r\n private _updateSquareProps(): void {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const innerDiameter = (radius - wheelThickness) * 2;\r\n const squareSize = innerDiameter / Math.sqrt(2);\r\n const offset = radius - squareSize * 0.5;\r\n\r\n this._squareLeft = this._currentMeasure.left + offset;\r\n this._squareTop = this._currentMeasure.top + offset;\r\n this._squareSize = squareSize;\r\n }\r\n\r\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\r\n const lgh = context.createLinearGradient(left, top, width + left, top);\r\n lgh.addColorStop(0, \"#fff\");\r\n lgh.addColorStop(1, \"hsl(\" + hueValue + \", 100%, 50%)\");\r\n\r\n context.fillStyle = lgh;\r\n context.fillRect(left, top, width, height);\r\n\r\n const lgv = context.createLinearGradient(left, top, left, height + top);\r\n lgv.addColorStop(0, \"rgba(0,0,0,0)\");\r\n lgv.addColorStop(1, \"#000\");\r\n\r\n context.fillStyle = lgv;\r\n context.fillRect(left, top, width, height);\r\n }\r\n\r\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#333333\";\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff\";\r\n context.stroke();\r\n }\r\n\r\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\r\n // Shoudl abstract platform instead of using LastCreatedEngine\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(radius * 2, radius * 2);\r\n const context = canvas.getContext(\"2d\");\r\n const image = context.getImageData(0, 0, radius * 2, radius * 2);\r\n const data = image.data;\r\n\r\n const color = this._tmpColor;\r\n const maxDistSq = radius * radius;\r\n const innerRadius = radius - thickness;\r\n const minDistSq = innerRadius * innerRadius;\r\n\r\n for (let x = -radius; x < radius; x++) {\r\n for (let y = -radius; y < radius; y++) {\r\n const distSq = x * x + y * y;\r\n\r\n if (distSq > maxDistSq || distSq < minDistSq) {\r\n continue;\r\n }\r\n\r\n const dist = Math.sqrt(distSq);\r\n const ang = Math.atan2(y, x);\r\n\r\n Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);\r\n\r\n const index = (x + radius + (y + radius) * 2 * radius) * 4;\r\n\r\n data[index] = color.r * 255;\r\n data[index + 1] = color.g * 255;\r\n data[index + 2] = color.b * 255;\r\n let alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n //apply less alpha to bigger color pickers\r\n let alphaAmount = 0.2;\r\n const maxAlpha = 0.2;\r\n const minAlpha = 0.04;\r\n const lowerRadius = 50;\r\n const upperRadius = 150;\r\n\r\n if (radius < lowerRadius) {\r\n alphaAmount = maxAlpha;\r\n } else if (radius > upperRadius) {\r\n alphaAmount = minAlpha;\r\n } else {\r\n alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;\r\n }\r\n\r\n alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n if (alphaRatio < alphaAmount) {\r\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\r\n } else if (alphaRatio > 1 - alphaAmount) {\r\n data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);\r\n } else {\r\n data[index + 3] = 255;\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(image, 0, 0);\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const left = this._currentMeasure.left;\r\n const top = this._currentMeasure.top;\r\n\r\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\r\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\r\n }\r\n\r\n this._updateSquareProps();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n\r\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\r\n }\r\n\r\n context.drawImage(this._colorWheelCanvas, left, top);\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);\r\n\r\n let cx = this._squareLeft + this._squareSize * this._s;\r\n let cy = this._squareTop + this._squareSize * (1 - this._v);\r\n\r\n this._drawCircle(cx, cy, radius * 0.04, context);\r\n\r\n const dist = radius - wheelThickness * 0.5;\r\n cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;\r\n cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;\r\n this._drawCircle(cx, cy, wheelThickness * 0.35, context);\r\n\r\n context.restore();\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n private _updateValueFromPointer(x: number, y: number): void {\r\n if (this._pointerStartedOnWheel) {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;\r\n } else if (this._pointerStartedOnSquare) {\r\n this._updateSquareProps();\r\n this._s = (x - this._squareLeft) / this._squareSize;\r\n this._v = 1 - (y - this._squareTop) / this._squareSize;\r\n this._s = Math.min(this._s, 1);\r\n this._s = Math.max(this._s, ColorPicker._Epsilon);\r\n this._v = Math.min(this._v, 1);\r\n this._v = Math.max(this._v, ColorPicker._Epsilon);\r\n }\r\n\r\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\r\n\r\n this.value = this._tmpColor;\r\n }\r\n\r\n private _isPointOnSquare(x: number, y: number): boolean {\r\n this._updateSquareProps();\r\n\r\n const left = this._squareLeft;\r\n const top = this._squareTop;\r\n const size = this._squareSize;\r\n\r\n if (x >= left && x <= left + size && y >= top && y <= top + size) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _isPointOnWheel(x: number, y: number): boolean {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n const wheelThickness = radius * 0.2;\r\n const innerRadius = radius - wheelThickness;\r\n const radiusSq = radius * radius;\r\n const innerRadiusSq = innerRadius * innerRadius;\r\n\r\n const dx = x - centerX;\r\n const dy = y - centerY;\r\n\r\n const distSq = dx * dx + dy * dy;\r\n\r\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._pointerIsDown = true;\r\n\r\n this._pointerStartedOnSquare = false;\r\n this._pointerStartedOnWheel = false;\r\n\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._isPointOnSquare(x, y)) {\r\n this._pointerStartedOnSquare = true;\r\n } else if (this._isPointOnWheel(x, y)) {\r\n this._pointerStartedOnWheel = true;\r\n }\r\n\r\n this._updateValueFromPointer(x, y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (!this.isReadOnly) {\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._pointerIsDown) {\r\n this._updateValueFromPointer(x, y);\r\n }\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n\r\n public override _onCanvasBlur() {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n /**\r\n * This function expands the color picker by creating a color picker dialog with manual\r\n * color value input and the ability to save colors into an array to be used later in\r\n * subsequent launches of the dialogue.\r\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\r\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\r\n * @param options.pickerWidth\r\n * @param options.pickerHeight\r\n * @param options.headerHeight\r\n * @param options.lastColor\r\n * @param options.swatchLimit\r\n * @param options.numSwatchesPerLine\r\n * @param options.savedColors\r\n * @returns picked color as a hex string and the saved colors array as hex strings.\r\n */\r\n public static ShowPickerDialogAsync(\r\n advancedTexture: AdvancedDynamicTexture,\r\n options: {\r\n pickerWidth?: string;\r\n pickerHeight?: string;\r\n headerHeight?: string;\r\n lastColor?: string;\r\n swatchLimit?: number;\r\n numSwatchesPerLine?: number;\r\n savedColors?: Array<string>;\r\n }\r\n ): Promise<{\r\n savedColors?: string[];\r\n pickedColor: string;\r\n }> {\r\n return new Promise((resolve) => {\r\n // Default options\r\n options.pickerWidth = options.pickerWidth || \"640px\";\r\n options.pickerHeight = options.pickerHeight || \"400px\";\r\n options.headerHeight = options.headerHeight || \"35px\";\r\n options.lastColor = options.lastColor || \"#000000\";\r\n options.swatchLimit = options.swatchLimit || 20;\r\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\r\n\r\n // Window size settings\r\n const drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\r\n const rawSwatchSize: number = parseFloat(<string>options.pickerWidth) / options.numSwatchesPerLine;\r\n const gutterSize: number = Math.floor(rawSwatchSize * 0.25);\r\n const colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\r\n const swatchSize: number = Math.floor((parseFloat(<string>options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\r\n const drawerMaxSize: number = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);\r\n const containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\r\n\r\n // Button Colors\r\n const buttonColor: string = \"#c0c0c0\";\r\n const buttonBackgroundColor: string = \"#535353\";\r\n const buttonBackgroundHoverColor: string = \"#414141\";\r\n const buttonBackgroundClickColor: string = \"515151\";\r\n const buttonDisabledColor: string = \"#555555\";\r\n const buttonDisabledBackgroundColor: string = \"#454545\";\r\n const currentSwatchesOutlineColor: string = \"#404040\";\r\n const luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\r\n const luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\r\n const iconColorDark: string = \"#aaaaaa\";\r\n const iconColorLight: string = \"#ffffff\";\r\n\r\n // Button settings\r\n let buttonFontSize: number;\r\n let butEdit: Button;\r\n\r\n // Input Text Colors\r\n const inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\r\n const inputTextBackgroundColor: string = \"#454545\";\r\n const inputTextColor: string = \"#f0f0f0\";\r\n\r\n // This int is used for naming swatches and serves as the index for calling them from the list\r\n let swatchNumber: number;\r\n\r\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\r\n let swatchDrawer: Grid;\r\n let editSwatchMode: boolean = false;\r\n\r\n // Color InputText fields that will be updated upon value change\r\n let butSave: Button;\r\n let lastVal: string;\r\n let activeField: string;\r\n\r\n // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\r\n const dialogContainer: Grid = new Grid();\r\n dialogContainer.name = \"Dialog Container\";\r\n dialogContainer.width = options.pickerWidth;\r\n if (options.savedColors) {\r\n dialogContainer.height = containerSize;\r\n const topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\r\n dialogContainer.addRowDefinition(topRow, false);\r\n dialogContainer.addRowDefinition(1.0 - topRow, false);\r\n } else {\r\n dialogContainer.height = options.pickerHeight;\r\n dialogContainer.addRowDefinition(1.0, false);\r\n }\r\n advancedTexture.addControl(dialogContainer);\r\n\r\n // Swatch drawer which contains all saved color buttons\r\n if (options.savedColors) {\r\n swatchDrawer = new Grid();\r\n swatchDrawer.name = \"Swatch Drawer\";\r\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n swatchDrawer.background = buttonBackgroundColor;\r\n swatchDrawer.width = options.pickerWidth!;\r\n const initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\r\n let gutterCount: number;\r\n if (initialRows == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = initialRows + 1;\r\n }\r\n swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + \"px\";\r\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\r\n for (let i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n for (let i = 0; i < options.numSwatchesPerLine! * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addColumnDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addColumnDefinition(gutterSize, true);\r\n }\r\n }\r\n dialogContainer.addControl(swatchDrawer, 1, 0);\r\n }\r\n\r\n // Picker container\r\n const pickerPanel: Grid = new Grid();\r\n pickerPanel.name = \"Picker Panel\";\r\n pickerPanel.height = options.pickerHeight;\r\n const panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\r\n const pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\r\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\r\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\r\n dialogContainer.addControl(pickerPanel, 0, 0);\r\n\r\n // Picker container header\r\n const header: Rectangle = new Rectangle();\r\n header.name = \"Dialogue Header Bar\";\r\n header.background = \"#cccccc\";\r\n header.thickness = 0;\r\n pickerPanel.addControl(header, 0, 0);\r\n\r\n // Header close button\r\n const closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\r\n closeButton.fontFamily = \"coreglyphs\";\r\n const headerColor3: Color3 = Color3.FromHexString(header.background);\r\n const closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight!) * 0.6);\r\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\r\n closeButton.height = closeButton.width = options.headerHeight;\r\n closeButton.background = header.background;\r\n closeButton.thickness = 0;\r\n closeButton.pointerDownAnimation = () => {};\r\n closeButton.pointerUpAnimation = () => {\r\n closeButton.background = header.background;\r\n };\r\n closeButton.pointerEnterAnimation = () => {\r\n closeButton.color = header.background;\r\n closeButton.background = \"red\";\r\n };\r\n closeButton.pointerOutAnimation = () => {\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.background = header.background;\r\n };\r\n closeButton.onPointerClickObservable.add(() => {\r\n closePicker(currentSwatch.background);\r\n });\r\n pickerPanel.addControl(closeButton, 0, 0);\r\n\r\n // Dialog container body\r\n const dialogBody: Grid = new Grid();\r\n dialogBody.name = \"Dialogue Body\";\r\n dialogBody.background = buttonBackgroundColor;\r\n const dialogBodyCols: number[] = [0.4375, 0.5625];\r\n dialogBody.addRowDefinition(1.0, false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\r\n pickerPanel.addControl(dialogBody, 1, 0);\r\n\r\n // Picker grid\r\n const pickerGrid: Grid = new Grid();\r\n pickerGrid.name = \"Picker Grid\";\r\n pickerGrid.addRowDefinition(0.85, false);\r\n pickerGrid.addRowDefinition(0.15, false);\r\n dialogBody.addControl(pickerGrid, 0, 0);\r\n\r\n // Picker control\r\n const picker = new ColorPicker();\r\n picker.name = \"GUI Color Picker\";\r\n if (options.pickerHeight < options.pickerWidth) {\r\n picker.width = 0.89;\r\n } else {\r\n picker.height = 0.89;\r\n }\r\n picker.value = Color3.FromHexString(options.lastColor);\r\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n picker.onPointerDownObservable.add(() => {\r\n activeField = picker.name!;\r\n lastVal = \"\";\r\n editSwatches(false);\r\n });\r\n picker.onValueChangedObservable.add(function (value) {\r\n // value is a color3\r\n if (activeField == picker.name) {\r\n updateValues(value, picker.name);\r\n }\r\n });\r\n pickerGrid.addControl(picker, 0, 0);\r\n\r\n // Picker body right quarant\r\n const pickerBodyRight: Grid = new Grid();\r\n pickerBodyRight.name = \"Dialogue Right Half\";\r\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n const pickerBodyRightRows: number[] = [0.514, 0.486];\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\r\n dialogBody.addControl(pickerBodyRight, 1, 1);\r\n\r\n // Picker container swatches and buttons\r\n const pickerSwatchesButtons: Grid = new Grid();\r\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\r\n const pickerButtonsCol: number[] = [0.417, 0.583];\r\n pickerSwatchesButtons.addRowDefinition(1.0, false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\r\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\r\n\r\n // Picker Swatches quadrant\r\n const pickerSwatches: Grid = new Grid();\r\n pickerSwatches.name = \"New and Current Swatches\";\r\n const pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\r\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\r\n\r\n // Active swatches\r\n const activeSwatches: Grid = new Grid();\r\n activeSwatches.name = \"Active Swatches\";\r\n activeSwatches.width = 0.67;\r\n activeSwatches.addRowDefinition(0.5, false);\r\n activeSwatches.addRowDefinition(0.5, false);\r\n pickerSwatches.addControl(activeSwatches, 2, 0);\r\n\r\n const labelWidth: number = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);\r\n const labelHeight: number = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);\r\n\r\n let labelTextSize: number;\r\n if (options.pickerWidth > options.pickerHeight) {\r\n labelTextSize = labelHeight;\r\n } else {\r\n labelTextSize = labelWidth;\r\n }\r\n // New color swatch and previous color button\r\n const newText: TextBlock = new TextBlock();\r\n newText.text = \"new\";\r\n newText.name = \"New Color Label\";\r\n newText.color = buttonColor;\r\n newText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(newText, 1, 0);\r\n\r\n const newSwatch = new Rectangle();\r\n newSwatch.name = \"New Color Swatch\";\r\n newSwatch.background = options.lastColor;\r\n newSwatch.thickness = 0;\r\n activeSwatches.addControl(newSwatch, 0, 0);\r\n\r\n const currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\r\n currentSwatch.background = options.lastColor;\r\n currentSwatch.thickness = 0;\r\n currentSwatch.onPointerClickObservable.add(() => {\r\n const revertColor = Color3.FromHexString(currentSwatch.background);\r\n updateValues(revertColor, currentSwatch.name!);\r\n editSwatches(false);\r\n });\r\n currentSwatch.pointerDownAnimation = () => {};\r\n currentSwatch.pointerUpAnimation = () => {};\r\n currentSwatch.pointerEnterAnimation = () => {};\r\n currentSwatch.pointerOutAnimation = () => {};\r\n activeSwatches.addControl(currentSwatch, 1, 0);\r\n\r\n const swatchOutline: Rectangle = new Rectangle();\r\n swatchOutline.name = \"Swatch Outline\";\r\n swatchOutline.width = 0.67;\r\n swatchOutline.thickness = 2;\r\n swatchOutline.color = currentSwatchesOutlineColor;\r\n swatchOutline.isHitTestVisible = false;\r\n pickerSwatches.addControl(swatchOutline, 2, 0);\r\n\r\n const currentText: TextBlock = new TextBlock();\r\n currentText.name = \"Current Color Label\";\r\n currentText.text = \"current\";\r\n currentText.color = buttonColor;\r\n currentText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(currentText, 3, 0);\r\n\r\n // Buttons grid\r\n const buttonGrid: Grid = new Grid();\r\n buttonGrid.name = \"Button Grid\";\r\n buttonGrid.height = 0.8;\r\n const buttonGridRows: number = 1 / 3;\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\r\n\r\n // Determine pixel width and height for all buttons from overall panel dimensions\r\n const buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + \"px\";\r\n const buttonHeight =\r\n Math.floor(\r\n parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7\r\n ).toString() + \"px\";\r\n\r\n // Determine button type size\r\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\r\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\r\n } else {\r\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\r\n }\r\n\r\n // Panel Buttons\r\n const butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\r\n butOK.width = buttonWidth;\r\n butOK.height = buttonHeight;\r\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butOK.thickness = 2;\r\n butOK.color = buttonColor;\r\n butOK.fontSize = buttonFontSize;\r\n butOK.background = buttonBackgroundColor;\r\n butOK.onPointerEnterObservable.add(() => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n });\r\n butOK.onPointerOutObservable.add(() => {\r\n butOK.background = buttonBackgroundColor;\r\n });\r\n butOK.pointerDownAnimation = () => {\r\n butOK.background = buttonBackgroundClickColor;\r\n };\r\n butOK.pointerUpAnimation = () => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n };\r\n butOK.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(newSwatch.background);\r\n });\r\n buttonGrid.addControl(butOK, 0, 0);\r\n\r\n const butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\r\n butCancel.width = buttonWidth;\r\n butCancel.height = buttonHeight;\r\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butCancel.thickness = 2;\r\n butCancel.color = buttonColor;\r\n butCancel.fontSize = buttonFontSize;\r\n butCancel.background = buttonBackgroundColor;\r\n butCancel.onPointerEnterObservable.add(() => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n });\r\n butCancel.onPointerOutObservable.add(() => {\r\n butCancel.background = buttonBackgroundColor;\r\n });\r\n butCancel.pointerDownAnimation = () => {\r\n butCancel.background = buttonBackgroundClickColor;\r\n };\r\n butCancel.pointerUpAnimation = () => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n };\r\n butCancel.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(currentSwatch.background);\r\n });\r\n buttonGrid.addControl(butCancel, 1, 0);\r\n\r\n if (options.savedColors) {\r\n butSave = Button.CreateSimpleButton(\"butSave\", \"Save\");\r\n butSave.width = buttonWidth;\r\n butSave.height = buttonHeight;\r\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butSave.thickness = 2;\r\n butSave.fontSize = buttonFontSize;\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.color = buttonColor;\r\n butSave.background = buttonBackgroundColor;\r\n } else {\r\n disableButton(butSave, true);\r\n }\r\n butSave.onPointerEnterObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n });\r\n butSave.onPointerOutObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundColor;\r\n }\r\n }\r\n });\r\n butSave.pointerDownAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundClickColor;\r\n }\r\n }\r\n };\r\n butSave.pointerUpAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n };\r\n butSave.onPointerClickObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length == 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n updateSwatches(newSwatch.background, butSave);\r\n }\r\n editSwatches(false);\r\n }\r\n });\r\n if (options.savedColors.length > 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n buttonGrid.addControl(butSave, 2, 0);\r\n }\r\n\r\n // Picker color values input\r\n const pickerColorValues: Grid = new Grid();\r\n pickerColorValues.name = \"Dialog Lower Right\";\r\n pickerColorValues.addRowDefinition(0.02, false);\r\n pickerColorValues.addRowDefinition(0.63, false);\r\n pickerColorValues.addRowDefinition(0.21, false);\r\n pickerColorValues.addRowDefinition(0.14, false);\r\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\r\n\r\n // RGB values text boxes\r\n const currentColor = Color3.FromHexString(options.lastColor);\r\n const rgbValuesQuadrant: Grid = new Grid();\r\n rgbValuesQuadrant.name = \"RGB Values\";\r\n rgbValuesQuadrant.width = 0.82;\r\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\r\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\r\n\r\n for (let i = 0; i < inputFieldLabels.length; i++) {\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = inputFieldLabels[i];\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n rgbValuesQuadrant.addControl(labelText, i, 0);\r\n }\r\n\r\n // Input fields for RGB values\r\n const rValInt = new InputText();\r\n rValInt.width = 0.83;\r\n rValInt.height = 0.72;\r\n rValInt.name = \"rIntField\";\r\n rValInt.fontSize = buttonFontSize;\r\n rValInt.text = (currentColor.r * 255).toString();\r\n rValInt.color = inputTextColor;\r\n rValInt.background = inputTextBackgroundColor;\r\n rValInt.onFocusObservable.add(() => {\r\n activeField = rValInt.name!;\r\n lastVal = rValInt.text;\r\n editSwatches(false);\r\n });\r\n rValInt.onBlurObservable.add(() => {\r\n if (rValInt.text == \"\") {\r\n rValInt.text = \"0\";\r\n }\r\n updateInt(rValInt, \"r\");\r\n if (activeField == rValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValInt.onTextChangedObservable.add(() => {\r\n if (activeField == rValInt.name) {\r\n updateInt(rValInt, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\r\n\r\n const gValInt = new InputText();\r\n gValInt.width = 0.83;\r\n gValInt.height = 0.72;\r\n gValInt.name = \"gIntField\";\r\n gValInt.fontSize = buttonFontSize;\r\n gValInt.text = (currentColor.g * 255).toString();\r\n gValInt.color = inputTextColor;\r\n gValInt.background = inputTextBackgroundColor;\r\n gValInt.onFocusObservable.add(() => {\r\n activeField = gValInt.name!;\r\n lastVal = gValInt.text;\r\n editSwatches(false);\r\n });\r\n gValInt.onBlurObservable.add(() => {\r\n if (gValInt.text == \"\") {\r\n gValInt.text = \"0\";\r\n }\r\n updateInt(gValInt, \"g\");\r\n if (activeField == gValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValInt.onTextChangedObservable.add(() => {\r\n if (activeField == gValInt.name) {\r\n updateInt(gValInt, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\r\n\r\n const bValInt = new InputText();\r\n bValInt.width = 0.83;\r\n bValInt.height = 0.72;\r\n bValInt.name = \"bIntField\";\r\n bValInt.fontSize = buttonFontSize;\r\n bValInt.text = (currentColor.b * 255).toString();\r\n bValInt.color = inputTextColor;\r\n bValInt.background = inputTextBackgroundColor;\r\n bValInt.onFocusObservable.add(() => {\r\n activeField = bValInt.name!;\r\n lastVal = bValInt.text;\r\n editSwatches(false);\r\n });\r\n bValInt.onBlurObservable.add(() => {\r\n if (bValInt.text == \"\") {\r\n bValInt.text = \"0\";\r\n }\r\n updateInt(bValInt, \"b\");\r\n if (activeField == bValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValInt.onTextChangedObservable.add(() => {\r\n if (activeField == bValInt.name) {\r\n updateInt(bValInt, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\r\n\r\n const rValDec = new InputText();\r\n rValDec.width = 0.95;\r\n rValDec.height = 0.72;\r\n rValDec.name = \"rDecField\";\r\n rValDec.fontSize = buttonFontSize;\r\n rValDec.text = currentColor.r.toString();\r\n rValDec.color = inputTextColor;\r\n rValDec.background = inputTextBackgroundColor;\r\n rValDec.onFocusObservable.add(() => {\r\n activeField = rValDec.name!;\r\n lastVal = rValDec.text;\r\n editSwatches(false);\r\n });\r\n rValDec.onBlurObservable.add(() => {\r\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\r\n rValDec.text = \"0\";\r\n updateFloat(rValDec, \"r\");\r\n }\r\n if (activeField == rValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValDec.onTextChangedObservable.add(() => {\r\n if (activeField == rValDec.name) {\r\n updateFloat(rValDec, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\r\n\r\n const gValDec = new InputText();\r\n gValDec.width = 0.95;\r\n gValDec.height = 0.72;\r\n gValDec.name = \"gDecField\";\r\n gValDec.fontSize = buttonFontSize;\r\n gValDec.text = currentColor.g.toString();\r\n gValDec.color = inputTextColor;\r\n gValDec.background = inputTextBackgroundColor;\r\n gValDec.onFocusObservable.add(() => {\r\n activeField = gValDec.name!;\r\n lastVal = gValDec.text;\r\n editSwatches(false);\r\n });\r\n gValDec.onBlurObservable.add(() => {\r\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\r\n gValDec.text = \"0\";\r\n updateFloat(gValDec, \"g\");\r\n }\r\n if (activeField == gValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValDec.onTextChangedObservable.add(() => {\r\n if (activeField == gValDec.name) {\r\n updateFloat(gValDec, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\r\n\r\n const bValDec = new InputText();\r\n bValDec.width = 0.95;\r\n bValDec.height = 0.72;\r\n bValDec.name = \"bDecField\";\r\n bValDec.fontSize = buttonFontSize;\r\n bValDec.text = currentColor.b.toString();\r\n bValDec.color = inputTextColor;\r\n bValDec.background = inputTextBackgroundColor;\r\n bValDec.onFocusObservable.add(() => {\r\n activeField = bValDec.name!;\r\n lastVal = bValDec.text;\r\n editSwatches(false);\r\n });\r\n bValDec.onBlurObservable.add(() => {\r\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\r\n bValDec.text = \"0\";\r\n updateFloat(bValDec, \"b\");\r\n }\r\n if (activeField == bValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValDec.onTextChangedObservable.add(() => {\r\n if (activeField == bValDec.name) {\r\n updateFloat(bValDec, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\r\n\r\n // Hex value input\r\n const hexValueQuadrant: Grid = new Grid();\r\n hexValueQuadrant.name = \"Hex Value\";\r\n hexValueQuadrant.width = 0.82;\r\n hexValueQuadrant.addRowDefinition(1.0, false);\r\n hexValueQuadrant.addColumnDefinition(0.1, false);\r\n hexValueQuadrant.addColumnDefinition(0.9, false);\r\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\r\n\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = \"#\";\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n hexValueQuadrant.addControl(labelText, 0, 0);\r\n\r\n const hexVal = new InputText();\r\n hexVal.width = 0.96;\r\n hexVal.height = 0.72;\r\n hexVal.name = \"hexField\";\r\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n hexVal.fontSize = buttonFontSize;\r\n const minusPound = options.lastColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n hexVal.color = inputTextColor;\r\n hexVal.background = inputTextBackgroundColor;\r\n hexVal.onFocusObservable.add(() => {\r\n activeField = hexVal.name!;\r\n lastVal = hexVal.text;\r\n editSwatches(false);\r\n });\r\n hexVal.onBlurObservable.add(() => {\r\n if (hexVal.text.length == 3) {\r\n const val = hexVal.text.split(\"\");\r\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n if (hexVal.text == \"\") {\r\n hexVal.text = \"000000\";\r\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\r\n }\r\n if (activeField == hexVal.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n hexVal.onTextChangedObservable.add(() => {\r\n let newHexValue: string = hexVal.text;\r\n const checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\r\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\r\n hexVal.text = lastVal;\r\n } else {\r\n if (hexVal.text.length < 6) {\r\n const leadingZero: number = 6 - hexVal.text.length;\r\n for (let i = 0; i < leadingZero; i++) {\r\n newHexValue = \"0\" + newHexValue;\r\n }\r\n }\r\n if (hexVal.text.length == 3) {\r\n const val: string[] = hexVal.text.split(\"\");\r\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n newHexValue = \"#\" + newHexValue;\r\n if (activeField == hexVal.name) {\r\n lastVal = hexVal.text;\r\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\r\n }\r\n }\r\n });\r\n hexValueQuadrant.addControl(hexVal, 0, 1);\r\n\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n updateSwatches(\"\", butSave!);\r\n }\r\n\r\n /**\r\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\r\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\r\n * are will receive no update. This is to prevent the input from the user being overwritten.\r\n * @param value\r\n * @param inputField\r\n */\r\n function updateValues(value: Color3, inputField: string) {\r\n activeField = inputField;\r\n const pickedColor: string = value.toHexString();\r\n newSwatch.background = pickedColor;\r\n if (rValInt.name != activeField) {\r\n rValInt.text = Math.floor(value.r * 255).toString();\r\n }\r\n if (gValInt.name != activeField) {\r\n gValInt.text = Math.floor(value.g * 255).toString();\r\n }\r\n if (bValInt.name != activeField) {\r\n bValInt.text = Math.floor(value.b * 255).toString();\r\n }\r\n if (rValDec.name != activeField) {\r\n rValDec.text = value.r.toString();\r\n }\r\n if (gValDec.name != activeField) {\r\n gValDec.text = value.g.toString();\r\n }\r\n if (bValDec.name != activeField) {\r\n bValDec.text = value.b.toString();\r\n }\r\n if (hexVal.name != activeField) {\r\n const minusPound: string[] = pickedColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n }\r\n if (picker.name != activeField) {\r\n picker.value = value;\r\n }\r\n }\r\n\r\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateInt(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\") {\r\n if (Math.floor(parseInt(newValue)) < 0) {\r\n newValue = \"0\";\r\n } else if (Math.floor(parseInt(newValue)) > 255) {\r\n newValue = \"255\";\r\n } else if (isNaN(parseInt(newValue))) {\r\n newValue = \"0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\") {\r\n newValue = parseInt(newValue).toString();\r\n field.text = newValue;\r\n const newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateFloat(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9.]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n if (parseFloat(newValue) < 0.0) {\r\n newValue = \"0.0\";\r\n } else if (parseFloat(newValue) > 1.0) {\r\n newValue = \"1.0\";\r\n } else if (isNaN(parseFloat(newValue))) {\r\n newValue = \"0.0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n newValue = parseFloat(newValue).toString();\r\n field.text = newValue;\r\n } else {\r\n newValue = \"0.0\";\r\n }\r\n const newSwatchRGB = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\r\n }\r\n }\r\n }\r\n\r\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\r\n function deleteSwatch(index: number) {\r\n if (options.savedColors) {\r\n options.savedColors.splice(index, 1);\r\n }\r\n if (options.savedColors && options.savedColors.length == 0) {\r\n setEditButtonVisibility(false);\r\n editSwatchMode = false;\r\n }\r\n }\r\n\r\n // Creates and styles an individual swatch when updateSwatches is called.\r\n function createSwatch() {\r\n if (options.savedColors && options.savedColors[swatchNumber]) {\r\n let icon: string;\r\n if (editSwatchMode) {\r\n icon = \"b\";\r\n } else {\r\n icon = \"\";\r\n }\r\n const swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\r\n swatch.fontFamily = \"coreglyphs\";\r\n const swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\r\n const swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\r\n\r\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\r\n if (swatchLuminence > luminanceLimit) {\r\n swatch.color = iconColorDark;\r\n } else {\r\n swatch.color = iconColorLight;\r\n }\r\n swatch.fontSize = Math.floor(swatchSize * 0.7);\r\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n swatch.height = swatch.width = swatchSize.toString() + \"px\";\r\n swatch.background = options.savedColors[swatchNumber];\r\n swatch.thickness = 2;\r\n const metadata = swatchNumber;\r\n swatch.pointerDownAnimation = () => {\r\n swatch.thickness = 4;\r\n };\r\n swatch.pointerUpAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerEnterAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerOutAnimation = () => {\r\n swatch.thickness = 2;\r\n };\r\n swatch.onPointerClickObservable.add(() => {\r\n if (!editSwatchMode) {\r\n if (options.savedColors) {\r\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\r\n }\r\n } else {\r\n deleteSwatch(metadata);\r\n updateSwatches(\"\", butSave);\r\n }\r\n });\r\n return swatch;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Mode switch to render button text and close symbols on swatch controls\r\n function editSwatches(mode?: boolean) {\r\n if (mode !== undefined) {\r\n editSwatchMode = mode;\r\n }\r\n let thisButton: Button;\r\n if (editSwatchMode) {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"b\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Done\";\r\n }\r\n } else {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Edit\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\r\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\r\n * creates one swatch per color. It will also set the height of the drawer control based on how many\r\n * saved colors there are and how many can be stored per row.\r\n * @param color\r\n * @param button\r\n */\r\n function updateSwatches(color: string, button: Button) {\r\n if (options.savedColors) {\r\n if (color != \"\") {\r\n options.savedColors.push(color);\r\n }\r\n swatchNumber = 0;\r\n swatchDrawer.clearControls();\r\n const rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\r\n let gutterCount: number;\r\n if (rowCount == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = rowCount + 1;\r\n }\r\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\r\n const currentRows: number = swatchDrawer.rowCount;\r\n for (let i = 0; i < currentRows; i++) {\r\n swatchDrawer.removeRowDefinition(0);\r\n }\r\n for (let i = 0; i < rowCount + gutterCount; i++) {\r\n if (i % 2) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n }\r\n swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + \"px\";\r\n\r\n for (let y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\r\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\r\n let totalButtonsThisRow: number;\r\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\r\n totalButtonsThisRow = options.numSwatchesPerLine!;\r\n } else {\r\n totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine!;\r\n }\r\n const buttonIterations: number = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!);\r\n for (let x = 0, w = 1; x < buttonIterations; x++) {\r\n if (x > options.numSwatchesPerLine!) {\r\n continue;\r\n }\r\n const swatch: Button | null = createSwatch();\r\n if (swatch != null) {\r\n swatchDrawer.addControl(swatch, y, w);\r\n w += 2;\r\n swatchNumber++;\r\n } else {\r\n continue;\r\n }\r\n }\r\n }\r\n if (options.savedColors.length >= options.swatchLimit!) {\r\n disableButton(button, true);\r\n } else {\r\n disableButton(button, false);\r\n }\r\n }\r\n }\r\n\r\n // Shows or hides edit swatches button depending on if there are saved swatches\r\n function setEditButtonVisibility(enableButton: boolean) {\r\n if (enableButton) {\r\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\r\n butEdit.width = buttonWidth;\r\n butEdit.height = buttonHeight;\r\n butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + \"px\";\r\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\r\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\r\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n butEdit.thickness = 2;\r\n butEdit.color = buttonColor;\r\n butEdit.fontSize = buttonFontSize;\r\n butEdit.background = buttonBackgroundColor;\r\n butEdit.onPointerEnterObservable.add(() => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n });\r\n butEdit.onPointerOutObservable.add(() => {\r\n butEdit.background = buttonBackgroundColor;\r\n });\r\n butEdit.pointerDownAnimation = () => {\r\n butEdit.background = buttonBackgroundClickColor;\r\n };\r\n butEdit.pointerUpAnimation = () => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n };\r\n butEdit.onPointerClickObservable.add(() => {\r\n if (editSwatchMode) {\r\n editSwatchMode = false;\r\n } else {\r\n editSwatchMode = true;\r\n }\r\n editSwatches();\r\n });\r\n pickerGrid.addControl(butEdit, 1, 0);\r\n } else {\r\n pickerGrid.removeControl(butEdit);\r\n }\r\n }\r\n\r\n // Called when the user hits the limit of saved colors in the drawer.\r\n function disableButton(button: Button, disabled: boolean) {\r\n if (disabled) {\r\n button.color = buttonDisabledColor;\r\n button.background = buttonDisabledBackgroundColor;\r\n } else {\r\n button.color = buttonColor;\r\n button.background = buttonBackgroundColor;\r\n }\r\n }\r\n\r\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\r\n function closePicker(color: string) {\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n resolve({\r\n savedColors: options.savedColors,\r\n pickedColor: color,\r\n });\r\n } else {\r\n resolve({\r\n pickedColor: color,\r\n });\r\n }\r\n advancedTexture.removeControl(dialogContainer);\r\n }\r\n });\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);\r\n"]}