Removed static local variables.

It might have been a problem when multiple instances were created.
diff --git a/TextEditor.cpp b/TextEditor.cpp
index 1f90db1..53e5553 100644
--- a/TextEditor.cpp
+++ b/TextEditor.cpp
@@ -47,6 +47,7 @@
 	, mHandleMouseInputs(true)

 	, mIgnoreImGuiChild(false)

 	, mShowWhitespaces(true)

+	, mStartTime(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count())

 {

 	SetPalette(GetDarkPalette());

 	SetLanguageDefinition(LanguageDefinition::HLSL());

@@ -863,8 +864,7 @@
 		mPalette[i] = ImGui::ColorConvertFloat4ToU32(color);

 	}

 

-	static std::string buffer;

-	assert(buffer.empty());

+	assert(mLineBuffer.empty());

 

 	auto contentSize = ImGui::GetWindowContentRegionMax();

 	auto drawList = ImGui::GetWindowDrawList();

@@ -975,10 +975,8 @@
 				// Render the cursor

 				if (focused)

 				{

-					static auto timeStart = std::chrono::system_clock::now();

-					auto timeEnd = std::chrono::system_clock::now();

-					auto diff = timeEnd - timeStart;

-					auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(diff).count();

+					auto timeEnd = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();

+					auto elapsed = timeEnd - mStartTime;

 					if (elapsed > 400)

 					{

 						float width = 1.0f;

@@ -1005,7 +1003,7 @@
 						ImVec2 cend(textScreenPos.x + cx + width, lineStartScreenPos.y + mCharAdvance.y);

 						drawList->AddRectFilled(cstart, cend, mPalette[(int)PaletteIndex::Cursor]);

 						if (elapsed > 800)

-							timeStart = timeEnd;

+							mStartTime = timeEnd;

 					}

 				}

 			}

@@ -1019,13 +1017,13 @@
 				auto& glyph = line[i];

 				auto color = GetGlyphColor(glyph);

 

-				if ((color != prevColor || glyph.mChar == '\t' || glyph.mChar == ' ') && !buffer.empty())

+				if ((color != prevColor || glyph.mChar == '\t' || glyph.mChar == ' ') && !mLineBuffer.empty())

 				{

 					const ImVec2 newOffset(textScreenPos.x + bufferOffset.x, textScreenPos.y + bufferOffset.y);

-					drawList->AddText(newOffset, prevColor, buffer.c_str());

-					auto textSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, buffer.c_str(), nullptr, nullptr);

+					drawList->AddText(newOffset, prevColor, mLineBuffer.c_str());

+					auto textSize = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, mLineBuffer.c_str(), nullptr, nullptr);

 					bufferOffset.x += textSize.x;

-					buffer.clear();

+					mLineBuffer.clear();

 				}

 				prevColor = color;

 

@@ -1066,16 +1064,16 @@
 				{

 					auto l = UTF8CharLength(glyph.mChar);

 					while (l-- > 0)

-						buffer.push_back(line[i++].mChar);

+						mLineBuffer.push_back(line[i++].mChar);

 				}

 				++columnNo;

 			}

 

-			if (!buffer.empty())

+			if (!mLineBuffer.empty())

 			{

 				const ImVec2 newOffset(textScreenPos.x + bufferOffset.x, textScreenPos.y + bufferOffset.y);

-				drawList->AddText(newOffset, prevColor, buffer.c_str());

-				buffer.clear();

+				drawList->AddText(newOffset, prevColor, mLineBuffer.c_str());

+				mLineBuffer.clear();

 			}

 

 			++lineNo;

diff --git a/TextEditor.h b/TextEditor.h
index 65436de..bd52e13 100644
--- a/TextEditor.h
+++ b/TextEditor.h
@@ -382,6 +382,8 @@
 	ErrorMarkers mErrorMarkers;

 	ImVec2 mCharAdvance;

 	Coordinates mInteractiveStart, mInteractiveEnd;

+	std::string mLineBuffer;

+	uint64_t mStartTime;

 

 	float mLastClick;

 };