in client/client/modules/render/tracks/reference/referenceRenderer.js [47:118]
_changeNucleotidesReferenceGraph(viewport, items, isReverse) {
const height = this.height;
const heightBlock = this._config.nucleotidesHeight;
let startY;
if (this.isRenderingStartsAtMiddle) {
startY = isReverse ?
height / 2.0 + heightBlock :
height / 2.0 - heightBlock;
} else {
startY = isReverse ?
heightBlock :
height - heightBlock;
}
const block = new PIXI.Graphics();
const pixelsPerBp = viewport.factor;
let padding = pixelsPerBp / 2.0;
const lowScaleMarginThreshold = 4;
const lowScaleMarginOffset = -0.5;
if (pixelsPerBp > lowScaleMarginThreshold)
padding += lowScaleMarginOffset;
let prevX = null;
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (viewport.isShortenedIntronsMode && !viewport.shortenedIntronsViewport.checkFeature(item))
continue;
let startX = Math.round(this.correctedXPosition(item.xStart) - padding);
let endX = Math.round(this.correctedXPosition(item.xEnd) + padding);
if (pixelsPerBp >= this._config.largeScale.separateBarsAfterBp && prevX !== null && prevX === startX) {
startX++;
}
startX = this.correctCanvasXPosition(startX, viewport);
endX = this.correctCanvasXPosition(endX, viewport);
block.beginFill(this._config.largeScale[item.value.toUpperCase()], 1);
block.moveTo(startX, isReverse ? startY + lowScaleMarginOffset : startY - lowScaleMarginOffset);
if (this.isRenderingStartsAtMiddle) {
block.lineTo(startX, height / 2.0);
block.lineTo(endX, height / 2.0);
} else {
block.lineTo(startX, isReverse ? 0 : height);
block.lineTo(endX, isReverse ? 0 : height);
}
block.lineTo(endX, isReverse ? startY + lowScaleMarginOffset : startY - lowScaleMarginOffset);
block.lineTo(startX, isReverse ? startY + lowScaleMarginOffset : startY - lowScaleMarginOffset);
block.endFill();
prevX = endX;
}
this.dataContainer.addChild(block);
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (viewport.isShortenedIntronsMode && !viewport.shortenedIntronsViewport.checkFeature(item))
continue;
if (pixelsPerBp >= this._config.largeScale.labelDisplayAfterPixelsPerBp) {
const label = this.labelsManager
? this.labelsManager.getLabel(item.value, this._config.largeScale.labelStyle)
: undefined;
if (label) {
const labelHeight = label.height;
const labelWidth = label.width;
label.x = this.correctCanvasXPosition(
Math.round(this.correctedXPosition(item.xStart) - labelWidth / 2.0),
viewport
);
label.y = Math.round(isReverse ? startY - heightBlock / 2.0 - labelHeight / 2.0 : startY + heightBlock / 2.0 - labelHeight / 2.0 - 1);
this.dataContainer.addChild(label);
}
}
}
}