Skip to content

Commit 47a2189

Browse files
committed
Fix - position of 3D canvas relative to first fixed HTML element
1 parent ba966e2 commit 47a2189

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

scripts/JSRootPainter.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,6 +1390,8 @@
13901390

13911391
this.svg_pad().property('can3d', size.can3d);
13921392

1393+
console.log('add 3d canvas can3d', size.can3d);
1394+
13931395
if (size.can3d === 0) {
13941396
this.svg_canvas().style('display', 'none'); // hide SVG canvas
13951397

@@ -1430,20 +1432,29 @@
14301432
.attr('preserveAspectRatio','xMidYMid');
14311433

14321434
} else {
1433-
elem = d3.select(this.svg_canvas().node().parentNode).select("." + size.clname);
1435+
var prnt = this.svg_canvas().node().parentNode;
1436+
1437+
elem = d3.select(prnt).select("." + size.clname);
14341438
if (onlyget) return elem;
14351439

14361440
// force redraw by resize
14371441
this.svg_canvas().property('redraw_by_resize', true);
14381442

1439-
if (elem.empty()) {
1440-
elem = d3.select(this.svg_canvas().node().parentNode)
1441-
.append('div').attr("class", size.clname);
1443+
if (elem.empty())
1444+
elem = d3.select(prnt).append('div').attr("class", size.clname);
1445+
1446+
// our position inside canvas, but to set 'absolute' position we should use
1447+
// canvas element offset relative to first parent with position
1448+
var offx = 0, offy = 0;
1449+
while ((prnt !== null) && !offx && !offy) {
1450+
offx += prnt.offsetLeft;
1451+
offy += prnt.offsetTop;
1452+
prnt = prnt.parentNode;
14421453
}
14431454

14441455
elem.style('position','absolute')
1445-
.style('left', size.x + 'px')
1446-
.style('top', size.y + 'px')
1456+
.style('left', (size.x + offx) + 'px')
1457+
.style('top', (size.y + offy) + 'px')
14471458
.style('width', size.width + 'px')
14481459
.style('height', size.height + 'px');
14491460
}

0 commit comments

Comments
 (0)