// **************************************************************************** // // Function Name: RSolidColor::GetHighContrastDrawMode( ) // // Description: Calculates the draw mode that should be used to draw this // color on top of the same color to ensure high contrast. // // Returns: The calculated drawmode // // Exceptions: None // // **************************************************************************** // YDrawMode RSolidColor::GetHighContrastDrawMode( ) const { // If the color is dark, use XNOR to go to white. Otherwise use XOR to go to black if( IsDark( ) ) return kXNOR; else return kXOR; }
FileTabs::FileTabs() : stackedicons(false), greyedicons(true), filecolor(SColorLabel), extcolor(IsDark(SColorFace()) ? Blend(White, LtBlue) : LtBlue) { }
wxColour DrawingUtils::GetThemeLinkColour() { wxColour bgColour = GetThemeTipBgColour(); if ( !IsDark(bgColour) ) { return "BLUE"; } else { return "YELLOW"; } }
wxColour DrawingUtils::GetThemeBorderColour() { wxColour bgColour = EditorConfigST::Get()->GetCurrentOutputviewBgColour(); if ( !IsDark(bgColour) ) { return wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW); } else { return DrawingUtils::LightColour(bgColour, 4.0); } }
void MenuItemBase::PaintTopItem(Draw& w, int state) { Size sz = GetSize(); if(GUI_GlobalStyle() >= GUISTYLE_XP) { bool opaque = InOpaqueBar(); bool opaque2 = opaque || state; Color bg = SColorFace(); if(opaque2) ChPaint(w, 0, 0, sz.cx, sz.cy, style->topitem[state]); else if(opaque) w.DrawRect(0, 0, sz.cx, sz.cy, bg); String text = GetText(); Size isz = GetTextSize(text, StdFont()); Color txt = opaque ? style->topitemtext[0] : GetLabelTextColor(this); Color hltxt = opaque2 ? style->topitemtext[state] : GetLabelTextColor(this); if(!opaque && state != 2) { // Fix issues when text color is not compatible with transparent background (e.g. Ubuntu Ambience)] Color c = state == 1 ? SColorHighlight() : bg; int g = Grayscale(c); bool dark = IsDark(c); if(abs(g - Grayscale(txt)) < 70) txt = dark ? White() : Black(); if(abs(g - Grayscale(hltxt)) < 70) hltxt = dark ? White() : Black(); } DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), state, txt, hltxt); } else { w.DrawRect(sz, SColorFace); static const ColorF b0[] = { (ColorF)1, SColorLight, SColorLight, SColorShadow, SColorShadow, }; static const ColorF b1[] = { (ColorF)1, SColorShadow, SColorShadow, SColorLight, SColorLight, }; String text = GetText(); Size isz = GetTextSize(text, StdFont()); DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), false, SColorMenuText, SColorHighlightText); if(state) DrawBorder(w, 0, 0, sz.cx, sz.cy, state == 2 ? b1 : b0); } }
bool CSector::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { NULL, INT_MAX } }; switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SC_CLIENTS: sVal.FormatVal(m_Chars_Active.HasClients()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return( true ); case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( GetCharComplexity()))) ? "1" : "0"; return( true ); } sVal.FormatVal( GetCharComplexity()); return( true ); case SC_FLAGS: sVal.FormatHex(m_dwFlags); return( true ); case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return( true ); case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return( true ); case SC_NUMBER: sVal.FormatVal(m_index); return( true ); case SC_ISDARK: sVal.FormatVal( IsDark() ); return( true ); case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return( true ); case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return( true ); case SC_ITEMCOUNT: sVal.FormatVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal(static_cast<int>(GetSeason())); return true; case SC_WEATHER: sVal.FormatVal(static_cast<int>(GetWeather())); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
global func Explode(int iLevel, object pObj, id idEffect, string szEffect) { if(!pObj) if(!(pObj=this)) return; var x = AbsX(pObj->GetX()), y = AbsY(pObj->GetY()); var boom = FindObject(BOOM); if(!boom) boom = CreateObject(BOOM,0,0,-1); var xdir = GetXDir(pObj) + GetWind(GetX(pObj),GetY(pObj))/20; var ydir = GetYDir(pObj); var opt_angle = Angle(xdir,ydir); var speed = BoundBy(Distance(xdir,ydir),0,60); ///Feuer-, Funken- und Dirt-Effekte... var i=0, count = 3+iLevel/8, angle = Random(360); while((count > 0) && (++i < count*10)) { angle += RandomX(40,80); angle = Interpolate4K(angle,opt_angle,0,60,speed); angle -= 180; //Rauch var smokex = +Sin(angle,RandomX(iLevel/4,iLevel/2)); var smokey = -Cos(angle,RandomX(iLevel/4,iLevel/2)); if(GBackSolid(x+smokex,y+smokey)) continue; var level = iLevel + Random(iLevel/5); var a = angle+RandomX(-15,+15); for(var i = 7; i > 0; i--) CreateParticle("BlastSpark1", smokex, smokey, +Sin(a,level+RandomX(-5,+5)), -Cos(a,level+RandomX(-5,+5)), 25+Random(50)); CreateParticle("BlastFlame", smokex, smokey, +Sin(angle,level/2), -Cos(angle,level/2), level*5); for(var i = Random(3)+1; i > 0; i--) { a = angle+RandomX(-30,+30); CreateParticle("BlastDirt", smokex, smokey, +Sin(a,level+RandomX(-20,+20)), -Cos(a,level+RandomX(-20,+20)), level*RandomX(7,12)); } //CreateSmokeTrail(level,angle,smokex,smokey,pObj); count--; } ///Brandspuren... // Wir haben keine Effekteinstellungen oä., daher immer an //if(EffectLevel() > EM4K_Low) CreateBurnMark(x,y,iLevel,20+iLevel/2); ///Lichteffekte bei Dunkelheit... if(IsDark()) { var iSize = iLevel*100; if(iLevel < 20) iSize /= 2; AddLightFlash(iSize/3, x, y, RGBa(255,220,64,15)); } ///Feuer-Effekt.. /*angle = Interpolate4K(0,opt_angle,0,120,speed); angle -= 180; CreateParticle("BlastBg",0,0,+Sin(angle,100),-Cos(angle,100),iLevel*20); //CreateParticle("BlastBg",0,0,0,-1,iLevel*20); */ ///Der eigentliche Blast-Partikel... CreateParticle("Blast",x,y,0,0,iLevel*11); ///Standart-Verhalten... return inherited(iLevel, pObj, idEffect, szEffect); }
if(!next->GetAccessKeysDeep()) { lbl.accesskey = ChooseAccessKey(GetText(), used); if(lbl.accesskey) Refresh(); used |= AccessKeyBit(lbl.accesskey); } } Ctrl::AssignAccessKeys(used); } Label::Label() { noac = false; } Label::~Label() {} CH_COLOR(LabelBoxTextColor, IsDark(SColorFace()) ? Blend(LtBlue(), White) : LtBlue()); CH_COLOR(LabelBoxDisabledTextColor, SColorDisabled()); CH_COLOR(LabelBoxColor, SColorShadow()); LabelBox::LabelBox() { color = Null; LabelBase::SetInk(LabelBoxTextColor, LabelBoxDisabledTextColor); SetVAlign(ALIGN_TOP); #if defined(flagWINGL) || defined(flagLINUXGL) ClipToBounds(false); #endif } void LabelBox::AssignAccessKeys(dword used) {
bool DrawingUtils::IsThemeDark() { return IsDark( GetThemeBgColour() ); }
bool CSector::r_WriteVal( lpctstr pszKey, CSString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT32_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { nullptr, INT32_MAX } }; SC_TYPE key = (SC_TYPE)FindTableHead(pszKey, sm_szLoadKeys, CountOf(sm_szLoadKeys) - 1); switch ( key ) { case SC_CANSLEEP: { pszKey += 8; bool fCheckAdjacents = Exp_GetVal(pszKey); sVal.FormatBVal(CanSleep(fCheckAdjacents)); return true; } case SC_CLIENTS: sVal.FormatSTVal(m_Chars_Active.GetClientsNumber()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return true; case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( (int)GetCharComplexity() )) ) ? "1" : "0"; return true; } sVal.FormatSTVal( GetCharComplexity() ); return true; case SC_FLAGS: sVal.FormatHex(m_dwFlags); return true; case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return true; case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return true; case SC_NUMBER: sVal.FormatVal(m_index); return true; case SC_ISDARK: sVal.FormatVal( IsDark() ); return true; case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return true; case SC_ISSLEEPING: sVal.FormatVal(IsSleeping()); return true; case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return true; case SC_ITEMCOUNT: sVal.FormatSTVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal((int)GetSeason()); return true; case SC_WEATHER: sVal.FormatVal((int)GetWeather()); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
void LexerConf::Apply(wxStyledTextCtrl* ctrl, bool applyKeywords) { ctrl->SetLexer(GetLexerId()); ctrl->StyleClearAll(); ctrl->SetStyleBits(ctrl->GetStyleBitsNeeded()); OptionsConfigPtr options = EditorConfigST::Get()->GetOptions(); bool tooltip(false); const StyleProperty::Map_t& styles = GetLexerProperties(); ctrl->SetProperty(wxT("styling.within.preprocessor"), this->GetStyleWithinPreProcessor() ? wxT("1") : wxT("0")); // turn off PP tracking/updating by default ctrl->SetProperty(wxT("lexer.cpp.track.preprocessor"), wxT("0")); ctrl->SetProperty(wxT("lexer.cpp.update.preprocessor"), wxT("0")); if(GetName() == "scss") { // Enable SCSS property (will tell the lexer to search for variables) ctrl->SetProperty("lexer.css.scss.language", "1"); } ctrl->SetUseAntiAliasing(true); // Find the default style wxFont defaultFont; bool foundDefaultStyle = false; int nDefaultFontSize = DEFAULT_FONT_SIZE; StyleProperty defaultStyle; StyleProperty::Map_t::const_iterator iter = styles.begin(); for(; iter != styles.end(); ++iter) { const StyleProperty& prop = iter->second; if(prop.GetId() == 0) { defaultStyle = prop; wxString fontFace = prop.GetFaceName().IsEmpty() ? DEFAULT_FACE_NAME : prop.GetFaceName(); if(!prop.GetFaceName().IsEmpty()) { nDefaultFontSize = prop.GetFontSize(); } defaultFont = wxFont(nDefaultFontSize, wxFONTFAMILY_TELETYPE, prop.GetItalic() ? wxFONTSTYLE_ITALIC : wxFONTSTYLE_NORMAL, prop.IsBold() ? wxFONTWEIGHT_BOLD : wxFONTWEIGHT_NORMAL, prop.GetUnderlined(), fontFace); foundDefaultStyle = true; break; } } // Reset all colours to use the default style colour if(foundDefaultStyle) { for(int i = 0; i < 256; i++) { ctrl->StyleSetBackground(i, defaultStyle.GetBgColour()); ctrl->StyleSetForeground(i, defaultStyle.GetFgColour()); } } if(foundDefaultStyle && defaultFont.IsOk()) { for(int i = 0; i < 256; i++) { ctrl->StyleSetFont(i, defaultFont); } } iter = styles.begin(); for(; iter != styles.end(); ++iter) { StyleProperty sp = iter->second; int size = nDefaultFontSize; wxString face = sp.GetFaceName(); bool bold = sp.IsBold(); bool italic = sp.GetItalic(); bool underline = sp.GetUnderlined(); // int alpha = sp.GetAlpha(); // handle special cases switch(sp.GetId()) { case WHITE_SPACE_ATTR_ID: { // whitespace colour. We dont allow changing the background colour, only the foreground colour wxColour whitespaceColour = sp.GetFgColour(); if(whitespaceColour.IsOk()) { ctrl->SetWhitespaceForeground(true, whitespaceColour); } break; } case FOLD_MARGIN_ATTR_ID: // fold margin foreground colour ctrl->SetFoldMarginColour(true, sp.GetBgColour()); ctrl->SetFoldMarginHiColour(true, sp.GetFgColour()); break; case SEL_TEXT_ATTR_ID: { // selection colour if(wxColour(sp.GetBgColour()).IsOk()) { ctrl->SetSelBackground(true, sp.GetBgColour()); } if(IsUseCustomTextSelectionFgColour() && wxColour(sp.GetFgColour()).IsOk()) { ctrl->SetSelForeground(true, sp.GetFgColour()); } else { // provide a "dummy" selection colour (we pass 'false' so it does not matter // which colour we use here) ctrl->SetSelForeground(false, wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); } break; } case CARET_ATTR_ID: { // caret colour wxColour caretColour = sp.GetFgColour(); if(!caretColour.IsOk()) { caretColour = *wxBLACK; } ctrl->SetCaretForeground(caretColour); break; } default: { wxString faceName = face; int fontSize(size); if(face.IsEmpty()) { // defaults fontSize = nDefaultFontSize; faceName = DEFAULT_FACE_NAME; } wxFontInfo fontInfo = wxFontInfo(fontSize) .Family(wxFONTFAMILY_TELETYPE) .Italic(italic) .Bold(bold) .Underlined(underline) .FaceName(faceName.IsEmpty() ? DEFAULT_FACE_NAME : faceName); wxFont font(fontInfo); if(sp.GetId() == 0) { // default ctrl->StyleSetFont(wxSTC_STYLE_DEFAULT, font); ctrl->StyleSetSize(wxSTC_STYLE_DEFAULT, size); ctrl->StyleSetForeground(wxSTC_STYLE_DEFAULT, iter->second.GetFgColour()); // Set the inactive state colours // Inactive state is greater by 64 from its counterpart wxColor inactiveColor = GetInactiveColor(defaultStyle); ctrl->StyleSetForeground(wxSTC_STYLE_DEFAULT + 64, inactiveColor); ctrl->StyleSetFont(wxSTC_STYLE_DEFAULT + 64, font); ctrl->StyleSetSize(wxSTC_STYLE_DEFAULT + 64, size); ctrl->StyleSetBackground(wxSTC_STYLE_DEFAULT + 64, iter->second.GetBgColour()); ctrl->StyleSetBackground(wxSTC_STYLE_DEFAULT, iter->second.GetBgColour()); ctrl->StyleSetSize(wxSTC_STYLE_LINENUMBER, size); } else if(sp.GetId() == wxSTC_STYLE_CALLTIP) { tooltip = true; if(sp.GetFaceName().IsEmpty()) { font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); fontSize = font.GetPointSize(); } } ctrl->StyleSetFont(sp.GetId(), font); ctrl->StyleSetSize(sp.GetId(), fontSize); ctrl->StyleSetEOLFilled(sp.GetId(), iter->second.GetEolFilled()); if(iter->second.GetId() == LINE_NUMBERS_ATTR_ID) { // Set the line number colours only if requested // otherwise, use default colours provided by scintilla if(sp.GetBgColour().IsEmpty() == false) ctrl->StyleSetBackground(sp.GetId(), sp.GetBgColour()); if(sp.GetFgColour().IsEmpty() == false) ctrl->StyleSetForeground(sp.GetId(), sp.GetFgColour()); else ctrl->StyleSetForeground(sp.GetId(), wxT("BLACK")); } else { ctrl->StyleSetForeground(sp.GetId(), sp.GetFgColour()); // Inactive state is greater by 64 from its counterpart wxColor inactiveColor = GetInactiveColor(sp); ctrl->StyleSetForeground(sp.GetId() + 64, inactiveColor); ctrl->StyleSetFont(sp.GetId() + 64, font); ctrl->StyleSetSize(sp.GetId() + 64, size); ctrl->StyleSetBackground(sp.GetId() + 64, defaultStyle.GetBgColour()); ctrl->StyleSetBackground(sp.GetId(), sp.GetBgColour()); } break; } } // switch } // set the calltip font if(!tooltip) { wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); ctrl->StyleSetFont(wxSTC_STYLE_CALLTIP, font); } if(applyKeywords) { ctrl->SetKeyWords(0, GetKeyWords(0)); ctrl->SetKeyWords(1, GetKeyWords(1)); ctrl->SetKeyWords(2, GetKeyWords(2)); ctrl->SetKeyWords(3, GetKeyWords(3)); ctrl->SetKeyWords(4, GetKeyWords(4)); } // by default indicators are set to be opaque rounded box if(DrawingUtils::IsDark(defaultStyle.GetBgColour())) { ctrl->IndicatorSetStyle(1, wxSTC_INDIC_BOX); ctrl->IndicatorSetStyle(2, wxSTC_INDIC_BOX); } else { ctrl->IndicatorSetStyle(1, wxSTC_INDIC_ROUNDBOX); ctrl->IndicatorSetStyle(2, wxSTC_INDIC_ROUNDBOX); } // Annotations markers // Warning style wxColour textColour = IsDark() ? *wxWHITE : *wxBLACK; ctrl->StyleSetBackground(ANNOTATION_STYLE_WARNING, defaultStyle.GetBgColour()); ctrl->StyleSetForeground(ANNOTATION_STYLE_WARNING, textColour); ctrl->StyleSetSizeFractional(ANNOTATION_STYLE_WARNING, (ctrl->StyleGetSizeFractional(wxSTC_STYLE_DEFAULT) * 4) / 5); // Error style ctrl->StyleSetBackground(ANNOTATION_STYLE_ERROR, defaultStyle.GetBgColour()); ctrl->StyleSetForeground(ANNOTATION_STYLE_ERROR, textColour); ctrl->StyleSetSizeFractional(ANNOTATION_STYLE_ERROR, (ctrl->StyleGetSizeFractional(wxSTC_STYLE_DEFAULT) * 4) / 5); // Code completion errors ctrl->StyleSetBackground(ANNOTATION_STYLE_CC_ERROR, defaultStyle.GetBgColour()); ctrl->StyleSetForeground(ANNOTATION_STYLE_CC_ERROR, textColour); ctrl->StyleSetSizeFractional(ANNOTATION_STYLE_CC_ERROR, (ctrl->StyleGetSizeFractional(wxSTC_STYLE_DEFAULT) * 4) / 5); // annotation style 'boxed' ctrl->AnnotationSetVisible(wxSTC_ANNOTATION_BOXED); // Define the styles for the editing margin ctrl->StyleSetBackground(CL_LINE_SAVED_STYLE, wxColour(wxT("FOREST GREEN"))); ctrl->StyleSetBackground(CL_LINE_MODIFIED_STYLE, wxColour(wxT("ORANGE"))); // Indentation ctrl->SetUseTabs(options->GetIndentUsesTabs()); ctrl->SetTabWidth(options->GetIndentWidth()); ctrl->SetIndent(options->GetIndentWidth()); }