Skip to content

Commit 7499850

Browse files
authored
TransformControls: Add viewport support. (#33451)
1 parent ae575fd commit 7499850

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

examples/jsm/controls/TransformControls.js

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)