scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
119 lines (118 loc) • 7.43 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.NativeAxisRenderer = void 0;
var TextPosition_1 = require("../../../types/TextPosition");
var parseColor_1 = require("../../../utils/parseColor");
var NativeObject_1 = require("../Helpers/NativeObject");
var AxisRenderer_1 = require("./AxisRenderer");
/**
* AxisRenderer subclass that uses native WASM font rendering (DrawStringAdvanced).
* Used when {@link LabelProviderBase2D.useNativeText} is true.
*/
var NativeAxisRenderer = /** @class */ (function (_super) {
__extends(NativeAxisRenderer, _super);
function NativeAxisRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
/** @inheritDoc */
NativeAxisRenderer.prototype.onBeginDrawLabels = function (renderContext, labelProvider, labelStyle) {
this.nativeFont = renderContext.getFont(labelStyle, labelProvider.rotation !== 0);
this.textBounds = (0, NativeObject_1.getTextBounds)(this.webAssemblyContext);
this.mlaNative = (0, TextPosition_1.convertMultiLineAlignment)(labelStyle.multilineAlignment, this.webAssemblyContext);
this.nativeLineSpacing = labelProvider.lineSpacing;
return this.calculateLineHightForNativeFont(this.nativeFont, this.textBounds);
};
/** @inheritDoc */
NativeAxisRenderer.prototype.measureLabels = function (tickLabels, labelProvider, ctx, labelStyle, labelInfos) {
if (!labelProvider.useCache) {
var labelHeights = [];
var labelWidths = [];
for (var _i = 0, tickLabels_1 = tickLabels; _i < tickLabels_1.length; _i++) {
var label = tickLabels_1[_i];
this.nativeFont.CalculateStringBounds(label !== null && label !== void 0 ? label : "", this.textBounds, this.nativeLineSpacing);
labelHeights.push(this.textBounds.m_fHeight + labelStyle.padding.top + labelStyle.padding.bottom);
labelWidths.push(this.textBounds.m_fWidth + labelStyle.padding.left + labelStyle.padding.right);
}
return { labelHeights: labelHeights, labelWidths: labelWidths };
}
return _super.prototype.measureLabels.call(this, tickLabels, labelProvider, ctx, labelStyle, labelInfos);
};
/** @inheritDoc */
NativeAxisRenderer.prototype.drawSingleLabel = function (renderContext, labelProvider, labelText, labelInfo, xCoord, yCoord, tickCoord, labelWidth, labelHeight, index, labelStyle, clipRect, isHorizontal) {
var padding = labelStyle.padding;
var viewRect = this.currentViewRect;
var lineHeight = this.currentLineHeight;
var rotationRad = this.currentRotationRad;
var tx = xCoord + viewRect.left + padding.left;
var ty = yCoord + viewRect.top + lineHeight + padding.top;
var rxc = tx;
var ryc = ty - lineHeight;
if (isHorizontal && rotationRad !== 0) {
var nativeLabelInfo = labelInfo !== null && labelInfo !== void 0 ? labelInfo : labelProvider.getNativeLabelInfo(labelText);
var textWidth = nativeLabelInfo.textWidth, textHeight = nativeLabelInfo.textHeight;
tx =
tickCoord +
viewRect.left -
(textHeight * Math.sin(rotationRad)) / 2;
rxc = tx;
if (rotationRad > 0) {
// rotating up
tx -= textWidth;
}
}
if (!isHorizontal) {
// Vertical: rotation center = position
rxc = tx;
ryc = ty;
}
var _a = labelProvider.adjustLabel(index, labelText, labelWidth, labelHeight, tx, ty, rxc, ryc, rotationRad), text = _a.text, x = _a.x, y = _a.y, rx = _a.rx, ry = _a.ry, rotationRadians = _a.rotationRadians, color = _a.color;
this.nativeFont.DrawStringAdvanced(text !== null && text !== void 0 ? text : "", color !== null && color !== void 0 ? color : this.currentTextColor, Math.round(x), Math.round(y), (0, NativeObject_1.getVector4)(this.webAssemblyContext, rx, ry, rotationRadians, 0), this.mlaNative, this.nativeLineSpacing);
};
/** @inheritDoc */
NativeAxisRenderer.prototype.measureModifierAxisLabel = function (renderContext, displayValue, textStyle, _fill, effectivePadding, _cornerRadius) {
var _a, _b;
this.modifierNativeFont = renderContext.getFont(textStyle, false, true);
this.modifierTextBounds = (0, NativeObject_1.getTextBounds)(this.webAssemblyContext);
this.modifierLineSpacing = (_b = (_a = this.parentAxis.labelProvider) === null || _a === void 0 ? void 0 : _a.lineSpacing) !== null && _b !== void 0 ? _b : 0;
this.modifierNativeFont.CalculateStringBounds(displayValue, this.modifierTextBounds, this.modifierLineSpacing);
return {
textureWidth: this.modifierTextBounds.m_fWidth + effectivePadding.left + effectivePadding.right,
textureHeight: this.modifierTextBounds.m_fHeight + effectivePadding.top + effectivePadding.bottom
};
};
/** @inheritDoc */
NativeAxisRenderer.prototype.drawModifierAxisLabelSpecific = function (renderContext, displayValue, textStyle, fill, effectivePadding, cornerRadius, xPosition, yPosition, textureWidth, textureHeight, _clipRect) {
if (fill) {
var roundedRectTexture = this.textureManager.createFilledRectTexture(textureWidth, textureHeight, fill, cornerRadius);
renderContext.drawTexture(roundedRectTexture.bitmapTexture, Math.round(xPosition), Math.round(yPosition), textureWidth, textureHeight);
roundedRectTexture.bitmapTexture.delete();
}
var textColor = (0, parseColor_1.parseColorToUIntArgb)(textStyle.color);
var lineHeight = this.calculateLineHightForNativeFont(this.modifierNativeFont, this.modifierTextBounds);
var textX = xPosition + effectivePadding.left;
var textY = yPosition + lineHeight + effectivePadding.top;
this.modifierNativeFont.DrawStringAdvanced(displayValue, textColor, Math.round(textX), Math.round(textY), (0, NativeObject_1.getVector4)(this.webAssemblyContext, 0, 0, 0, 0), this.webAssemblyContext.eTSRTextAlignMode.Left, this.modifierLineSpacing);
this.modifierNativeFont.End();
};
/** @inheritDoc */
NativeAxisRenderer.prototype.onEndDrawLabels = function () {
// nativeFont is managed by the renderContext font cache
};
return NativeAxisRenderer;
}(AxisRenderer_1.AxisRenderer));
exports.NativeAxisRenderer = NativeAxisRenderer;