/// var DOMImage = Image; module BABYLON.GUI { export class Checkbox extends Control { private _isChecked = false; private _background = "black"; private _checkSizeRatio = 0.8; private _thickness = 1; public get thickness(): number { return this._thickness; } public set thickness(value: number) { if (this._thickness === value) { return; } this._thickness = value; this._markAsDirty(); } public onIsCheckedChangedObservable = new Observable(); public get checkSizeRatio(): number { return this._checkSizeRatio; } public set checkSizeRatio(value: number) { value = Math.max(Math.min(1, value), 0); if (this._checkSizeRatio === value) { return; } this._checkSizeRatio = value; this._markAsDirty(); } public get background(): string { return this._background; } public set background(value: string) { if (this._background === value) { return; } this._background = value; this._markAsDirty(); } public get isChecked(): boolean { return this._isChecked; } public set isChecked(value: boolean) { if (this._isChecked === value) { return; } this._isChecked = value; this._markAsDirty(); this.onIsCheckedChangedObservable.notifyObservers(value); } constructor(public name?: string) { super(name); this.isPointerBlocker = true; } protected _getTypeName(): string { return "CheckBox"; } public _draw(parentMeasure: Measure, context: CanvasRenderingContext2D): void { context.save(); this._applyStates(context); if (this._processMeasures(parentMeasure, context)) { let actualWidth = this._currentMeasure.width - this._thickness; let actualHeight = this._currentMeasure.height - this._thickness; context.fillStyle = this._background; context.fillRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, actualWidth, actualHeight); if (this._isChecked) { context.fillStyle = this.color; let offsetWidth = actualWidth * this._checkSizeRatio; let offseHeight = actualHeight * this._checkSizeRatio; context.fillRect(this._currentMeasure.left + this._thickness / 2 + (actualWidth - offsetWidth) / 2, this._currentMeasure.top + this._thickness / 2 + (actualHeight - offseHeight) / 2, offsetWidth, offseHeight); } context.strokeStyle = this.color; context.lineWidth = this._thickness; context.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, actualWidth, actualHeight); } context.restore(); } // Events protected _onPointerDown(coordinates: Vector2): boolean { if (!super._onPointerDown(coordinates)) { return false; } this.isChecked = !this.isChecked; return true; } } }