Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

C::B dark mode in Windows

(1/3) > >>

adalbert:
Update: test build
https://github.com/adbrt/codeblocks-dark-mode-msw/releases/tag/release
https://github.com/adbrt/codeblocks-dark-mode-msw

Hello,
I am trying to enable dark mode in MSW build. I think this may be a cool feature for some people who tend to use dark mode in everything.
This is easy if I compile it with wxWidgets 3.3 (from GitHub), one line of code is needed after app starts (https://docs.wxwidgets.org/latest/classwx_app.html#af8c93d7e3345e62a58325f3ab1d158d6)

I will post the code soon. However, I cannot find where in the code of C::B are the default values for editor colors. Where in the source code can I find the colors for editor background/foreground and syntax highlighting? Background is white by default even when using the dark mode.

Miguel Gimenez:
The editor is derived from wxStyledTextCtrl, and it uses Styles that define colours (among other parameters).

See StyleSetBackground() and StyleSetForeground().

EDIT: The easiest way may be adding a built-in Colour theme called "default for dark mode" (see Settings->Editor->Syntax highlighting).

If you are working on a patch, remember to guard the wxWidgets version (#if wxCHECK_VERSION(3.3.0)) and the platform (#ifdef __WXMSW__) and (in runtime) check if Windows version is W10-20H1 or newer (wxCheckOsVersion()). Also, create a setting for Normal/Dark mode and use it.

adalbert:
I see that "Syntax highlighting" is loading default colors from XML files in \share\CodeBlocks\lexers.

A lexer for each language has color presets inside, and if I switch around fg and bg values in lexer_cpp.xml or other files, file the colors will indeed be reversed.

However, I don't see an option to create multiple themes inside of the XML files:

--- Code: ---<?xml version="1.0"?>
<!DOCTYPE CodeBlocks_lexer_properties>
<CodeBlocks_lexer_properties>
        <Lexer name="C/C++"
                index="3"
                filemasks="*.c,*.cpp,*.cc,*.cxx,*.h,*.hpp,*.hh,*.hxx,*.inl,*.ipp,*.tcc,*.tpp">
                <Style name="Default"
                        index="0,11"
                        fg="255,255,255"
                        bg="0,0,0"
                        bold="0"
                        italics="0"
                        underlined="0"/>
                <Style name="Default (inactive)"
                        index="64,72,75"
                        fg="200,200,200"/>
                <Style name="Comment (normal)"
                        index="1,23"
                        fg="152,152,217"/>

--- End code ---

So modifying lexer files would change everything to dark mode only.

If I want to give the ability to change color theme, I need to add that color theme into default.conf file:


--- Code: --- <editor>
<colour_sets>
<default />
<default_dark_mode>
<NAME>
<str>
<![CDATA[default_dark_mode]]>
</str>
</NAME>
<cc>
<style0>
<FORE>
<colour r="233" g="233" b="233" />
</FORE>
<BACK>
<colour r="7" g="7" b="7" />
</BACK>
<NAME>
<str>
<![CDATA[Default]]>
</str>
</NAME>
</style0>
<style1>
<FORE>
<colour r="233" g="233" b="233" />
</FORE>
<BACK>
<colour r="7" g="7" b="7" />
</BACK>
<NAME>
<str>
<![CDATA[Default]]>
</str>
</NAME>
</style1>
<NAME>
<str>
<![CDATA[C/C++]]>
</str>
</NAME>
</cc>
</default_dark_mode>
<ACTIVE_COLOUR_SET>
<str>
<![CDATA[default_dark_mode]]>
</str>
</ACTIVE_COLOUR_SET>
<ACTIVE_LANG>
<str>
<![CDATA[C/C++]]>
</str>
</ACTIVE_LANG>
</colour_sets>
--- End code ---

But the default.conf file is created only after the first launch of CodeBlocks. What would be the best way to add a new in-built colour theme, which would be visible even without altering the default.conf file?

I see that editorcolourset.cpp contains this, still wondering how to deal with it:

--- Code: ---EditorColourSet::EditorColourSet(const wxString& setName)
    : m_Name(setName)
{
    LoadAvailableSets();

    if (setName.IsEmpty())
        m_Name = COLORSET_DEFAULT;
    else
        Load();
}

--- End code ---

ollydbg:
The screen shot shown in the first post looks nice! good work!

cacb:
Dark mode in Code::Blocks is a good idea, great work!

If that can be made a standard and easy to use on/off option in Code::Blocks I would probably use it. It also keeps Code::Blocks up to date with similar features in other IDEs.

Navigation

[0] Message Index

[#] Next page

Go to full version