in client/client/modules/render/tracks/gene/internal/renderer/geneRenderer.js [86:189]
rebuildContainer(viewport, cache) {
if (!this.pixiRenderer) {
return;
}
super.rebuildContainer(viewport, cache);
const clearPreviousSprite = sprite => {
if (sprite && sprite.texture && sprite.texture.baseTexture) {
sprite.texture.destroy(true);
}
};
this.dataContainer.removeChildren();
this._dockableElementsContainer.removeChildren();
this._attachedElementsContainer.removeChildren();
this._labelsContainer.removeChildren();
clearPreviousSprite(this._graphicsSprite);
clearPreviousSprite(this._hoveredGraphicsSprite);
this._dockableElementsContainer.x = this.dataContainer.x;
this._dockableElementsContainer.y = this.dataContainer.y;
this._dockableElementsContainer.scale = this.dataContainer.scale;
const isHistogram = this._transformer.isHistogramDrawingModeForViewport(viewport, cache);
if (isHistogram) {
this.geneHistogram.totalHeight = this.height;
this.geneHistogram.renderHistogram(viewport, GeneTransformer.transformPartialHistogramData(viewport, cache.histogramData));
this._actualHeight = null;
} else {
this.geneHistogram.clear();
}
if (!isHistogram && cache.data !== null && cache.data !== undefined) {
this.featureRenderer._opts = {
gffColorByFeatureType: this._gffColorByFeatureType,
gffShowNumbersAminoacid: this._gffShowNumbersAminoacid,
collapsedMode: this._collapsedMode,
geneFeatures: this._geneFeatures
};
this.featureRenderer.prepare();
const {graphics, hoveredGraphics, highlightGraphics, hoveredHighlightGraphics} = this.featureRenderer.render(
cache.data,
viewport,
this._labelsContainer,
this._dockableElementsContainer,
this._attachedElementsContainer
);
if (graphics !== null) {
if (this.needConvertGraphicsToTexture) {
let temporaryContainer = new PIXI.Container();
if (highlightGraphics && highlightGraphics.children.length > 0) {
temporaryContainer.addChild(highlightGraphics);
}
temporaryContainer.addChild(graphics);
const coordinates = this.featureRenderer.textureCoordinates;
const texture = this.pixiRenderer.generateTexture(temporaryContainer, {
scaleMode: drawingConfiguration.scaleMode,
resolution: drawingConfiguration.resolution
});
if (this._graphicsSprite) {
this._graphicsSprite.texture = texture;
} else {
this._graphicsSprite = new PIXI.Sprite(texture);
}
this._graphicsSprite.position.x = coordinates.x;
this._graphicsSprite.position.y = coordinates.y;
this.dataContainer.addChild(this._graphicsSprite);
graphics.clear();
temporaryContainer = null;
} else {
highlightGraphics && this.dataContainer.addChild(highlightGraphics);
this.dataContainer.addChild(graphics);
}
}
if (hoveredGraphics) {
this._hoveredItemContainer.removeChildren();
if (this.needConvertGraphicsToTexture) {
let temporaryContainer = new PIXI.Container();
if (hoveredHighlightGraphics && hoveredHighlightGraphics.children.length > 0) {
temporaryContainer.addChild(hoveredHighlightGraphics);
}
temporaryContainer.addChild(hoveredGraphics);
const coordinates = this.featureRenderer.textureCoordinates;
const texture = this.pixiRenderer.generateTexture(temporaryContainer, {
scaleMode: drawingConfiguration.scaleMode,
resolution: drawingConfiguration.resolution
});
if (this._hoveredGraphicsSprite) {
this._hoveredGraphicsSprite.texture = texture;
} else {
this._hoveredGraphicsSprite = new PIXI.Sprite(texture);
}
this._hoveredGraphicsSprite.position.x = coordinates.x;
this._hoveredGraphicsSprite.position.y = coordinates.y;
this._hoveredItemContainer.addChild(this._hoveredGraphicsSprite);
hoveredGraphics.clear();
temporaryContainer = null;
} else {
hoveredHighlightGraphics && this._hoveredItemContainer.addChild(hoveredHighlightGraphics);
this._hoveredItemContainer.addChild(hoveredGraphics);
}
this.hoverItem(null, viewport, false);
}
this._actualHeight = this.featureRenderer.getActualHeight();
this.dataContainer.addChild(this._hoveredItemContainer);
}
this.scroll(viewport, null);
}