@@ -35,12 +35,16 @@ import { useRafState } from "react-use"
3535import  PointDistances  from  "../PointDistances" 
3636import  RegionTags  from  "../RegionTags" 
3737import  RegionSelectAndTransformBoxes  from  "../RegionSelectAndTransformBoxes" 
38+ import  VideoOrImageCanvasBackground  from  "../VideoOrImageCanvasBackground" 
39+ import  useEventCallback  from  "use-event-callback" 
3840
3941const  useStyles  =  makeStyles ( styles ) 
4042
4143type  Props  =  { 
4244 regions : Array < Region > , 
43-  imageSrc : string , 
45+  imageSrc ? : string , 
46+  videoSrc ?: string , 
47+  videoTime ?: number , 
4448 onMouseMove ?: ( {  x : number ,  y : number  } )  =>  any , 
4549 onMouseDown ?: ( {  x : number ,  y : number  } )  =>  any , 
4650 onMouseUp ?: ( {  x : number ,  y : number  } )  =>  any , 
@@ -73,6 +77,8 @@ const getDefaultMat = () => Matrix.from(1, 0, 0, 1, -10, -10)
7377export  default  ( { 
7478 regions, 
7579 imageSrc, 
80+  videoSrc, 
81+  videoTime, 
7682 realSize, 
7783 showTags, 
7884 onMouseMove =  p  =>  null , 
@@ -138,10 +144,19 @@ export default ({
138144
139145 const  projectRegionBox  =  useProjectRegionBox ( {  layoutParams,  mat } ) 
140146
141-  const  [ image ,  imageLoaded ]  =  useLoadImage ( imageSrc ,  onImageLoaded ) 
147+  const  [ imageDimensions ,  changeImageDimensions ]  =  useState ( ) 
148+  const  imageLoaded  =  Boolean ( imageDimensions ) 
149+  const  onVideoOrImageLoaded  =  useEventCallback ( 
150+  ( {  naturalWidth,  naturalHeight } )  =>  { 
151+  changeImageDimensions ( {  naturalWidth,  naturalHeight } ) 
152+  } 
153+  ) 
154+ 
155+  // const [image, imageLoaded] = useLoadImage(imageSrc, onImageLoaded) 
142156 const  excludePattern  =  useExcludePattern ( ) 
143157
144158 useLayoutEffect ( ( )  =>  { 
159+  if  ( ! imageDimensions )  return 
145160 const  canvas  =  canvasEl . current 
146161 const  {  clientWidth,  clientHeight }  =  canvas 
147162 canvas . width  =  clientWidth 
@@ -157,13 +172,13 @@ export default ({
157172 ) 
158173
159174 const  fitScale  =  Math . max ( 
160-  image . naturalWidth  /  ( clientWidth  -  20 ) , 
161-  image . naturalHeight  /  ( clientHeight  -  20 ) 
175+  imageDimensions . naturalWidth  /  ( clientWidth  -  20 ) , 
176+  imageDimensions . naturalHeight  /  ( clientHeight  -  20 ) 
162177 ) 
163178
164179 const  [ iw ,  ih ]  =  [ 
165-  image . naturalWidth  /  fitScale , 
166-  image . naturalHeight  /  fitScale 
180+  imageDimensions . naturalWidth  /  fitScale , 
181+  imageDimensions . naturalHeight  /  fitScale 
167182 ] 
168183
169184 layoutParams . current  =  { 
@@ -378,22 +393,24 @@ export default ({
378393 } } 
379394 > 
380395 { showCrosshairs  &&  < Crosshairs  mousePosition = { mousePosition }  /> } 
381-  < RegionSelectAndTransformBoxes 
382-  regions = { regions } 
383-  mouseEvents = { mouseEvents } 
384-  projectRegionBox = { projectRegionBox } 
385-  dragWithPrimary = { dragWithPrimary } 
386-  createWithPrimary = { createWithPrimary } 
387-  zoomWithPrimary = { zoomWithPrimary } 
388-  onBeginMovePoint = { onBeginMovePoint } 
389-  onSelectRegion = { onSelectRegion } 
390-  layoutParams = { layoutParams } 
391-  mat = { mat } 
392-  onBeginBoxTransform = { onBeginBoxTransform } 
393-  onBeginMovePolygonPoint = { onBeginMovePolygonPoint } 
394-  onAddPolygonPoint = { onAddPolygonPoint } 
395-  /> 
396-  { showTags  &&  ( 
396+  { imageLoaded  &&  ( 
397+  < RegionSelectAndTransformBoxes 
398+  regions = { regions } 
399+  mouseEvents = { mouseEvents } 
400+  projectRegionBox = { projectRegionBox } 
401+  dragWithPrimary = { dragWithPrimary } 
402+  createWithPrimary = { createWithPrimary } 
403+  zoomWithPrimary = { zoomWithPrimary } 
404+  onBeginMovePoint = { onBeginMovePoint } 
405+  onSelectRegion = { onSelectRegion } 
406+  layoutParams = { layoutParams } 
407+  mat = { mat } 
408+  onBeginBoxTransform = { onBeginBoxTransform } 
409+  onBeginMovePolygonPoint = { onBeginMovePolygonPoint } 
410+  onAddPolygonPoint = { onAddPolygonPoint } 
411+  /> 
412+  ) } 
413+  { imageLoaded  &&  showTags  &&  ( 
397414 < PreventScrollToParents > 
398415 < RegionTags 
399416 regions = { regions } 
@@ -437,7 +454,15 @@ export default ({
437454 > 
438455 < > 
439456 < canvas  className = { classes . canvas }  ref = { canvasEl }  /> 
440-  < img 
457+  < VideoOrImageCanvasBackground 
458+  imagePosition = { imagePosition } 
459+  mouseEvents = { mouseEvents } 
460+  onLoad = { onVideoOrImageLoaded } 
461+  videoTime = { videoTime } 
462+  videoSrc = { videoSrc } 
463+  imageSrc = { imageSrc } 
464+  /> 
465+  { /* <img 
441466 src={imageSrc} 
442467 className={classes.image} 
443468 {...mouseEvents} 
@@ -447,7 +472,7 @@ export default ({
447472 width: imagePosition.bottomRight.x - imagePosition.topLeft.x, 
448473 height: imagePosition.bottomRight.y - imagePosition.topLeft.y 
449474 }} 
450-  /> 
475+  /> */  } 
451476 </ > 
452477 </ PreventScrollToParents > 
453478 < div  className = { classes . zoomIndicator } > 
0 commit comments