Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

canvas.tsx 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import styled from 'styles'
  2. import state, { useSelector } from 'state'
  3. import React, { useEffect, useRef } from 'react'
  4. import useZoomEvents from 'hooks/useZoomEvents'
  5. import useCamera from 'hooks/useCamera'
  6. import Defs from './defs'
  7. import Page from './page'
  8. import Brush from './brush'
  9. import Bounds from './bounds/bounding-box'
  10. import BoundsBg from './bounds/bounds-bg'
  11. import Selected from './selected'
  12. import Handles from './bounds/handles'
  13. import useCanvasEvents from 'hooks/useCanvasEvents'
  14. import ContextMenu from './context-menu/context-menu'
  15. export default function Canvas() {
  16. const rCanvas = useRef<SVGSVGElement>(null)
  17. const rGroup = useRef<SVGGElement>(null)
  18. useCamera(rGroup)
  19. useZoomEvents()
  20. const events = useCanvasEvents(rCanvas)
  21. const isReady = useSelector((s) => s.isIn('ready'))
  22. return (
  23. <ContextMenu>
  24. <MainSVG ref={rCanvas} {...events}>
  25. <Defs />
  26. {isReady && (
  27. <g ref={rGroup}>
  28. <BoundsBg />
  29. <Page />
  30. {/* <Selected /> */}
  31. <Bounds />
  32. <Handles />
  33. <Brush />
  34. </g>
  35. )}
  36. </MainSVG>
  37. </ContextMenu>
  38. )
  39. }
  40. const MainSVG = styled('svg', {
  41. position: 'fixed',
  42. overflow: 'hidden',
  43. top: 0,
  44. left: 0,
  45. width: '100%',
  46. height: '100%',
  47. touchAction: 'none',
  48. zIndex: 100,
  49. backgroundColor: '$canvas',
  50. pointerEvents: 'all',
  51. // cursor: 'none',
  52. '& *': {
  53. userSelect: 'none',
  54. },
  55. })