ui: Make pattern editor console use another text editor

This commit is contained in:
WerWolv
2023-06-13 22:58:57 +02:00
parent 5c31b5cf0d
commit dd832bfa7e
4 changed files with 81 additions and 54 deletions

View File

@@ -212,6 +212,9 @@ public:
bool IsTextChanged() const { return mTextChanged; }
bool IsCursorPositionChanged() const { return mCursorPositionChanged; }
void SetShowCursor(bool aValue) { mShowCursor = aValue; }
void SetShowLineNumbers(bool aValue) { mShowLineNumbers = aValue; }
bool IsColorizerEnabled() const { return mColorizerEnabled; }
void SetColorizerEnable(bool aValue);
@@ -386,6 +389,8 @@ private:
uint64_t mStartTime;
float mLastClick;
bool mShowCursor;
bool mShowLineNumbers;
};
bool TokenizeCStyleString(const char * in_begin, const char * in_end, const char *& out_begin, const char *& out_end);

View File

@@ -24,7 +24,7 @@ bool equals(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Bi
TextEditor::Palette TextEditor::sPaletteBase = TextEditor::GetDarkPalette();
TextEditor::TextEditor()
: mLineSpacing(1.0f), mUndoIndex(0), mTabSize(4), mOverwrite(false), mReadOnly(false), mWithinRender(false), mScrollToCursor(false), mScrollToTop(false), mTextChanged(false), mColorizerEnabled(true), mTextStart(20.0f), mLeftMargin(10), mCursorPositionChanged(false), mColorRangeMin(0), mColorRangeMax(0), mSelectionMode(SelectionMode::Normal), mCheckComments(true), mLastClick(-1.0f), mHandleKeyboardInputs(true), mHandleMouseInputs(true), mIgnoreImGuiChild(false), mShowWhitespaces(true), mStartTime(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()) {
: mLineSpacing(1.0f), mUndoIndex(0), mTabSize(4), mOverwrite(false), mReadOnly(false), mWithinRender(false), mScrollToCursor(false), mScrollToTop(false), mTextChanged(false), mColorizerEnabled(true), mTextStart(20.0f), mLeftMargin(10), mCursorPositionChanged(false), mColorRangeMin(0), mColorRangeMax(0), mSelectionMode(SelectionMode::Normal), mCheckComments(true), mLastClick(-1.0f), mHandleKeyboardInputs(true), mHandleMouseInputs(true), mIgnoreImGuiChild(false), mShowWhitespaces(true), mShowCursor(true), mShowLineNumbers(true), mStartTime(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()) {
SetLanguageDefinition(LanguageDefinition::HLSL());
mLines.push_back(Line());
}
@@ -788,7 +788,11 @@ void TextEditor::Render() {
// Deduce mTextStart by evaluating mLines size (global lineMax) plus two spaces as text width
char buf[16];
snprintf(buf, 16, " %d ", globalLineMax);
if (mShowLineNumbers)
snprintf(buf, 16, " %d ", globalLineMax);
else
buf[0] = '\0';
mTextStart = ImGui::GetFont()->CalcTextSizeA(ImGui::GetFontSize(), FLT_MAX, -1.0f, buf, nullptr, nullptr).x + mLeftMargin;
if (!mLines.empty()) {
@@ -859,7 +863,7 @@ void TextEditor::Render() {
drawList->AddCircle(start + ImVec2(0, mCharAdvance.y) / 2, mCharAdvance.y / 3, mPalette[(int)PaletteIndex::Default]);
}
if (mState.mCursorPosition.mLine == lineNo) {
if (mState.mCursorPosition.mLine == lineNo && mShowCursor) {
auto focused = ImGui::IsWindowFocused();
// Highlight the current line (where the cursor is)