Allow to change text of custom objects like any text object (#6450)

This commit is contained in:
D8H
2024-03-14 11:50:55 +01:00
committed by GitHub
parent 53d19dd628
commit 0f35e48690
11 changed files with 61 additions and 6 deletions

View File

@@ -141,6 +141,10 @@ gd::ObjectMetadata &MetadataDeclarationHelper::DeclareObjectMetadata(
objectMetadata.AddDefaultBehavior("EffectCapability::EffectBehavior");
objectMetadata.AddDefaultBehavior("OpacityCapability::OpacityBehavior");
}
if (eventsBasedObject.IsTextContainer()) {
objectMetadata
.AddDefaultBehavior("TextContainerCapability::TextContainerBehavior");
}
// TODO EBO Use full type to identify object to avoid collision.
// Objects are identified by their name alone.

View File

@@ -109,6 +109,19 @@ gd::String ObjectCodeGenerator::GenerateRuntimeObjectCompleteCode(
}
return updateFromObjectCode;
},
// generateTextContainerCode
[&]() {
return gd::String(R"jscode_template(
// gdjs.TextContainer interface implementation
_text = '';
getText() {
return this._text;
}
setText(text) {
this._text = text;
}
)jscode_template");
});
}
@@ -119,7 +132,8 @@ gd::String ObjectCodeGenerator::GenerateRuntimeObjectTemplateCode(
std::function<gd::String()> generateInitializePropertiesCode,
std::function<gd::String()> generatePropertiesCode,
std::function<gd::String()> generateMethodsCode,
std::function<gd::String()> generateUpdateFromObjectDataCode) {
std::function<gd::String()> generateUpdateFromObjectDataCode,
std::function<gd::String()> generateTextContainerCode) {
return gd::String(R"jscode_template(
CODE_NAMESPACE = CODE_NAMESPACE || {};
@@ -149,6 +163,8 @@ CODE_NAMESPACE.RUNTIME_OBJECT_CLASSNAME = class RUNTIME_OBJECT_CLASSNAME extends
// Properties:
PROPERTIES_CODE
TEXT_CONTAINER_CODE
}
// Methods:
@@ -168,6 +184,7 @@ gdjs.registerObject("EXTENSION_NAME::OBJECT_NAME", CODE_NAMESPACE.RUNTIME_OBJECT
generateInitializePropertiesCode())
.FindAndReplace("UPDATE_FROM_OBJECT_DATA_CODE", generateUpdateFromObjectDataCode())
.FindAndReplace("PROPERTIES_CODE", generatePropertiesCode())
.FindAndReplace("TEXT_CONTAINER_CODE", eventsBasedObject.IsTextContainer() ? generateTextContainerCode() : "")
.FindAndReplace("METHODS_CODE", generateMethodsCode());
;
}

View File

@@ -74,7 +74,8 @@ class ObjectCodeGenerator {
std::function<gd::String()> generateInitializePropertiesCode,
std::function<gd::String()> generateMethodsCode,
std::function<gd::String()> generatePropertiesCode,
std::function<gd::String()> generateUpdateFromObjectDataCode);
std::function<gd::String()> generateUpdateFromObjectDataCode,
std::function<gd::String()> generateTextContainerCode);
gd::String GenerateRuntimeObjectPropertyTemplateCode(
const gd::EventsBasedObject& eventsBasedObject,

View File

@@ -18,7 +18,7 @@ namespace gdjs {
}
/**
* A behavior that forwards the Animatable interface to its object.
* A behavior that forwards the TextContainer interface to its object.
*/
export class TextContainerBehavior
extends gdjs.RuntimeBehavior