Spaces:
Running
Running
| import Colorpicker from '@/ui/tools/colorpicker'; | |
| import Range from '@/ui/tools/range'; | |
| import Submenu from '@/ui/submenuBase'; | |
| import templateHtml from '@/ui/template/submenu/draw'; | |
| import { assignmentForDestroy, getRgb } from '@/util'; | |
| import { defaultDrawRangeValues, eventNames, selectorNames } from '@/consts'; | |
| const DRAW_OPACITY = 0.7; | |
| /** | |
| * Draw ui class | |
| * @class | |
| * @ignore | |
| */ | |
| class Draw extends Submenu { | |
| constructor(subMenuElement, { locale, makeSvgIcon, menuBarPosition, usageStatistics }) { | |
| super(subMenuElement, { | |
| locale, | |
| name: 'draw', | |
| makeSvgIcon, | |
| menuBarPosition, | |
| templateHtml, | |
| usageStatistics, | |
| }); | |
| this._els = { | |
| lineSelectButton: this.selector('.tie-draw-line-select-button'), | |
| drawColorPicker: new Colorpicker(this.selector('.tie-draw-color'), { | |
| defaultColor: '#00a9ff', | |
| toggleDirection: this.toggleDirection, | |
| usageStatistics: this.usageStatistics, | |
| }), | |
| drawRange: new Range( | |
| { | |
| slider: this.selector('.tie-draw-range'), | |
| input: this.selector('.tie-draw-range-value'), | |
| }, | |
| defaultDrawRangeValues | |
| ), | |
| }; | |
| this.type = null; | |
| this.color = this._els.drawColorPicker.color; | |
| this.width = this._els.drawRange.value; | |
| this.colorPickerInputBox = this._els.drawColorPicker.colorpickerElement.querySelector( | |
| selectorNames.COLOR_PICKER_INPUT_BOX | |
| ); | |
| } | |
| /** | |
| * Destroys the instance. | |
| */ | |
| destroy() { | |
| this._removeEvent(); | |
| this._els.drawColorPicker.destroy(); | |
| this._els.drawRange.destroy(); | |
| assignmentForDestroy(this); | |
| } | |
| /** | |
| * Add event for draw | |
| * @param {Object} actions - actions for crop | |
| * @param {Function} actions.setDrawMode - set draw mode | |
| */ | |
| addEvent(actions) { | |
| this.eventHandler.changeDrawType = this._changeDrawType.bind(this); | |
| this.actions = actions; | |
| this._els.lineSelectButton.addEventListener('click', this.eventHandler.changeDrawType); | |
| this._els.drawColorPicker.on('change', this._changeDrawColor.bind(this)); | |
| this._els.drawRange.on('change', this._changeDrawRange.bind(this)); | |
| this.colorPickerInputBox.addEventListener( | |
| eventNames.FOCUS, | |
| this._onStartEditingInputBox.bind(this) | |
| ); | |
| this.colorPickerInputBox.addEventListener( | |
| eventNames.BLUR, | |
| this._onStopEditingInputBox.bind(this) | |
| ); | |
| } | |
| /** | |
| * Remove event | |
| * @private | |
| */ | |
| _removeEvent() { | |
| this._els.lineSelectButton.removeEventListener('click', this.eventHandler.changeDrawType); | |
| this._els.drawColorPicker.off(); | |
| this._els.drawRange.off(); | |
| this.colorPickerInputBox.removeEventListener( | |
| eventNames.FOCUS, | |
| this._onStartEditingInputBox.bind(this) | |
| ); | |
| this.colorPickerInputBox.removeEventListener( | |
| eventNames.BLUR, | |
| this._onStopEditingInputBox.bind(this) | |
| ); | |
| } | |
| /** | |
| * set draw mode - action runner | |
| */ | |
| setDrawMode() { | |
| this.actions.setDrawMode(this.type, { | |
| width: this.width, | |
| color: getRgb(this.color, DRAW_OPACITY), | |
| }); | |
| } | |
| /** | |
| * Returns the menu to its default state. | |
| */ | |
| changeStandbyMode() { | |
| this.type = null; | |
| this.actions.stopDrawingMode(); | |
| this.actions.changeSelectableAll(true); | |
| this._els.lineSelectButton.classList.remove('free'); | |
| this._els.lineSelectButton.classList.remove('line'); | |
| } | |
| /** | |
| * Executed when the menu starts. | |
| */ | |
| changeStartMode() { | |
| this.type = 'free'; | |
| this._els.lineSelectButton.classList.add('free'); | |
| this.setDrawMode(); | |
| } | |
| /** | |
| * Change draw type event | |
| * @param {object} event - line select event | |
| * @private | |
| */ | |
| _changeDrawType(event) { | |
| const button = event.target.closest('.tui-image-editor-button'); | |
| if (button) { | |
| const lineType = this.getButtonType(button, ['free', 'line']); | |
| this.actions.discardSelection(); | |
| if (this.type === lineType) { | |
| this.changeStandbyMode(); | |
| return; | |
| } | |
| this.changeStandbyMode(); | |
| this.type = lineType; | |
| this._els.lineSelectButton.classList.add(lineType); | |
| this.setDrawMode(); | |
| } | |
| } | |
| /** | |
| * Change drawing color | |
| * @param {string} color - select drawing color | |
| * @private | |
| */ | |
| _changeDrawColor(color) { | |
| this.color = color || 'transparent'; | |
| if (!this.type) { | |
| this.changeStartMode(); | |
| } else { | |
| this.setDrawMode(); | |
| } | |
| } | |
| /** | |
| * Change drawing Range | |
| * @param {number} value - select drawing range | |
| * @private | |
| */ | |
| _changeDrawRange(value) { | |
| this.width = value; | |
| if (!this.type) { | |
| this.changeStartMode(); | |
| } else { | |
| this.setDrawMode(); | |
| } | |
| } | |
| } | |
| export default Draw; | |