//============================================================================== AppearanceSettings::AppearanceSettings (bool updateAppWhenChanged) : settings ("COLOUR_SCHEME") { IntrojucerLookAndFeel lf; for (int i = 0; i < AppearanceColours::numColours; ++i) getColourValue (AppearanceColours::colours[i].name) = lf.findColour (AppearanceColours::colours[i].colourID).toString(); CodeDocument doc; CPlusPlusCodeTokeniser tokeniser; CodeEditorComponent editor (doc, &tokeniser); const CodeEditorComponent::ColourScheme cs (editor.getColourScheme()); for (int i = cs.types.size(); --i >= 0;) { CodeEditorComponent::ColourScheme::TokenType& t = cs.types.getReference(i); getColourValue (t.name) = t.colour.toString(); } getCodeFontValue() = getDefaultCodeFont().toString(); if (updateAppWhenChanged) settings.addListener (this); }
void draw (CodeEditorComponent& owner, Graphics& g, const Font& font, float x, const int y, const int baselineOffset, const int lineHeight, const Colour& highlightColour) const throw() { if (highlightColumnStart < highlightColumnEnd) { g.setColour (highlightColour); g.fillRect (roundToInt (x + highlightColumnStart * owner.getCharWidth()), y, roundToInt ((highlightColumnEnd - highlightColumnStart) * owner.getCharWidth()), lineHeight); } int lastType = INT_MIN; for (int i = 0; i < tokens.size(); ++i) { SyntaxToken* const token = tokens.getUnchecked(i); if (lastType != token->tokenType) { lastType = token->tokenType; g.setColour (owner.getColourForTokenType (lastType)); } g.drawSingleLineText (token->text, roundToInt (x), y + baselineOffset); if (i < tokens.size() - 1) { if (token->width < 0) token->width = font.getStringWidthFloat (token->text); x += token->width; } } }
void draw (CodeEditorComponent& owner, Graphics& g, const Font& font, float x, const int y, const int baselineOffset, const int lineHeight, const Colour& highlightColour) const { if (highlightColumnStart < highlightColumnEnd) { g.setColour (highlightColour); g.fillRect (roundToInt (x + highlightColumnStart * owner.getCharWidth()), y, roundToInt ((highlightColumnEnd - highlightColumnStart) * owner.getCharWidth()), lineHeight); } int lastType = std::numeric_limits<int>::min(); for (int i = 0; i < tokens.size(); ++i) { SyntaxToken& token = tokens.getReference(i); if (lastType != token.tokenType) { lastType = token.tokenType; g.setColour (owner.getColourForTokenType (lastType)); } g.drawSingleLineText (token.text, roundToInt (x), y + baselineOffset); if (i < tokens.size() - 1) { if (token.width < 0) token.width = font.getStringWidthFloat (token.text); x += token.width; } } }
void updatePosition (CodeEditorComponent& owner) { startTimer (400); setVisible (true); const Rectangle pos (owner.getCharacterBounds (owner.getCaretPos())); setBounds (pos.getX(), pos.getY(), 2, pos.getHeight()); }
void CodeEditorComponent::State::restoreState (CodeEditorComponent& editor) const { editor.selectRegion (CodeDocument::Position (editor.getDocument(), lastSelectionEnd), CodeDocument::Position (editor.getDocument(), lastCaretPos)); if (lastTopLine > 0 && lastTopLine < editor.getDocument().getNumLines()) editor.scrollToLine (lastTopLine); }
CodeEditorComponent::State::State (const CodeEditorComponent& editor) : lastTopLine (editor.getFirstLineOnScreen()), lastCaretPos (editor.getCaretPos().getPosition()), lastSelectionEnd (lastCaretPos) { const Range<int> selection (editor.getHighlightedRegion()); if (lastCaretPos == selection.getStart()) lastSelectionEnd = selection.getEnd(); else lastSelectionEnd = selection.getStart(); }
void CtrlrLuaMethodEditor::searchResultClicked (const String &methodName, const int lineNumber, const int resultPositionStart, const int resultPositionEnd) { // _DBG("CtrlrLuaMethodEditor::searchResultClicked"); // _DBG("\t"+methodName+" ln:"+STR(lineNumber)+" s:"+STR(resultPositionStart)+" e:"+STR(resultPositionEnd)); CtrlrLuaMethod *method = getMethodManager().getMethodByName(methodName); if (method != nullptr) { setEditedMethod (method->getUuid()); if (method->getCodeEditor()) { CodeEditorComponent *ed = method->getCodeEditor()->getCodeComponent(); CodeDocument &doc = method->getCodeEditor()->getCodeDocument(); if (ed) { ed->selectRegion (CodeDocument::Position(doc,resultPositionStart), CodeDocument::Position(doc,resultPositionEnd)); } } } }
void AppearanceSettings::applyToCodeEditor (CodeEditorComponent& editor) const { CodeEditorComponent::ColourScheme cs (editor.getColourScheme()); for (int i = cs.types.size(); --i >= 0;) { CodeEditorComponent::ColourScheme::TokenType& t = cs.types.getReference(i); getColour (t.name, t.colour); } editor.setColourScheme (cs); editor.setFont (getCodeFont()); for (int i = 0; i < AppearanceColours::numColours; ++i) { if (AppearanceColours::colours[i].applyToEditorOnly) { Colour col; if (getColour (AppearanceColours::colours[i].name, col)) editor.setColour (AppearanceColours::colours[i].colourID, col); } } editor.setColour (ScrollBar::thumbColourId, IntrojucerLookAndFeel::getScrollbarColourForBackground (editor.findColour (CodeEditorComponent::backgroundColourId))); }
void draw (CodeEditorComponent& owner, Graphics& g, const Font& fontToUse, const float rightClip, const float x, const int y, const int lineH, const float characterWidth) const { Colour lastColour (0x00000001); AttributedString as; as.setJustification (Justification::centredLeft); int column = 0; for (int i = 0; i < tokens.size(); ++i) { const float tokenX = x + column * characterWidth; if (tokenX > rightClip) break; const SyntaxToken& token = tokens.getReference(i); as.append (token.text.removeCharacters ("\r\n"), fontToUse, owner.getColourForTokenType (token.tokenType)); column += token.length; } as.draw (g, Rectangle<float> (x, (float) y, 10000.0f, (float) lineH)); }
LineNumbersDisplay::LineNumbersDisplay(CodeEditorComponent& Editor) : layout(), editor(Editor), last_start_line_num(-1) { setSize(30, Editor.getHeight()); startTimer(50); }