diff --git a/gui/input.cpp b/gui/input.cpp
index 68bd163..c12ecc2 100644
--- a/gui/input.cpp
+++ b/gui/input.cpp
@@ -39,8 +39,8 @@
 
 extern "C" {
 #include "../twcommon.h"
-#include "../minuitwrp/minui.h"
 }
+#include "../minuitwrp/minui.h"
 
 #include "rapidxml.hpp"
 #include "objects.hpp"
@@ -196,7 +196,7 @@
 			maskedValue += mMask;
 		displayValue = maskedValue;
 	}
-	textWidth = gr_measureEx(displayValue.c_str(), fontResource);
+	textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 	if (textWidth <= mRenderW) {
 		lastX = x;
 		scrollingX = 0;
@@ -209,7 +209,7 @@
 	if (skipChars && skipChars < displayValue.size())
 		displayValue.erase(0, skipChars);
 
-	textWidth = gr_measureEx(displayValue.c_str(), fontResource);
+	textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 	mRendered = false;
 
 	int deltaX, deltaText, newWidth;
@@ -222,11 +222,11 @@
 		if (mCursorLocation == -1) {
 			displayValue = originalValue;
 			skipChars = 0;
-			textWidth = gr_measureEx(displayValue.c_str(), fontResource);
+			textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 			while (textWidth > mRenderW) {
 				displayValue.erase(0, 1);
 				skipChars++;
-				textWidth = gr_measureEx(displayValue.c_str(), fontResource);
+				textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 			}
 			scrollingX = mRenderW - textWidth;
 			mInputText->SkipCharCount(skipChars);
@@ -237,12 +237,12 @@
 
 			cursorLocate = displayValue;
 			cursorLocate.resize(mCursorLocation);
-			textWidth = gr_measureEx(cursorLocate.c_str(), fontResource);
+			textWidth = gr_ttf_measureEx(cursorLocate.c_str(), fontResource);
 			while (textWidth > mRenderW) {
 				skipChars++;
 				mCursorLocation--;
 				cursorLocate.erase(0, 1);
-				textWidth = gr_measureEx(cursorLocate.c_str(), fontResource);
+				textWidth = gr_ttf_measureEx(cursorLocate.c_str(), fontResource);
 				adjust_scrollingX = -1;
 			}
 			if (adjust_scrollingX) {
@@ -261,7 +261,7 @@
 				}
 				insertChar = originalValue.substr(skipChars - 1, 1);
 				displayValue.insert(0, insertChar);
-				newWidth = gr_measureEx(displayValue.c_str(), fontResource);
+				newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 				deltaText = newWidth - textWidth;
 				if (newWidth > mRenderW) {
 					scrollingX = mRenderW - textWidth;
@@ -289,7 +289,7 @@
 			}
 			insertChar = originalValue.substr(skipChars - 1, 1);
 			displayValue.insert(0, insertChar);
-			newWidth = gr_measureEx(displayValue.c_str(), fontResource);
+			newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 			deltaText = newWidth - textWidth;
 			if (deltaText < deltaX) {
 				lastX += deltaText;
@@ -324,7 +324,7 @@
 			deltaX = lastX - x;
 			displayValue.erase(0, 1);
 			skipChars++;
-			newWidth = gr_measureEx(displayValue.c_str(), fontResource);
+			newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 			deltaText = textWidth - newWidth;
 			if (newWidth <= mRenderW) {
 				scrollingX = mRenderW - newWidth;
@@ -407,15 +407,15 @@
 
 					cursorDisplay = displayValue;
 					cursorDisplay.resize(mCursorLocation);
-					cursorX = gr_measureEx(cursorDisplay.c_str(), fontResource) + mRenderX;
+					cursorX = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource) + mRenderX;
 				} else {
 					// Cursor location is after the end of the text  - reset to -1
 					mCursorLocation = -1;
-					cursorX = gr_measureEx(displayValue.c_str(), fontResource) + mRenderX;
+					cursorX = gr_ttf_measureEx(displayValue.c_str(), fontResource) + mRenderX;
 				}
 			} else {
 				// Cursor is at the end (-1)
-				cursorX = gr_measureEx(displayValue.c_str(), fontResource) + mRenderX;
+				cursorX = gr_ttf_measureEx(displayValue.c_str(), fontResource) + mRenderX;
 			}
 		}
 		cursorX += scrollingX;
@@ -534,7 +534,7 @@
 			for(index=0; index<displayValue.size(); index++)
 			{
 				cursorString = displayValue.substr(0, index);
-				cursorX = gr_measureEx(cursorString.c_str(), fontResource) + mRenderX;
+				cursorX = gr_ttf_measureEx(cursorString.c_str(), fontResource) + mRenderX;
 				if (cursorX > x) {
 					if (index > 0)
 						mCursorLocation = index - 1;
