@@ -214,6 +214,17 @@ class TransformControls extends Controls {
214214 */
215215 defineProperty ( 'size' , 1 ) ;
216216
217+ /**
218+ * The viewport rectangle, in logical (CSS) pixels with the origin at the lower-left
219+ * of the canvas. Set this when the renderer uses a sub-canvas viewport so pointer
220+ * coordinates map to the correct region. If `null`, the full canvas is used.
221+ *
222+ * @name TransformControls#viewport
223+ * @type {?Vector4 }
224+ * @default null
225+ */
226+ this . viewport = null ;
227+
217228 /**
218229 * Whether dragging is currently performed or not.
219230 *
@@ -966,10 +977,29 @@ function getPointer( event ) {
966977 } else {
967978
968979 const rect = this . domElement . getBoundingClientRect ( ) ;
980+ const viewport = this . viewport ;
981+
982+ let originX , originY , regionWidth , regionHeight ;
983+
984+ if ( viewport !== null ) {
985+
986+ originX = viewport . x ;
987+ originY = rect . height - viewport . y - viewport . w ;
988+ regionWidth = viewport . z ;
989+ regionHeight = viewport . w ;
990+
991+ } else {
992+
993+ originX = 0 ;
994+ originY = 0 ;
995+ regionWidth = rect . width ;
996+ regionHeight = rect . height ;
997+
998+ }
969999
9701000 return {
971- x : ( event . clientX - rect . left ) / rect . width * 2 - 1 ,
972- y : - ( event . clientY - rect . top ) / rect . height * 2 + 1 ,
1001+ x : ( event . clientX - rect . left - originX ) / regionWidth * 2 - 1 ,
1002+ y : - ( event . clientY - rect . top - originY ) / regionHeight * 2 + 1 ,
9731003 button : event . button
9741004 } ;
9751005
0 commit comments