Browse Source

Introjucer: editor scrolling changes.

tags/2021-05-28
jules 13 years ago
parent
commit
68880492f1
4 changed files with 31 additions and 13 deletions
  1. +19
    -7
      extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp
  2. +2
    -1
      extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h
  3. +9
    -5
      modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp
  4. +1
    -0
      modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h

+ 19
- 7
extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp View File

@@ -131,16 +131,28 @@ void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
getAppSettings().appearance.settings.addListener (this);
}
void SourceCodeEditor::highlightLine (int lineNum, int characterIndex)
void SourceCodeEditor::scrollToKeepRangeOnScreen (const Range<int>& range)
{
if (lineNum <= editor->getFirstLineOnScreen()
|| lineNum >= editor->getFirstLineOnScreen() + editor->getNumLinesOnScreen() - 1)
const int space = jmin (10, editor->getNumLinesOnScreen() / 3);
const CodeDocument::Position start (editor->getDocument(), range.getStart());
const CodeDocument::Position end (editor->getDocument(), range.getEnd());
editor->scrollToKeepLinesOnScreen (Range<int> (start.getLineNumber() - space, end.getLineNumber() + space));
}
void SourceCodeEditor::highlight (const Range<int>& range, bool cursorAtStart)
{
scrollToKeepRangeOnScreen (range);
if (cursorAtStart)
{
editor->scrollToLine (jmax (0, jmin (lineNum - editor->getNumLinesOnScreen() / 3,
editor->getDocument().getNumLines() - editor->getNumLinesOnScreen())));
editor->moveCaretTo (CodeDocument::Position (editor->getDocument(), range.getEnd()), false);
editor->moveCaretTo (CodeDocument::Position (editor->getDocument(), range.getStart()), true);
}
else
{
editor->setHighlightedRegion (range);
}
editor->moveCaretTo (CodeDocument::Position (editor->getDocument(), lineNum - 1, characterIndex), false);
}
void SourceCodeEditor::resized()


+ 2
- 1
extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h View File

@@ -143,7 +143,8 @@ public:
void createEditor (CodeDocument& codeDocument);
void setEditor (CodeEditorComponent*);
void highlightLine (int lineNum, int characterIndex);
void scrollToKeepRangeOnScreen (const Range<int>& range);
void highlight (const Range<int>& range, bool cursorAtStart);
ScopedPointer<CodeEditorComponent> editor;


+ 9
- 5
modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp View File

@@ -704,16 +704,20 @@ void CodeEditorComponent::scrollBy (int deltaLines)
scrollToLine (firstLineOnScreen + deltaLines);
}
void CodeEditorComponent::scrollToKeepLinesOnScreen (const Range<int>& lines)
{
if (lines.getStart() < firstLineOnScreen)
scrollBy (lines.getStart() - firstLineOnScreen);
else if (lines.getEnd() >= firstLineOnScreen + linesOnScreen)
scrollBy (lines.getEnd() - (firstLineOnScreen + linesOnScreen - 1));
}
void CodeEditorComponent::scrollToKeepCaretOnScreen()
{
if (getWidth() > 0 && getHeight() > 0)
{
const int caretLine = caretPos.getLineNumber();
if (caretLine < firstLineOnScreen)
scrollBy (caretLine - firstLineOnScreen);
else if (caretLine >= firstLineOnScreen + linesOnScreen)
scrollBy (caretLine - (firstLineOnScreen + linesOnScreen - 1));
scrollToKeepLinesOnScreen (Range<int> (caretLine, caretLine));
const int column = indexToColumn (caretPos.getLineNumber(), caretPos.getIndexInLine());
if (column >= xOffset + columnsOnScreen - 1)


+ 1
- 0
modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h View File

@@ -142,6 +142,7 @@ public:
void scrollBy (int deltaLines);
void scrollToColumn (int newFirstColumnOnScreen);
void scrollToKeepCaretOnScreen();
void scrollToKeepLinesOnScreen (const Range<int>& linesToShow);
void insertTextAtCaret (const String& textToInsert);
void insertTabAtCaret();


Loading…
Cancel
Save