/* eslint-disable react/require-default-props */ import { IconProp } from '@fortawesome/fontawesome-svg-core'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { observer } from 'mobx-react'; import * as React from 'react'; import { UndoManager } from '../../util/UndoManager'; export interface RadialMenuProps { description: string; event: (stuff?: any) => void; undoable?: boolean; icon: IconProp; closeMenu?: () => void; min?: number; max?: number; selected: number; } @observer export class RadialMenuItem extends React.Component { componentDidMount() { this.setcircle(); } componentDidUpdate() { this.setcircle(); } handleEvent = async (e: React.PointerEvent) => { this.props.closeMenu && this.props.closeMenu(); let batch: UndoManager.Batch | undefined; if (this.props.undoable !== false) { batch = UndoManager.StartBatch(`Context menu event: ${this.props.description}`); } await this.props.event({ x: e.clientX, y: e.clientY }); batch && batch.end(); }; setcircle() { let circlemin = 0; let circlemax = 1; this.props.min ? (circlemin = this.props.min) : null; this.props.max ? (circlemax = this.props.max) : null; if (document.getElementById('myCanvas') !== null) { const c: any = document.getElementById('myCanvas'); let color = 'white'; switch (circlemin % 3) { case 1: color = '#c2c2c5'; break; case 0: color = '#f1efeb'; break; case 2: color = 'lightgray'; break; default: } if (circlemax % 3 === 1 && circlemin === circlemax - 1) { color = '#c2c2c5'; } if (this.props.selected === this.props.min) { color = '#808080'; } if (c.getContext) { const ctx = c.getContext('2d'); ctx.beginPath(); ctx.arc(150, 150, 150, (circlemin / circlemax) * 2 * Math.PI, ((circlemin + 1) / circlemax) * 2 * Math.PI); ctx.arc(150, 150, 50, ((circlemin + 1) / circlemax) * 2 * Math.PI, (circlemin / circlemax) * 2 * Math.PI, true); ctx.fillStyle = color; ctx.fill(); } } } calculatorx() { let circlemin = 0; let circlemax = 1; this.props.min ? (circlemin = this.props.min) : null; this.props.max ? (circlemax = this.props.max) : null; const avg = (circlemin / circlemax + (circlemin + 1) / circlemax) / 2; const degrees = 360 * avg; const x = 100 * Math.cos((degrees * Math.PI) / 180); return x; } calculatory() { let circlemin = 0; let circlemax = 1; this.props.min ? (circlemin = this.props.min) : null; this.props.max ? (circlemax = this.props.max) : null; const avg = (circlemin / circlemax + (circlemin + 1) / circlemax) / 2; const degrees = 360 * avg; const y = -100 * Math.sin((degrees * Math.PI) / 180); return y; } render() { return (
{' '} Your browser does not support the HTML5 canvas tag.
); } }