rebuildContainer()

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);
    }