mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
1 Commits
hide-toolb
...
cursor/add
Author | SHA1 | Date | |
---|---|---|---|
![]() |
79f9e2fadc |
@@ -109,6 +109,17 @@ module.exports = {
|
||||
.setLabel(_('Visible on start'))
|
||||
.setGroup(_('Appearance'));
|
||||
|
||||
if (!objectContent.lineHeight) {
|
||||
objectContent.lineHeight = 0;
|
||||
}
|
||||
objectProperties
|
||||
.getOrCreate('lineHeight')
|
||||
.setValue(objectContent.lineHeight.toString())
|
||||
.setType('number')
|
||||
.setLabel(_('Line height'))
|
||||
.setDescription(_('Line height for multiline text (0 for automatic)'))
|
||||
.setGroup(_('Appearance'));
|
||||
|
||||
return objectProperties;
|
||||
};
|
||||
objectBBText.content = {
|
||||
@@ -120,6 +131,7 @@ module.exports = {
|
||||
fontFamily: 'Arial',
|
||||
align: 'left',
|
||||
verticalTextAlignment: 'top',
|
||||
lineHeight: 0,
|
||||
};
|
||||
|
||||
objectBBText.updateInitialInstanceProperty = function (
|
||||
@@ -394,6 +406,19 @@ module.exports = {
|
||||
expressionLabel: _('Get the wrapping width'),
|
||||
expressionDescription: _('Get the wrapping width'),
|
||||
},
|
||||
{
|
||||
functionName: 'LineHeight',
|
||||
iconPath: 'res/actions/characterSize24.png',
|
||||
type: 'number',
|
||||
instructionLabel: _('Line height'),
|
||||
paramLabel: _('Line height (0 for automatic)'),
|
||||
conditionDescription: _('Compare the line height of the text.'),
|
||||
conditionSentence: _('the line height'),
|
||||
actionDescription: _('Set line height'),
|
||||
actionSentence: _('the line height'),
|
||||
expressionLabel: _('Get the line height'),
|
||||
expressionDescription: _('Get the line height'),
|
||||
},
|
||||
];
|
||||
|
||||
addSettersAndGettersToObject(object, setterAndGetterProperties, 'BBText');
|
||||
|
@@ -102,6 +102,17 @@ namespace gdjs {
|
||||
this._pixiObject.dirty = true;
|
||||
}
|
||||
|
||||
updateStyle(): void {
|
||||
//@ts-ignore Private member usage.
|
||||
if (this._object._lineHeight > 0) {
|
||||
this._pixiObject.textStyles.default.lineHeight = this._object._lineHeight;
|
||||
} else {
|
||||
// Remove lineHeight to use automatic
|
||||
delete this._pixiObject.textStyles.default.lineHeight;
|
||||
}
|
||||
this._pixiObject.dirty = true;
|
||||
}
|
||||
|
||||
updatePosition(): void {
|
||||
if (this._object.isWrapping() && this._pixiObject.width !== 0) {
|
||||
const alignmentX =
|
||||
|
@@ -20,6 +20,8 @@ namespace gdjs {
|
||||
/** Alignment of the text: "left", "center" or "right" */
|
||||
align: 'left' | 'center' | 'right';
|
||||
verticalTextAlignment: 'top' | 'center' | 'bottom';
|
||||
/** Line height for multiline text */
|
||||
lineHeight: float;
|
||||
};
|
||||
};
|
||||
export type BBTextObjectData = ObjectData & BBTextObjectDataType;
|
||||
@@ -35,6 +37,7 @@ namespace gdjs {
|
||||
align: string;
|
||||
vta: string;
|
||||
hidden: boolean;
|
||||
lh: float;
|
||||
};
|
||||
|
||||
export type BBTextObjectNetworkSyncData = ObjectNetworkSyncData &
|
||||
@@ -61,6 +64,7 @@ namespace gdjs {
|
||||
|
||||
_textAlign: string;
|
||||
_verticalTextAlignment: string;
|
||||
_lineHeight: float;
|
||||
|
||||
_renderer: gdjs.BBTextRuntimeObjectRenderer;
|
||||
|
||||
@@ -87,6 +91,7 @@ namespace gdjs {
|
||||
this._textAlign = objectData.content.align;
|
||||
this._verticalTextAlignment =
|
||||
objectData.content.verticalTextAlignment || 'top';
|
||||
this._lineHeight = objectData.content.lineHeight || 0;
|
||||
this.hidden = !objectData.content.visible;
|
||||
|
||||
this._renderer = new gdjs.BBTextRuntimeObjectRenderer(
|
||||
@@ -142,6 +147,9 @@ namespace gdjs {
|
||||
newObjectData.content.verticalTextAlignment
|
||||
);
|
||||
}
|
||||
if (oldObjectData.content.lineHeight !== newObjectData.content.lineHeight) {
|
||||
this.setLineHeight(newObjectData.content.lineHeight || 0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -158,6 +166,7 @@ namespace gdjs {
|
||||
align: this._textAlign,
|
||||
vta: this._verticalTextAlignment,
|
||||
hidden: this.hidden,
|
||||
lh: this._lineHeight,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -196,6 +205,9 @@ namespace gdjs {
|
||||
if (this.hidden !== undefined) {
|
||||
this.hide(networkSyncData.hidden);
|
||||
}
|
||||
if (this._lineHeight !== undefined) {
|
||||
this.setLineHeight(networkSyncData.lh);
|
||||
}
|
||||
}
|
||||
|
||||
override extraInitializationFromInitialInstance(
|
||||
@@ -397,6 +409,23 @@ namespace gdjs {
|
||||
: 0)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get line height of the BBText object.
|
||||
* @return line height in pixels (0 for automatic)
|
||||
*/
|
||||
getLineHeight(): number {
|
||||
return this._lineHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set line height of the BBText object.
|
||||
* @param value line height in pixels (0 for automatic)
|
||||
*/
|
||||
setLineHeight(value: float): void {
|
||||
this._lineHeight = value;
|
||||
this._renderer.updateStyle();
|
||||
}
|
||||
}
|
||||
// @ts-ignore
|
||||
gdjs.registerObject('BBText::BBText', gdjs.BBTextRuntimeObject);
|
||||
|
@@ -110,6 +110,17 @@ module.exports = {
|
||||
.setLabel(_('Font tint'))
|
||||
.setGroup(_('Font'));
|
||||
|
||||
if (!objectContent.lineHeight) {
|
||||
objectContent.lineHeight = 0;
|
||||
}
|
||||
objectProperties
|
||||
.getOrCreate('lineHeight')
|
||||
.setValue(objectContent.lineHeight.toString())
|
||||
.setType('number')
|
||||
.setLabel(_('Line height'))
|
||||
.setDescription(_('Line height for multiline text (0 for automatic)'))
|
||||
.setGroup(_('Appearance'));
|
||||
|
||||
return objectProperties;
|
||||
};
|
||||
bitmapTextObject.content = {
|
||||
@@ -122,6 +133,7 @@ module.exports = {
|
||||
textureAtlasResourceName: '',
|
||||
align: 'left',
|
||||
verticalTextAlignment: 'top',
|
||||
lineHeight: 0,
|
||||
};
|
||||
|
||||
bitmapTextObject.updateInitialInstanceProperty = function (
|
||||
@@ -413,6 +425,21 @@ module.exports = {
|
||||
.setFunctionName('setWrappingWidth')
|
||||
.setGetter('getWrappingWidth');
|
||||
|
||||
object
|
||||
.addExpressionAndConditionAndAction(
|
||||
'number',
|
||||
'LineHeight',
|
||||
_('Line height'),
|
||||
_('the line height, in pixels, for multiline text'),
|
||||
_('the line height'),
|
||||
'',
|
||||
'res/actions/characterSize24.png'
|
||||
)
|
||||
.addParameter('object', _('Bitmap text'), 'BitmapTextObject', false)
|
||||
.useStandardParameters('number', gd.ParameterOptions.makeNewOptions().setDescription(_('Line height (0 for automatic)')))
|
||||
.setFunctionName('setLineHeight')
|
||||
.setGetter('getLineHeight');
|
||||
|
||||
return extension;
|
||||
},
|
||||
|
||||
|
@@ -96,6 +96,17 @@ namespace gdjs {
|
||||
this._pixiObject.dirty = true;
|
||||
}
|
||||
|
||||
updateStyle(): void {
|
||||
// Note: PIXI.BitmapText doesn't have built-in lineHeight support like PIXI.Text
|
||||
// The lineHeight would need to be handled at a higher level during text layout
|
||||
// For now, we just mark the object as dirty to trigger a re-render
|
||||
if (this._object._lineHeight > 0) {
|
||||
// Custom line height handling would go here
|
||||
// This is a placeholder for future implementation
|
||||
}
|
||||
this._pixiObject.dirty = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the tint of the bitmap object as a "R;G;B" string.
|
||||
* @returns the tint of bitmap object in "R;G;B" format.
|
||||
|
@@ -20,6 +20,8 @@ namespace gdjs {
|
||||
/** Alignment of the text. */
|
||||
align: 'left' | 'center' | 'right';
|
||||
verticalTextAlignment: 'top' | 'center' | 'bottom';
|
||||
/** Line height for multiline text */
|
||||
lineHeight: float;
|
||||
};
|
||||
};
|
||||
export type BitmapTextObjectData = ObjectData & BitmapTextObjectDataType;
|
||||
@@ -35,6 +37,7 @@ namespace gdjs {
|
||||
wwidth: float;
|
||||
align: string;
|
||||
vta: string;
|
||||
lh: float;
|
||||
};
|
||||
|
||||
export type BitmapTextObjectNetworkSyncData = ObjectNetworkSyncData &
|
||||
@@ -66,6 +69,7 @@ namespace gdjs {
|
||||
_wrappingWidth: float;
|
||||
_textAlign: string;
|
||||
_verticalTextAlignment: string;
|
||||
_lineHeight: float;
|
||||
|
||||
_renderer: gdjs.BitmapTextRuntimeObjectPixiRenderer;
|
||||
|
||||
@@ -92,6 +96,7 @@ namespace gdjs {
|
||||
this._textAlign = objectData.content.align;
|
||||
this._verticalTextAlignment =
|
||||
objectData.content.verticalTextAlignment || 'top';
|
||||
this._lineHeight = objectData.content.lineHeight;
|
||||
|
||||
this._renderer = new gdjs.BitmapTextRuntimeObjectRenderer(
|
||||
this,
|
||||
@@ -151,6 +156,9 @@ namespace gdjs {
|
||||
newObjectData.content.verticalTextAlignment
|
||||
);
|
||||
}
|
||||
if (oldObjectData.content.lineHeight !== newObjectData.content.lineHeight) {
|
||||
this.setLineHeight(newObjectData.content.lineHeight);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -168,6 +176,7 @@ namespace gdjs {
|
||||
wwidth: this._wrappingWidth,
|
||||
align: this._textAlign,
|
||||
vta: this._verticalTextAlignment,
|
||||
lh: this.getLineHeight(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -206,6 +215,9 @@ namespace gdjs {
|
||||
if (this._verticalTextAlignment !== undefined) {
|
||||
this.setVerticalTextAlignment(networkSyncData.vta);
|
||||
}
|
||||
if (this._lineHeight !== undefined) {
|
||||
this.setLineHeight(networkSyncData.lh);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -440,6 +452,23 @@ namespace gdjs {
|
||||
: 0)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get line height of the bitmap text object.
|
||||
* @return line height in pixels (0 for automatic)
|
||||
*/
|
||||
getLineHeight(): number {
|
||||
return this._lineHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set line height of the bitmap text object.
|
||||
* @param value line height in pixels (0 for automatic)
|
||||
*/
|
||||
setLineHeight(value: float): void {
|
||||
this._lineHeight = value;
|
||||
this._renderer.updateStyle();
|
||||
}
|
||||
}
|
||||
gdjs.registerObject(
|
||||
'BitmapText::BitmapTextObject',
|
||||
|
@@ -235,6 +235,18 @@ void DeclareTextObjectExtension(gd::PlatformExtension& extension) {
|
||||
gd::ParameterOptions::MakeNewOptions().SetDescription(
|
||||
_("Blur radius")));
|
||||
|
||||
obj.AddExpressionAndConditionAndAction("number", "LineHeight",
|
||||
_("Line height"),
|
||||
_("the line height of the text"),
|
||||
_("the line height"),
|
||||
_("Font"),
|
||||
"res/actions/characterSize24.png")
|
||||
.AddParameter("object", _("Object"), "Text")
|
||||
.UseStandardParameters(
|
||||
"number",
|
||||
gd::ParameterOptions::MakeNewOptions().SetDescription(
|
||||
_("Line height (0 for automatic)")));
|
||||
|
||||
obj.AddAction("SetSmooth",
|
||||
_("Smoothing"),
|
||||
_("Activate or deactivate text smoothing."),
|
||||
|
@@ -135,6 +135,14 @@ class TextObjectJsExtension : public gd::PlatformExtension {
|
||||
.SetFunctionName("setShadowBlurRadius")
|
||||
.SetGetter("getShadowBlurRadius");
|
||||
|
||||
GetAllExpressionsForObject("TextObject::Text")["LineHeight"]
|
||||
.SetFunctionName("getLineHeight");
|
||||
GetAllConditionsForObject("TextObject::Text")["TextObject::Text::LineHeight"]
|
||||
.SetFunctionName("getLineHeight");
|
||||
GetAllActionsForObject("TextObject::Text")["TextObject::Text::SetLineHeight"]
|
||||
.SetFunctionName("setLineHeight")
|
||||
.SetGetter("getLineHeight");
|
||||
|
||||
// Deprecated actions/conditions (use "FontSize"/"SetFontSize" instead):
|
||||
GetAllActionsForObject("TextObject::Text")["TextObject::Size"]
|
||||
.SetFunctionName("setCharacterSize")
|
||||
|
@@ -36,7 +36,8 @@ TextObject::TextObject()
|
||||
shadowOpacity(127),
|
||||
shadowAngle(90),
|
||||
shadowDistance(4),
|
||||
shadowBlurRadius(2) {}
|
||||
shadowBlurRadius(2),
|
||||
lineHeight(0) {}
|
||||
|
||||
TextObject::~TextObject() {};
|
||||
|
||||
@@ -110,6 +111,10 @@ bool TextObject::UpdateProperty(const gd::String& propertyName,
|
||||
shadowBlurRadius = newValue.To<double>();
|
||||
return true;
|
||||
}
|
||||
if (propertyName == "lineHeight") {
|
||||
lineHeight = newValue.To<double>();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -255,6 +260,15 @@ std::map<gd::String, gd::PropertyDescriptor> TextObject::GetProperties() const {
|
||||
.SetAdvanced()
|
||||
.SetQuickCustomizationVisibility(gd::QuickCustomization::Hidden);
|
||||
|
||||
objectProperties["lineHeight"]
|
||||
.SetValue(gd::String::From(lineHeight))
|
||||
.SetType("number")
|
||||
.SetLabel(_("Line height"))
|
||||
.SetMeasurementUnit(gd::MeasurementUnit::GetPixel())
|
||||
.SetGroup(_("Font"))
|
||||
.SetDescription(_("Line height for multiline text (0 for automatic)"))
|
||||
.SetQuickCustomizationVisibility(gd::QuickCustomization::Hidden);
|
||||
|
||||
return objectProperties;
|
||||
}
|
||||
|
||||
@@ -304,6 +318,7 @@ void TextObject::DoUnserializeFrom(gd::Project& project,
|
||||
SetShadowAngle(content.GetIntAttribute("shadowAngle", 90));
|
||||
SetShadowDistance(content.GetIntAttribute("shadowDistance", 4));
|
||||
SetShadowBlurRadius(content.GetIntAttribute("shadowBlurRadius", 2));
|
||||
SetLineHeight(content.GetIntAttribute("lineHeight", 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -356,6 +371,7 @@ void TextObject::DoSerializeTo(gd::SerializerElement& element) const {
|
||||
content.SetAttribute("shadowAngle", shadowAngle);
|
||||
content.SetAttribute("shadowDistance", shadowDistance);
|
||||
content.SetAttribute("shadowBlurRadius", shadowBlurRadius);
|
||||
content.SetAttribute("lineHeight", lineHeight);
|
||||
}
|
||||
|
||||
void TextObject::ExposeResources(gd::ArbitraryResourceWorker& worker) {
|
||||
|
@@ -113,6 +113,9 @@ class GD_EXTENSION_API TextObject : public gd::ObjectConfiguration {
|
||||
void SetShadowBlurRadius(double value) { shadowBlurRadius = value; };
|
||||
double GetShadowBlurRadius() const { return shadowBlurRadius; };
|
||||
|
||||
void SetLineHeight(double value) { lineHeight = value; };
|
||||
double GetLineHeight() const { return lineHeight; };
|
||||
|
||||
private:
|
||||
virtual void DoUnserializeFrom(gd::Project& project,
|
||||
const gd::SerializerElement& element) override;
|
||||
@@ -137,4 +140,5 @@ class GD_EXTENSION_API TextObject : public gd::ObjectConfiguration {
|
||||
double shadowAngle;
|
||||
double shadowDistance;
|
||||
double shadowBlurRadius;
|
||||
double lineHeight;
|
||||
};
|
||||
|
@@ -64,6 +64,9 @@ namespace gdjs {
|
||||
style.wordWrap = this._object._wrapping;
|
||||
style.wordWrapWidth = this._object._wrappingWidth;
|
||||
style.breakWords = true;
|
||||
if (this._object._lineHeight > 0) {
|
||||
style.lineHeight = this._object._lineHeight;
|
||||
}
|
||||
style.stroke = gdjs.rgbToHexNumber(
|
||||
this._object._outlineColor[0],
|
||||
this._object._outlineColor[1],
|
||||
|
@@ -34,6 +34,7 @@ namespace gdjs {
|
||||
shadowDistance: float;
|
||||
shadowAngle: float;
|
||||
shadowBlurRadius: float;
|
||||
lineHeight: float;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -62,6 +63,7 @@ namespace gdjs {
|
||||
sha: float;
|
||||
shb: float;
|
||||
pad: integer;
|
||||
lh: float;
|
||||
};
|
||||
|
||||
export type TextObjectNetworkSyncData = ObjectNetworkSyncData &
|
||||
@@ -104,6 +106,7 @@ namespace gdjs {
|
||||
_padding: integer = 5;
|
||||
_str: string;
|
||||
_renderer: gdjs.TextRuntimeObjectRenderer;
|
||||
_lineHeight: float = 0;
|
||||
|
||||
// We can store the scale as nothing else can change it.
|
||||
_scaleX: number = 1;
|
||||
@@ -140,6 +143,8 @@ namespace gdjs {
|
||||
this._shadowBlur = content.shadowBlurRadius;
|
||||
this._shadowAngle = content.shadowAngle;
|
||||
|
||||
this._lineHeight = content.lineHeight || 0;
|
||||
|
||||
this._renderer = new gdjs.TextRuntimeObjectRenderer(
|
||||
this,
|
||||
instanceContainer
|
||||
@@ -211,6 +216,9 @@ namespace gdjs {
|
||||
if (oldContent.shadowBlurRadius !== newContent.shadowBlurRadius) {
|
||||
this.setShadowBlurRadius(newContent.shadowBlurRadius);
|
||||
}
|
||||
if (oldContent.lineHeight !== newContent.lineHeight) {
|
||||
this.setLineHeight(newContent.lineHeight || 0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -239,6 +247,7 @@ namespace gdjs {
|
||||
sha: this._shadowAngle,
|
||||
shb: this._shadowBlur,
|
||||
pad: this._padding,
|
||||
lh: this._lineHeight,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -315,6 +324,9 @@ namespace gdjs {
|
||||
if (networkSyncData.pad !== undefined) {
|
||||
this.setPadding(networkSyncData.pad);
|
||||
}
|
||||
if (networkSyncData.lh !== undefined) {
|
||||
this.setLineHeight(networkSyncData.lh);
|
||||
}
|
||||
}
|
||||
|
||||
override getRendererObject() {
|
||||
@@ -929,6 +941,23 @@ namespace gdjs {
|
||||
this._padding = value;
|
||||
this._renderer.updateStyle();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get line height of the text object.
|
||||
* @return line height in pixels (0 for automatic)
|
||||
*/
|
||||
getLineHeight(): number {
|
||||
return this._lineHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set line height of the text object.
|
||||
* @param value line height in pixels (0 for automatic)
|
||||
*/
|
||||
setLineHeight(value: float): void {
|
||||
this._lineHeight = value;
|
||||
this._renderer.updateStyle();
|
||||
}
|
||||
}
|
||||
gdjs.registerObject('TextObject::Text', gdjs.TextRuntimeObject);
|
||||
}
|
||||
|
@@ -89,6 +89,24 @@ export default class TextEditor extends React.Component<EditorProps, void> {
|
||||
this.forceUpdate();
|
||||
}}
|
||||
/>
|
||||
<MiniToolbarText>
|
||||
<Trans>Line height:</Trans>
|
||||
</MiniToolbarText>
|
||||
<SemiControlledTextField
|
||||
commitOnBlur
|
||||
id="text-object-line-height"
|
||||
type="number"
|
||||
margin="none"
|
||||
style={styles.sizeTextField}
|
||||
value={textObjectConfiguration.getLineHeight()}
|
||||
onChange={value => {
|
||||
textObjectConfiguration.setLineHeight(
|
||||
parseInt(value, 10) || 0
|
||||
);
|
||||
this.forceUpdate();
|
||||
}}
|
||||
placeholder="Auto"
|
||||
/>
|
||||
<MiniToolbarText>
|
||||
<Trans>Color:</Trans>
|
||||
</MiniToolbarText>
|
||||
|
@@ -32,6 +32,7 @@ export default class RenderedTextInstance extends RenderedInstance {
|
||||
_shadowColor = '0;0;0';
|
||||
_shadowOpacity = 127;
|
||||
_shadowBlurRadius = 2;
|
||||
_lineHeight = 0;
|
||||
|
||||
constructor(
|
||||
project: gdProject,
|
||||
@@ -113,7 +114,8 @@ export default class RenderedTextInstance extends RenderedInstance {
|
||||
textObjectConfiguration.getShadowBlurRadius() !==
|
||||
this._shadowBlurRadius ||
|
||||
this._instance.hasCustomSize() !== this._wrapping ||
|
||||
(this.getCustomWidth() !== this._wrappingWidth && this._wrapping)
|
||||
(this.getCustomWidth() !== this._wrappingWidth && this._wrapping) ||
|
||||
textObjectConfiguration.getLineHeight() !== this._lineHeight
|
||||
) {
|
||||
this._isItalic = textObjectConfiguration.isItalic();
|
||||
this._isBold = textObjectConfiguration.isBold();
|
||||
@@ -132,6 +134,7 @@ export default class RenderedTextInstance extends RenderedInstance {
|
||||
this._shadowColor = textObjectConfiguration.getShadowColor();
|
||||
this._shadowOpacity = textObjectConfiguration.getShadowOpacity();
|
||||
this._shadowBlurRadius = textObjectConfiguration.getShadowBlurRadius();
|
||||
this._lineHeight = textObjectConfiguration.getLineHeight();
|
||||
|
||||
this._wrapping = this._instance.hasCustomSize();
|
||||
this._wrappingWidth = this.getCustomWidth();
|
||||
@@ -172,6 +175,9 @@ export default class RenderedTextInstance extends RenderedInstance {
|
||||
style.wordWrapWidth = this._wrappingWidth <= 1 ? 1 : this._wrappingWidth;
|
||||
style.breakWords = true;
|
||||
style.align = this._textAlignment;
|
||||
if (this._lineHeight > 0) {
|
||||
style.lineHeight = this._lineHeight;
|
||||
}
|
||||
|
||||
style.stroke = rgbStringToHexNumber(this._outlineColor);
|
||||
style.strokeThickness = this._isOutlineEnabled
|
||||
|
Reference in New Issue
Block a user