File: clColours.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (114 lines) | stat: -rw-r--r-- 4,524 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "clColours.h"

#include "clSystemSettings.h"
#include "drawingutils.h"

#include <wx/gdicmn.h>
#include <wx/settings.h>

#ifdef __WXMAC__
#define FACTOR_ALTROW 103
#define FACTOR_SEL_BG_COLOUR_NOFOCUS 110
#define FACTOR_ALTROW_LIGHT 98
#define FACTOR_ALTROW_DARK 102
#else
#define FACTOR_ALTROW_LIGHT 98
#define FACTOR_ALTROW_DARK 102
#define FACTOR_SEL_BG_COLOUR_NOFOCUS 145
#endif

namespace
{
void init_from_colour(clColours* colours, const wxColour& baseColour)
{
    if(!baseColour.IsOk()) {
        colours->InitDefaults();
        return;
    }
    bool is_dark = DrawingUtils::IsDark(baseColour);
    bool is_light = !is_dark;
    colours->bgColour = is_dark ? baseColour.ChangeLightness(107) : baseColour;

    // determine the text colour
    colours->itemTextColour =
        is_light ? wxColour(*wxBLACK).ChangeLightness(110) : wxColour(*wxWHITE).ChangeLightness(90);

    if(is_light) {
        colours->alternateColour = colours->bgColour.ChangeLightness(FACTOR_ALTROW_LIGHT);
        colours->hoverBgColour = colours->bgColour.ChangeLightness(110);
        colours->headerBgColour = colours->bgColour.ChangeLightness(96);
        colours->headerHBorderColour = colours->headerBgColour.ChangeLightness(90);
        colours->headerVBorderColour = colours->headerBgColour.ChangeLightness(90);

        colours->selItemTextColour = colours->itemTextColour;
        colours->selItemBgColour = wxColour("#BDD8F2").ChangeLightness(130);

        colours->selItemTextColourNoFocus = colours->selItemTextColour;
        colours->selItemBgColourNoFocus = colours->selItemBgColour.ChangeLightness(130);

        colours->selbuttonColour = colours->selItemTextColour.ChangeLightness(120);
        colours->buttonColour = colours->itemTextColour.ChangeLightness(120);
        colours->grayText = colours->itemTextColour.ChangeLightness(150);
    } else {
        colours->alternateColour = colours->bgColour.ChangeLightness(FACTOR_ALTROW_DARK);
        colours->hoverBgColour = colours->bgColour.ChangeLightness(90);
        colours->headerBgColour = colours->bgColour.ChangeLightness(105);
        colours->headerHBorderColour = colours->headerBgColour.ChangeLightness(112);
        colours->headerVBorderColour = colours->headerBgColour.ChangeLightness(112);
        colours->selItemTextColour = colours->itemTextColour;
        colours->selbuttonColour = colours->selItemTextColour.ChangeLightness(80);
        colours->buttonColour = colours->itemTextColour.ChangeLightness(80);
        colours->grayText = colours->itemTextColour.ChangeLightness(50);

        colours->selItemBgColour = colours->bgColour.ChangeLightness(120);
        colours->selItemTextColourNoFocus = colours->itemTextColour;
        colours->selItemBgColourNoFocus = colours->bgColour.ChangeLightness(110);
    }
    colours->itemBgColour = colours->bgColour;
    colours->matchedItemBgText = wxColour("#8BC34A");
    colours->matchedItemText = wxColour("#FDFEFE");
    colours->fillColour = colours->bgColour;
    colours->borderColour = is_light ? colours->bgColour.ChangeLightness(70) : colours->bgColour.ChangeLightness(110);
    colours->darkBorderColour =
        is_light ? colours->bgColour.ChangeLightness(30) : colours->bgColour.ChangeLightness(150);
}
} // namespace
clColours::clColours() {}

void clColours::InitDefaults()
{
    wxColour base_colour = clSystemSettings::Get().IsDark() ? wxColour(*wxBLACK).ChangeLightness(105) : *wxWHITE;
    InitFromColour(base_colour);

    itemTextColour = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOXTEXT);
    selItemTextColour = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOXHIGHLIGHTTEXT);
}

void clColours::InitDarkDefaults() { InitFromColour(wxColour("#5F6A6A")); }

bool clColours::IsLightTheme() const
{
    if(GetBgColour().IsOk()) {
        return !DrawingUtils::IsDark(GetBgColour());
    } else {
        return !DrawingUtils::IsDark(clSystemSettings::GetDefaultPanelColour());
    }
}

void clColours::FromLexer(LexerConf::Ptr_t lexer)
{
    // sanity
    if(!lexer) {
        InitDefaults();
        return;
    }

    // initialised the colours based on the lexer default bg colour
    auto prop = lexer->GetProperty(0);
    init_from_colour(this, prop.GetBgColour());
    auto prop_selected_text = lexer->GetProperty(SEL_TEXT_ATTR_ID);
    this->selItemBgColour = prop_selected_text.GetBgColour();
    this->selItemTextColour = prop_selected_text.GetFgColour();
}

void clColours::InitFromColour(const wxColour& baseColour) { init_from_colour(this, baseColour); }