Explorar o código

Fixed an issue where input box caret was causing the text to flicker up and down by one pixel on any input

BearishSun %!s(int64=10) %!d(string=hai) anos
pai
achega
7edbbf4ef2
Modificáronse 1 ficheiros con 5 adicións e 2 borrados
  1. 5 2
      BansheeEngine/Source/BsGUIInputBox.cpp

+ 5 - 2
BansheeEngine/Source/BsGUIInputBox.cpp

@@ -956,8 +956,6 @@ namespace BansheeEngine
 		Vector2I caretPos = gGUIManager().getInputCaretTool()->getCaretPosition(textOffset);
 		UINT32 caretHeight = gGUIManager().getInputCaretTool()->getCaretHeight();
 		UINT32 caretWidth = 1;
-		INT32 caretRight = caretPos.x + (INT32)caretWidth;
-		INT32 caretBottom = caretPos.y + (INT32)caretHeight;
 
 		INT32 left = textOffset.x - mTextOffset.x;
 		// Include caret width here because we don't want to scroll if just the caret is outside the bounds
@@ -966,6 +964,11 @@ namespace BansheeEngine
 		INT32 top = textOffset.y - mTextOffset.y;
 		INT32 bottom = top + (INT32)textDesc.height;
 
+		// If caret is too high to display we don't want the offset to keep adjusting itself
+		caretHeight = std::min(caretHeight, (UINT32)(bottom - top));
+		INT32 caretRight = caretPos.x + (INT32)caretWidth;
+		INT32 caretBottom = caretPos.y + (INT32)caretHeight;
+
 		Vector2I offset;
 		if(caretPos.x < left)
 		{