Developer forums (C::B DEVELOPMENT STRICTLY!) > Development
C::B dark mode in Windows
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