Layer.tsx 936 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { FC, memo, useContext, useEffect } from "react";
  2. import { KrpanoRendererContext } from "../contexts";
  3. /**
  4. * @see https://krpano.com/docu/xml/#layer.html
  5. */
  6. export interface LayerProps {
  7. name: string;
  8. keep?: boolean;
  9. type?: "image" | "text";
  10. align?:
  11. | "lefttop"
  12. | "left"
  13. | "leftbottom"
  14. | "top"
  15. | "center"
  16. | "bottom"
  17. | "righttop"
  18. | "right";
  19. x?: number;
  20. y?: number;
  21. html?: string;
  22. visible?: boolean;
  23. background?: boolean;
  24. border?: boolean;
  25. enabled?: boolean;
  26. css?: string;
  27. }
  28. export const Layer: FC<LayerProps> = memo(({ name, ...rest }) => {
  29. const renderer = useContext(KrpanoRendererContext);
  30. useEffect(() => {
  31. renderer?.addLayer(name, {});
  32. return () => {
  33. renderer?.removeLayer(name);
  34. };
  35. }, []);
  36. useEffect(() => {
  37. renderer?.setTag("layer", name, { ...rest }, true);
  38. }, [renderer, name, rest]);
  39. return <div className="layer" />;
  40. });