Browse Source

Avoid unnecessary calls to the text widget formatting procedure

Michael Ragazzon 3 years ago
parent
commit
db6fafd530

+ 3 - 11
Source/Core/Elements/InputTypeText.cpp

@@ -38,20 +38,12 @@ namespace Rml {
 InputTypeText::InputTypeText(ElementFormControlInput* element, Visibility visibility) : InputType(element)
 {
 	if (visibility == VISIBLE)
-		widget = new WidgetTextInputSingleLine(element);
+		widget = MakeUnique<WidgetTextInputSingleLine>(element);
 	else
-		widget = new WidgetTextInputSingleLinePassword(element);
-
-	widget->SetMaxLength(element->GetAttribute< int >("maxlength", -1));
-	widget->SetValue(element->GetAttribute< String >("value", ""));
-
-	size = element->GetAttribute< int >("size", 20);
+		widget = MakeUnique<WidgetTextInputSingleLinePassword>(element);
 }
 
-InputTypeText::~InputTypeText()
-{
-	delete widget;
-}
+InputTypeText::~InputTypeText() {}
 
 // Called every update from the host element.
 void InputTypeText::OnUpdate()

+ 2 - 2
Source/Core/Elements/InputTypeText.h

@@ -82,9 +82,9 @@ public:
 	bool GetIntrinsicDimensions(Vector2f& dimensions, float& ratio) override;
 
 private:
-	int size;
+	int size = 20;
 
-	WidgetTextInput* widget;
+	UniquePtr<WidgetTextInput> widget;
 };
 
 } // namespace Rml

+ 8 - 9
Source/Core/Elements/WidgetTextInput.cpp

@@ -259,15 +259,6 @@ void WidgetTextInput::OnResize()
 	Vector2f text_position = parent->GetBox().GetPosition(Box::CONTENT);
 	text_element->SetOffset(text_position, parent);
 	selected_text_element->SetOffset(text_position, parent);
-
-	Vector2f new_internal_dimensions = parent->GetBox().GetSize(Box::CONTENT);
-	if (new_internal_dimensions != internal_dimensions)
-	{
-		internal_dimensions = new_internal_dimensions;
-
-		FormatElement();
-		UpdateCursorPosition(true);
-	}
 }
 
 // Renders the cursor, if it is visible.
@@ -289,6 +280,14 @@ void WidgetTextInput::OnRender()
 void WidgetTextInput::OnLayout()
 {
 	FormatElement();
+
+	Vector2f new_internal_dimensions = parent->GetBox().GetSize(Box::CONTENT);
+	if (new_internal_dimensions != internal_dimensions)
+	{
+		internal_dimensions = new_internal_dimensions;
+		UpdateCursorPosition(true);
+	}
+
 	parent->SetScrollLeft(scroll_offset.x);
 	parent->SetScrollTop(scroll_offset.y);
 }