|
1390 | 1390 |
|
1391 | 1391 | this.svg_pad().property('can3d', size.can3d); |
1392 | 1392 |
|
| 1393 | + console.log('add 3d canvas can3d', size.can3d); |
| 1394 | + |
1393 | 1395 | if (size.can3d === 0) { |
1394 | 1396 | this.svg_canvas().style('display', 'none'); // hide SVG canvas |
1395 | 1397 |
|
|
1430 | 1432 | .attr('preserveAspectRatio','xMidYMid'); |
1431 | 1433 |
|
1432 | 1434 | } 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); |
1434 | 1438 | if (onlyget) return elem; |
1435 | 1439 |
|
1436 | 1440 | // force redraw by resize |
1437 | 1441 | this.svg_canvas().property('redraw_by_resize', true); |
1438 | 1442 |
|
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; |
1442 | 1453 | } |
1443 | 1454 |
|
1444 | 1455 | 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') |
1447 | 1458 | .style('width', size.width + 'px') |
1448 | 1459 | .style('height', size.height + 'px'); |
1449 | 1460 | } |
|
0 commit comments