Skip to content

Commit c68a434

Browse files
committed
Only in special cases use getDomCanvasPainter
In most cases painter.getCanvPainter has to use WeakRef on painter object
1 parent db554f1 commit c68a434

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

modules/base/ObjectPainter.mjs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ function isPadPainter(p) {
1616
return isFunc(p?.getRootPad) && isFunc(p?.forEachPainterInPad);
1717
}
1818

19+
/** @summary returns canvas painter from DOM element @private */
20+
function getDomCanvasPainter(dom) {
21+
const elem = dom?.select('.root_canvas');
22+
return !elem || elem.empty() ? null : elem.property('pad_painter');
23+
}
24+
1925
/**
2026
* @summary Painter class for ROOT objects
2127
*
@@ -78,18 +84,11 @@ class ObjectPainter extends BasePainter {
7884

7985
/** @summary returns canvas painter
8086
* @protected */
81-
getCanvPainter(try_select) {
87+
getCanvPainter() {
8288
let pp = this.getPadPainter();
83-
if (!pp && try_select) {
84-
const elem = this.getCanvSvg();
85-
return elem.empty() ? null : elem.property('pad_painter');
86-
}
87-
while (pp && !pp.isCanvas()) {
88-
const top = pp.getPadPainter();
89-
if (!top) break;
90-
pp = top;
91-
}
92-
return pp?.isCanvas() ? pp : null;
89+
while (pp && !pp.isCanvas())
90+
pp = pp.getPadPainter();
91+
return pp;
9392
}
9493

9594
/** @summary Indicates that drawing runs in batch mode
@@ -643,7 +642,7 @@ class ObjectPainter extends BasePainter {
643642
pad_painter = this.#pad_painter_ref.deref();
644643
else {
645644
if (!pad_painter)
646-
pad_painter = this.getCanvPainter(true); // try to detect in DOM
645+
pad_painter = getDomCanvasPainter(this.selectDom()); // try to detect in DOM
647646
if (pad_painter)
648647
this.#pad_painter_ref = new WeakRef(pad_painter);
649648
}
@@ -1683,21 +1682,21 @@ function drawRawText(dom, txt /* , opt */) {
16831682
}
16841683

16851684
/** @summary Returns canvas painter (if any) for specified DOM element
1686-
* @param {string|object} dom - id or DOM element
1685+
* @param {string|object} dom - id or DOM element or pad painter
16871686
* @private */
16881687
function getElementCanvPainter(dom) {
1689-
return isPadPainter(dom) ? dom.getCanvPainter() : new ObjectPainter(dom).getCanvPainter(true);
1688+
return isPadPainter(dom) ? dom.getCanvPainter() : getDomCanvasPainter(new ObjectPainter(dom).selectDom());
16901689
}
16911690

16921691
/** @summary Returns pad painter (if any) for specified DOM element
1693-
* @param {string|object} dom - id or DOM element
1692+
* @param {string|object} dom - id or DOM element or pad painter
16941693
* @private */
16951694
function getElementPadPainter(dom) {
16961695
return isPadPainter(dom) ? dom : new ObjectPainter(dom).getPadPainter();
16971696
}
16981697

16991698
/** @summary Returns main painter (if any) for specified HTML element - typically histogram painter
1700-
* @param {string|object} dom - id or DOM element
1699+
* @param {string|object} dom - id or DOM element or pad painter
17011700
* @private */
17021701
function getElementMainPainter(dom) {
17031702
return isPadPainter(dom) ? dom.getMainPainter() : new ObjectPainter(dom).getMainPainter(true);
@@ -1796,6 +1795,6 @@ const EAxisBits = {
17961795

17971796
Object.assign(internals.jsroot, { ObjectPainter, cleanup, resize });
17981797

1799-
export { isPadPainter, getElementPadPainter, getElementCanvPainter, getElementMainPainter, drawingJSON,
1798+
export { isPadPainter, getDomCanvasPainter, getElementPadPainter, getElementCanvPainter, getElementMainPainter, drawingJSON,
18001799
selectActivePad, getActivePad, cleanup, resize, drawRawText,
18011800
ObjectPainter, EAxisBits, kAxisLabels, kAxisNormal, kAxisFunc, kAxisTime };

modules/gpad/TCanvasPainter.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { BIT, settings, gStyle, internals, browser, create, parse, toJSON, loadS
22
import { select as d3_select } from '../d3.mjs';
33
import { closeCurrentWindow, showProgress, loadOpenui5, ToolbarIcons, getColorExec } from '../gui/utils.mjs';
44
import { GridDisplay, getHPainter } from '../gui/display.mjs';
5-
import { cleanup, resize, selectActivePad, EAxisBits } from '../base/ObjectPainter.mjs';
5+
import { cleanup, resize, selectActivePad, EAxisBits, getDomCanvasPainter } from '../base/ObjectPainter.mjs';
66
import { TFramePainter } from './TFramePainter.mjs';
77
import { TPadPainter, clTButton, createWebObjectOptions } from './TPadPainter.mjs';
88

@@ -968,7 +968,7 @@ async function ensureTCanvas(painter, frame_kind) {
968968
canv.fY2 = ranges.maxy + dy * gStyle.fPadTopMargin;
969969
return canv;
970970
},
971-
pad_painter = painter.getPadPainter() || painter.getCanvPainter(true),
971+
pad_painter = painter.getPadPainter() || getDomCanvasPainter(painter.selectDom()),
972972
promise = pad_painter ? Promise.resolve(pad_painter) :
973973
TCanvasPainter.draw(painter.getDom(), createCanv(), noframe);
974974

0 commit comments

Comments
 (0)