keyframeSvgPoint.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import * as React from "react";
  2. import { Vector2 } from 'babylonjs/Maths/math.vector';
  3. import { AnchorSvgPoint } from './anchorSvgPoint';
  4. export interface IKeyframeSvgPoint {
  5. keyframePoint: Vector2;
  6. rightControlPoint: Vector2 | null;
  7. leftControlPoint: Vector2 | null;
  8. id: string;
  9. selected: boolean;
  10. isLeftActive: boolean;
  11. isRightActive: boolean;
  12. }
  13. interface IKeyframeSvgPointProps {
  14. keyframePoint: Vector2;
  15. leftControlPoint: Vector2 | null;
  16. rightControlPoint: Vector2 | null;
  17. id: string;
  18. selected: boolean;
  19. selectKeyframe: (id: string) => void;
  20. selectedControlPoint: (type: string, id: string) => void;
  21. isLeftActive: boolean;
  22. isRightActive: boolean;
  23. }
  24. export class KeyframeSvgPoint extends React.Component<IKeyframeSvgPointProps>{
  25. constructor(props: IKeyframeSvgPointProps) {
  26. super(props);
  27. }
  28. select(){
  29. this.props.selectKeyframe(this.props.id);
  30. }
  31. render() {
  32. return (
  33. <>
  34. <svg className="draggable" x={this.props.keyframePoint.x} y={this.props.keyframePoint.y} style={{overflow:'visible', cursor: 'pointer'}} >
  35. <circle data-id={this.props.id} className="draggable" cx="0" cy="0" r="2" stroke="none" strokeWidth="0" fill={this.props.selected ? "red" : "black"} onClick={() => this.select()}/>
  36. </svg>
  37. { this.props.leftControlPoint && <AnchorSvgPoint type="left" index={this.props.id} control={this.props.leftControlPoint} anchor={this.props.keyframePoint} active={this.props.selected} selected={this.props.isLeftActive} selectControlPoint={(type: string) => this.props.selectedControlPoint(type, this.props.id)}/>}
  38. { this.props.rightControlPoint && <AnchorSvgPoint type="right" index={this.props.id} control={this.props.rightControlPoint} anchor={this.props.keyframePoint} active={this.props.selected} selected={this.props.isRightActive} selectControlPoint={(type: string) => this.props.selectedControlPoint(type, this.props.id)}/>}
  39. </>
  40. )
  41. }
  42. }