Browse Source

Bugfix: Fixing focus handling for compound GUI fields

BearishSun 6 years ago
parent
commit
bd9971f1ee

+ 2 - 1
Source/EditorCore/GUI/BsGUIFloatField.cpp

@@ -33,6 +33,7 @@ namespace bs
 
 		setValue(0);
 		mInputBox->setText("0");
+		mFocusElement = mInputBox;
 	}
 
 	bool GUIFloatField::_hasCustomCursor(const Vector2I position, CursorType& type) const
@@ -228,7 +229,7 @@ namespace bs
 		// problems can occur when user types in "0." and the field
 		// updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
-		if (value != curValue)
+		if (value != curValue || mInputBox->getText().empty())
 			mInputBox->setText(toString(value));
 	}
 

+ 2 - 1
Source/EditorCore/GUI/BsGUIIntField.cpp

@@ -33,6 +33,7 @@ namespace bs
 
 		setValue(0);
 		mInputBox->setText("0");
+		mFocusElement = mInputBox;
 	}
 
 	bool GUIIntField::_hasCustomCursor(const Vector2I position, CursorType& type) const
@@ -243,7 +244,7 @@ namespace bs
 		// problems can occur when user types in "0." and the field
 		// updates back to "0" effectively making "." unusable
 		float curValue = parseFloat(mInputBox->getText());
-		if (value != curValue)
+		if (value != curValue || mInputBox->getText().empty())
 			mInputBox->setText(toString(value));
 	}
 

+ 1 - 0
Source/EditorCore/GUI/BsGUISliderField.cpp

@@ -32,6 +32,7 @@ namespace bs
 
 		setValue(0);
 		mInputBox->setText("0");
+		mFocusElement = mInputBox;
 	}
 
 	float GUISliderField::getValue() const

+ 4 - 4
Source/EditorCore/GUI/BsGUITabButton.cpp

@@ -52,18 +52,18 @@ namespace bs
 			getStyleName<GUITabButton>(styleName), toggleGroup, index, content, GUIDimensions::create(options));
 	}
 
-	void GUITabButton::toggleOn()
+	void GUITabButton::_toggleOn(bool triggerEvents)
 	{
 		_setElementDepth(0);
 
-		GUIToggle::toggleOn();
+		GUIToggle::_toggleOn(triggerEvents);
 	}
 
-	void GUITabButton::toggleOff()
+	void GUITabButton::_toggleOff(bool triggerEvents)
 	{
 		_setElementDepth(2);
 
-		GUIToggle::toggleOff();
+		GUIToggle::_toggleOff(triggerEvents);
 	}
 
 	void GUITabButton::_setDraggedState(bool active) 

+ 7 - 7
Source/EditorCore/GUI/BsGUITabButton.h

@@ -79,12 +79,6 @@ namespace bs
 		/**	Returns the unique index for this tab button. */
 		UINT32 getIndex() const { return mIndex; }
 
-		/** @copydoc GUIToggle::toggleOn */
-		void toggleOn() override;
-
-		/** @copydoc GUIToggle::toggleOff */
-		void toggleOff() override;
-
 		/** Changes the button state to dragged or not dragged, resulting primarily in a visual change. */
 		void _setDraggedState(bool active);
 
@@ -102,8 +96,14 @@ namespace bs
 	protected:
 		GUITabButton(const String& styleName, const SPtr<GUIToggleGroup>& toggleGroup, UINT32 index, const GUIContent& content, const GUIDimensions& dimensions);
 
+		/** @copydoc GUIToggle::toggleOn */
+		void _toggleOn(bool triggerEvents) override;
+
+		/** @copydoc GUIToggle::toggleOff */
+		void _toggleOff(bool triggerEvents) override;
+
 		/** @copydoc GUIElement::_mouseEvent */
-		virtual bool _mouseEvent(const GUIMouseEvent& ev) override;
+		bool _mouseEvent(const GUIMouseEvent& ev) override;
 
 		UINT32 mIndex;
 		Vector2I mDragStartPosition;

+ 4 - 11
Source/EditorCore/GUI/BsGUIToggleField.cpp

@@ -27,9 +27,9 @@ namespace bs
 		mValue = value;
 
 		if(value) 
-			mToggle->toggleOn();
+			mToggle->_toggleOn(false);
 		else
-			mToggle->toggleOff();
+			mToggle->_toggleOff(false);
 	}
 
 	void GUIToggleField::setTint(const Color& color)
@@ -40,14 +40,6 @@ namespace bs
 		mToggle->setTint(color);
 	}
 
-	void GUIToggleField::_setValue(bool value, bool triggerEvent)
-	{
-		setValue(value);
-
-		if (triggerEvent)
-			onValueChanged(value);
-	}
-
 	void GUIToggleField::styleUpdated()
 	{
 		if (mLabel != nullptr)
@@ -58,7 +50,8 @@ namespace bs
 
 	void GUIToggleField::valueChanged(bool newValue)
 	{
-		_setValue(newValue, true);
+		setValue(newValue);
+		onValueChanged(newValue);
 	}
 
 	const String& GUIToggleField::getGUITypeName()

+ 0 - 12
Source/EditorCore/GUI/BsGUIToggleField.h

@@ -37,18 +37,6 @@ namespace bs
 		void setTint(const Color& color) override;
 
 		Event<void(bool)> onValueChanged; /** Triggered when the value of the toggle changes. */
-
-		/** @name Internal 
-		 *  @{
-		 */
-
-		/**
-		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
-		 * event.
-		 */
-		void _setValue(bool value, bool triggerEvent);
-
-		/** @} */
 	protected:
 		virtual ~GUIToggleField() { }
 

+ 2 - 2
Source/EditorCore/GUI/BsGUIVector2Field.cpp

@@ -54,8 +54,8 @@ namespace bs
 	{
 		switch(component)
 		{
-		case VectorComponent::X: mFieldX->setFocus(focus); break;
-		case VectorComponent::Y: mFieldY->setFocus(focus); break;
+		case VectorComponent::X: mFieldX->setFocus(focus, true); break;
+		case VectorComponent::Y: mFieldY->setFocus(focus, true); break;
 		default: break;
 		}
 	}

+ 3 - 3
Source/EditorCore/GUI/BsGUIVector3Field.cpp

@@ -62,9 +62,9 @@ namespace bs
 	{
 		switch(component)
 		{
-		case VectorComponent::X: mFieldX->setFocus(focus); break;
-		case VectorComponent::Y: mFieldY->setFocus(focus); break;
-		case VectorComponent::Z: mFieldZ->setFocus(focus); break;
+		case VectorComponent::X: mFieldX->setFocus(focus, true); break;
+		case VectorComponent::Y: mFieldY->setFocus(focus, true); break;
+		case VectorComponent::Z: mFieldZ->setFocus(focus, true); break;
 		default: break;
 		}
 	}

+ 4 - 4
Source/EditorCore/GUI/BsGUIVector4Field.cpp

@@ -77,10 +77,10 @@ namespace bs
 	{
 		switch(component)
 		{
-		case VectorComponent::X: mFieldX->setFocus(focus); break;
-		case VectorComponent::Y: mFieldY->setFocus(focus); break;
-		case VectorComponent::Z: mFieldZ->setFocus(focus); break;
-		case VectorComponent::W: mFieldW->setFocus(focus); break;
+		case VectorComponent::X: mFieldX->setFocus(focus, true); break;
+		case VectorComponent::Y: mFieldY->setFocus(focus, true); break;
+		case VectorComponent::Z: mFieldZ->setFocus(focus, true); break;
+		case VectorComponent::W: mFieldW->setFocus(focus, true); break;
 		default: break;
 		}
 	}

+ 1 - 1
Source/bsf

@@ -1 +1 @@
-Subproject commit b66f7f77c74034a4af392ac383e58e3317c3510c
+Subproject commit 86cd6355fd77e97a94f52bb4fd1269301b75159b