void NewBuildTab::InitView(const wxString& theme) { LexerConf::Ptr_t lexText = ColoursAndFontsManager::Get().GetLexer("text", theme); lexText->Apply(m_view); m_view->SetUndoCollection(false); m_view->EmptyUndoBuffer(); m_view->HideSelection(true); m_view->SetEditable(false); StyleProperty::Map_t& props = lexText->GetLexerProperties(); const StyleProperty& defaultStyle = lexText->GetProperty(0); // reset the styles m_view->SetLexer(wxSTC_LEX_CONTAINER); wxFont defaultFont = lexText->GetFontForSyle(0); for(size_t i = 0; i < wxSTC_STYLE_MAX; ++i) { m_view->StyleSetForeground(i, defaultStyle.GetFgColour()); m_view->StyleSetBackground(i, defaultStyle.GetBgColour()); m_view->StyleSetFont(i, defaultFont); } m_view->StyleSetForeground(LEX_GCC_INFO, wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); m_view->StyleSetForeground(LEX_GCC_DEFAULT, props[0].GetFgColour()); m_view->StyleSetForeground(LEX_GCC_WARNING, this->m_buildTabSettings.GetWarnColour()); m_view->StyleSetForeground(LEX_GCC_ERROR, this->m_buildTabSettings.GetErrorColour()); m_view->StyleSetHotSpot(LEX_GCC_ERROR, true); m_view->StyleSetHotSpot(LEX_GCC_WARNING, true); m_view->SetHotspotActiveUnderline(false); // No underline m_view->MarkerDefine(LEX_GCC_MARKER, wxSTC_MARK_BACKGROUND); if(lexText->IsDark()) { m_view->MarkerSetBackground(LEX_GCC_MARKER, wxColour(defaultStyle.GetBgColour()).ChangeLightness(110)); } else { m_view->MarkerSetBackground(LEX_GCC_MARKER, wxColour(defaultStyle.GetBgColour()).ChangeLightness(90)); } // Hide all margins for(int i = 0; i <= wxSTC_MARGIN_RTEXT; ++i) { m_view->SetMarginWidth(i, 0); } // make the symbol margin 5 pixel width m_view->SetMarginType(0, wxSTC_MARGIN_SYMBOL); m_view->SetMarginWidth(0, 5); }
void ColoursAndFontsManager::UpdateLexerColours(LexerConf::Ptr_t lexer, bool force) { StyleProperty& defaultProp = lexer->GetProperty(0); // Default if(force || m_lexersVersion < 1) { // adjust line numbers if(lexer->IsDark()) { StyleProperty& lineNumbers = lexer->GetProperty(LINE_NUMBERS_ATTR_ID); // Line numbers if(!defaultProp.IsNull()) { if(lexer->GetName() == "c++") { defaultProp.SetFgColour( wxColour(defaultProp.GetBgColour()).ChangeLightness(120).GetAsString(wxC2S_HTML_SYNTAX)); } if(!lineNumbers.IsNull()) { lineNumbers.SetFgColour( wxColour(defaultProp.GetBgColour()).ChangeLightness(120).GetAsString(wxC2S_HTML_SYNTAX)); lineNumbers.SetBgColour(defaultProp.GetBgColour()); } } } else { lexer->SetLineNumbersFgColour(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); StyleProperty& lineNumbers = lexer->GetProperty(LINE_NUMBERS_ATTR_ID); // Line numbers if(!lineNumbers.IsNull()) { lineNumbers.SetBgColour(defaultProp.GetBgColour()); } // don't adjust PHP and HTML default colours, since they also affects the various operators // foreground colours if(lexer->GetName() != "php" && lexer->GetName() != "html" && lexer->GetName() != "text" && lexer->GetName() != "cmake" && lexer->GetName() != "xml") { lexer->SetDefaultFgColour(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); } } } //===================================================================== // Second upgrade stage: adjust whitespace colour and fold margin //===================================================================== if(force || m_lexersVersion < 2) { // adjust line numbers StyleProperty& fold = lexer->GetProperty(FOLD_MARGIN_ATTR_ID); // fold margin StyleProperty& whitespace = lexer->GetProperty(WHITE_SPACE_ATTR_ID); // whitespace if(lexer->IsDark()) { wxColour newCol = wxColour(defaultProp.GetBgColour()).ChangeLightness(110); fold.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); fold.SetBgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); whitespace.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); } else { wxColour newCol = wxColour(defaultProp.GetBgColour()).ChangeLightness(95); fold.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); fold.SetBgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); whitespace.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); } } //===================================================================== // Third upgrade stage: adjust whitespace colour and fold margin //===================================================================== if(force || m_lexersVersion < 3) { // remove the *.js;*.javascript from the C++ lexer if(lexer->GetName() == "c++") { lexer->SetFileSpec("*.cxx;*.hpp;*.cc;*.h;*.c;*.cpp;*.l;*.y;*.c++;*.hh;*.ipp;*.hxx;*.h++"); } } // Upgrade CSS colours if((force || m_lexersVersion < 4) && lexer->GetName().Lower() == "css") { // adjust line numbers bool isDark = lexer->IsDark(); StyleProperty& var = lexer->GetProperty(wxSTC_CSS_VARIABLE); StyleProperty& identifier = lexer->GetProperty(wxSTC_CSS_IDENTIFIER); StyleProperty& identifier2 = lexer->GetProperty(wxSTC_CSS_IDENTIFIER2); StyleProperty& identifier3 = lexer->GetProperty(wxSTC_CSS_IDENTIFIER3); StyleProperty& oper = lexer->GetProperty(wxSTC_CSS_OPERATOR); if(!var.IsNull()) { if(!identifier.IsNull()) { identifier.SetFgColour(var.GetFgColour()); } if(!identifier2.IsNull()) { identifier2.SetFgColour(var.GetFgColour()); } if(!identifier3.IsNull()) { identifier3.SetFgColour(var.GetFgColour()); } if(!oper.IsNull()) { oper.SetFgColour(isDark ? "WHITE" : "BLACK"); } } } if(force || m_lexersVersion < 5) { // Indentation guides (style #37) StyleProperty& indentGuides = lexer->GetProperty(37); indentGuides.SetFgColour(defaultProp.GetBgColour()); indentGuides.SetBgColour(defaultProp.GetBgColour()); } }
void FindResultsTab::SetStyles(wxStyledTextCtrl* sci) { //#define LEX_FIF_DEFAULT 0 //#define LEX_FIF_FILE 1 //#define LEX_FIF_MATCH 2 //#define LEX_FIF_LINE_NUMBER 3 //#define LEX_FIF_HEADER 4 //#define LEX_FIF_SCOPE 5 //#define LEX_FIF_MATCH_COMMENT 6 LexerConf::Ptr_t lexer = ColoursAndFontsManager::Get().GetLexer("c++"); if(!lexer) { lexer = ColoursAndFontsManager::Get().GetLexer("text"); } const StyleProperty& defaultStyle = lexer->GetProperty(0); wxFont defaultFont = lexer->GetFontForSyle(0); for(size_t i = 0; i < wxSTC_STYLE_MAX; ++i) { sci->StyleSetForeground(i, defaultStyle.GetFgColour()); sci->StyleSetBackground(i, defaultStyle.GetBgColour()); sci->StyleSetFont(i, defaultFont); } StyleProperty::Map_t& props = lexer->GetLexerProperties(); sci->StyleSetForeground(LEX_FIF_HEADER, props[11].GetFgColour()); sci->StyleSetBackground(LEX_FIF_HEADER, props[11].GetBgColour()); // 33 is the style for line numbers sci->StyleSetForeground(LEX_FIF_LINE_NUMBER, props[33].GetFgColour()); sci->StyleSetBackground(LEX_FIF_LINE_NUMBER, props[33].GetBgColour()); // 11 is the style number for "identifier" sci->StyleSetForeground(LEX_FIF_MATCH, props[11].GetFgColour()); sci->StyleSetBackground(LEX_FIF_MATCH, props[11].GetBgColour()); // 16 is the stule for colouring classes sci->StyleSetForeground(LEX_FIF_SCOPE, props[16].GetFgColour()); sci->StyleSetBackground(LEX_FIF_SCOPE, props[16].GetBgColour()); sci->StyleSetForeground(LEX_FIF_MATCH_COMMENT, props[wxSTC_C_COMMENTLINE].GetFgColour()); sci->StyleSetBackground(LEX_FIF_MATCH_COMMENT, props[wxSTC_C_COMMENTLINE].GetBgColour()); sci->StyleSetForeground(LEX_FIF_FILE, props[wxSTC_C_WORD].GetFgColour()); sci->StyleSetBackground(LEX_FIF_FILE, props[wxSTC_C_WORD].GetBgColour()); sci->StyleSetEOLFilled(LEX_FIF_FILE, true); sci->StyleSetForeground(LEX_FIF_DEFAULT, props[11].GetFgColour()); sci->StyleSetBackground(LEX_FIF_DEFAULT, props[11].GetBgColour()); sci->StyleSetHotSpot(LEX_FIF_MATCH, true); sci->StyleSetHotSpot(LEX_FIF_FILE, true); sci->StyleSetHotSpot(LEX_FIF_MATCH_COMMENT, true); sci->SetHotspotActiveForeground(true, lexer->IsDark() ? "WHITE" : "BLACK"); sci->SetHotspotActiveUnderline(false); sci->MarkerDefine(7, wxSTC_MARK_ARROW); sci->MarkerSetBackground(7, lexer->IsDark() ? "YELLOW" : "#FF4500"); sci->MarkerSetForeground(7, lexer->IsDark() ? "YELLOW" : "#FF4500"); sci->IndicatorSetForeground(1, lexer->IsDark() ? "YELLOW" : "#FF4500"); #ifdef __WXGTK__ // On GTK we dont have the wxSTC_INDIC_TEXTFORE symbol yet (old wx version) sci->IndicatorSetStyle(1, wxSTC_INDIC_DOTBOX); #else sci->IndicatorSetStyle(1, wxSTC_INDIC_TEXTFORE); #endif sci->IndicatorSetUnder(1, true); sci->SetMarginWidth(0, 0); sci->SetMarginWidth(1, 16); sci->SetMarginWidth(2, 0); sci->SetMarginWidth(3, 0); sci->SetMarginWidth(4, 0); sci->SetMarginSensitive(1, true); sci->HideSelection(true); sci->Refresh(); }
void FindResultsTab::SetStyles(wxStyledTextCtrl* sci) { LexerConf::Ptr_t lexer = ColoursAndFontsManager::Get().GetLexer("c++"); if(!lexer) { lexer = ColoursAndFontsManager::Get().GetLexer("text"); } const StyleProperty& defaultStyle = lexer->GetProperty(0); wxFont defaultFont = lexer->GetFontForSyle(0); for(size_t i = 0; i < wxSTC_STYLE_MAX; ++i) { sci->StyleSetForeground(i, defaultStyle.GetFgColour()); sci->StyleSetBackground(i, defaultStyle.GetBgColour()); sci->StyleSetFont(i, defaultFont); } // Show/hide whitespace sci->SetViewWhiteSpace(EditorConfigST::Get()->GetOptions()->GetShowWhitspaces()); StyleProperty::Map_t& props = lexer->GetLexerProperties(); // Set the whitespace colours sci->SetWhitespaceForeground(true, props[WHITE_SPACE_ATTR_ID].GetFgColour()); sci->StyleSetForeground(LEX_FIF_HEADER, props[11].GetFgColour()); sci->StyleSetBackground(LEX_FIF_HEADER, props[11].GetBgColour()); // 33 is the style for line numbers sci->StyleSetForeground(LEX_FIF_LINE_NUMBER, props[33].GetFgColour()); // 11 is the style number for "identifier" sci->StyleSetForeground(LEX_FIF_MATCH, props[11].GetFgColour()); // 16 is the stule for colouring classes sci->StyleSetForeground(LEX_FIF_SCOPE, props[16].GetFgColour()); sci->StyleSetForeground(LEX_FIF_MATCH_COMMENT, props[wxSTC_C_COMMENTLINE].GetFgColour()); sci->StyleSetForeground(LEX_FIF_FILE, props[wxSTC_C_WORD].GetFgColour()); sci->StyleSetEOLFilled(LEX_FIF_FILE, true); sci->StyleSetForeground(LEX_FIF_DEFAULT, props[11].GetFgColour()); sci->StyleSetBackground(LEX_FIF_DEFAULT, props[11].GetBgColour()); sci->StyleSetHotSpot(LEX_FIF_MATCH, true); sci->StyleSetHotSpot(LEX_FIF_FILE, true); sci->StyleSetHotSpot(LEX_FIF_MATCH_COMMENT, true); sci->SetHotspotActiveForeground(true, lexer->IsDark() ? "WHITE" : "BLACK"); sci->SetHotspotActiveUnderline(false); sci->MarkerDefine(7, wxSTC_MARK_ARROW); #if wxVERSION_NUMBER < 3100 // On GTK we dont have the wxSTC_INDIC_TEXTFORE symbol yet (old wx version) sci->MarkerDefine(7, wxSTC_MARK_ARROW); sci->MarkerSetBackground(7, lexer->IsDark() ? "CYAN" : "ORANGE"); sci->MarkerSetForeground(7, lexer->IsDark() ? "CYAN" : "ORANGE"); sci->IndicatorSetForeground(1, lexer->IsDark() ? "CYAN" : "ORANGE"); sci->IndicatorSetStyle(1, wxSTC_INDIC_ROUNDBOX); #else sci->MarkerDefine(7, wxSTC_MARK_ARROW); sci->MarkerSetBackground(7, lexer->IsDark() ? "#FFD700" : "#FF4500"); sci->MarkerSetForeground(7, lexer->IsDark() ? "#FFD700" : "#FF4500"); sci->IndicatorSetForeground(1, lexer->IsDark() ? "#FFD700" : "#FF4500"); sci->IndicatorSetStyle(1, wxSTC_INDIC_TEXTFORE); #endif sci->IndicatorSetUnder(1, true); sci->SetMarginWidth(0, 0); sci->SetMarginWidth(1, 16); sci->SetMarginWidth(2, 0); sci->SetMarginWidth(3, 0); sci->SetMarginWidth(4, 0); sci->SetMarginSensitive(1, true); sci->HideSelection(true); // Indentation OptionsConfigPtr options = EditorConfigST::Get()->GetOptions(); sci->SetUseTabs(options->GetIndentUsesTabs()); sci->SetTabWidth(options->GetIndentWidth()); sci->SetIndent(options->GetIndentWidth()); sci->Refresh(); }