viacheslav-lozinskyi / MetaProject

Work with project files newer been so simple!
Other
9 stars 1 forks source link

dark mode font colors are difficult to read #10

Closed bradphelan closed 3 years ago

bradphelan commented 3 years ago

For example

image

Also the font is too small on my 4k monitor but I think there is an issue for this already.

Thanks for a great tool :)

viacheslav-lozinskyi commented 3 years ago

Thanks for your feedback.

Looking on screenshot is unclear what is wrong. Could you make photo of your monitor with MetaProject tool? In this case I will see the problem by your eyes.

bradphelan commented 3 years ago

Not sure what you mean. That is a screen shot of the metaproject tool. The area that is hard to read is image

You have dark grey font on dark dark grey background. There is very little contrast. To be ultra specific

image

and

image

They look disabled but are not.

viacheslav-lozinskyi commented 3 years ago

I see what you asking about.

  1. Comment colors (on the right side) not so bright because it is additional information. It should be less visible than primary text. I did much efforts to choose the most appropriate colors and text transparency for this part of UI. Now I don't see better solution. May be to make less transparency... Will try to change it. If I found better solution it will be in next release.
  2. About delete button which looks like as disabled - I agree with you. "Play" and "Pin" buttons also looks like as disabled. I can make it as normal buttons, but in this case played and pinned messages will not be differ by colors. Bad solution. To make only delete button as normal button - it will be mixed with other normal buttons like "Go to file" or "Show information". Also bad solution. I can make this button colored. For example red. Will try it.
viacheslav-lozinskyi commented 3 years ago

screenshot1

Colored buttons looks worse than "disabled".

bradphelan commented 3 years ago

What's wrong with white buttons. You don't really need the buttons coloured. It's not like syntax highlighting a text file where the color gives some semantic meaning. The buttons are all in a column and their shape clearly defines their purpose. What advantage does a colour add?

For differentiating between importance levels I can see the colour assists but between icons on the same line I don't see the advantage. You just give your self a design headache trying to support everybody's different colour theme. I'd choose one colour for dark and another for light backgrounds.

You have 5 icons on one of my lines

image

They are all active and all useful. Making them different colours I think is just confusing.

It's a bit the same here.

image

There is a rainbow of different colours and shades. Why does the timestamp have a different colour to the message?

image

They could be exactly the same font and colour and it would be ok.

viacheslav-lozinskyi commented 3 years ago

MetaProject support 3 mode for visualization of background colors for each message:

  1. Disabled - all messages are not colored
  2. Half line - only timestamp is colored
  3. Full line - each message is colored

This is how to change it: image

Moreover this colors are important because it demonstrate similar messages. For example next messages are similar and will be showed using one color:

There I don't see any problem and any possibility to improve it.

About button colors. Current implementation have advantages and disadvantages (some buttons looks as disabled). Any ideas how to improve it I don't have. Other ideas have own disadvantages which are bigger than current.

bradphelan commented 3 years ago

I'm sorry I don't see any logic in the coloring in my C++ project

image

This set of lines is from a single failure which is the red line and the stack trace of messages supporting the error. There are various different colours and backgrounds and intensities for a linear list of message and it not clear why.

The original stack trace being.

9>D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\include\mw/rotary/IntervalTree.hpp(167,1): error C2280: 'std::tuple<std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>,int,char>::tuple(const std::tuple<std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>,int,char> &)': attempting to reference a deleted function
9>        with
9>        [
9>            Data=std::string
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\include\tuple(345): message : see declaration of 'std::tuple<std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>,int,char>::tuple'
9>        with
9>        [
9>            Data=std::string
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\include\tuple(345,5): message : 'std::tuple<std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>,int,char>::tuple(const std::tuple<std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>,int,char> &)': function was implicitly deleted because a data member invokes a deleted or inaccessible function 'std::_Tuple_val<_This>::_Tuple_val(const std::_Tuple_val<_This> &)'
9>        with
9>        [
9>            Data=std::string
9>        ]
9>        and
9>        [
9>            _This=std::unique_ptr<mw::Rotary::IntervalTree::Node<std::string>,std::default_delete<mw::Rotary::IntervalTree::Node<std::string>>>
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\include\tuple(183,1): message : 'std::_Tuple_val<_This>::_Tuple_val(const std::_Tuple_val<_This> &)': function was implicitly deleted because a data member invokes a deleted or inaccessible function 'std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>::unique_ptr(const std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>> &)'
9>        with
9>        [
9>            _This=std::unique_ptr<mw::Rotary::IntervalTree::Node<std::string>,std::default_delete<mw::Rotary::IntervalTree::Node<std::string>>>
9>        ]
9>        and
9>        [
9>            Data=std::string
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\include\memory(2686,5): message : 'std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>>::unique_ptr(const std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>> &)': function was explicitly deleted
9>        with
9>        [
9>            Data=std::string
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\include\mw/rotary/IntervalTree.hpp(278): message : see reference to function template instantiation 'void mw::Rotary::IntervalTree::Print<Data>(const std::unique_ptr<mw::Rotary::IntervalTree::Node<Data>,std::default_delete<mw::Rotary::IntervalTree::Node<Data>>> &,int)' being compiled
9>        with
9>        [
9>            Data=std::string
9>        ] (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\include\mw/rotary/IntervalTree.hpp(277): message : while compiling class template member function 'void mw::Rotary::IntervalTree::Tree<std::string>::Print(void)' (compiling source file D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp)
9>D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp(61): message : see reference to function template instantiation 'void mw::Rotary::IntervalTree::Tree<std::string>::Print(void)' being compiled
9>D:\sandboxes\VS2015-Code-upgrade\dev\libraries\ToolpathStrategies\Rotary\Test\gtest_interval_tree.cpp(26): message : see reference to class template instantiation 'mw::Rotary::IntervalTree::Tree<std::string>' being compiled
9>Done building project "RotaryTests.vcxproj" -- FAILED.
10>------ Skipped Build: Project: INSTALL, Configuration: Debug x64 ------
10>Project not selected to build for this solution configuration 

Even in your example

image

You have three messages that are identical types yet you have different shades of green for them. Why?

viacheslav-lozinskyi commented 3 years ago

Everyone has their own preferences about visualization, and therefore it is possible to change by MetaProject settings.

About the last question.

Each line has own signature which is calculated on fly. It is message signature. This signature is used for coloring, hiding similar messages and for speaking. It is very important and very complicated algorithm.

For example signature of messages from received by you picture are next:

  1. COMMAND_BUILD_BEGIN
  2. COMMAND_BUILD_PROJECT_DONE
  3. COMMAND_BUILD_DONE

There three different signatures. It is a reason why they have different colors.

However, for next messages signature will be the same: image

  1. COMMAND: Build.Project.Done, [preview-gif.vs]
  2. COMMAND: Build.Project.Done, [preview-jpeg.vs]
  3. COMMAND: Build.Project.Done, [preview-bmp.vs]

In all those cases you get next signature: COMMAND_BUILD_PROJECT_DONE

For speaking will be used next text "Command build project done". This text is directly calculated from message signature.

bradphelan commented 3 years ago

It is very important and very complicated algorithm.

Ok. I'm not sure but ....

You can still fix the contrasting problem. There is some math you can apply.

((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000

https://medium.com/better-programming/generate-contrasting-text-for-your-random-background-color-ac302dc87b4

So you can choose any foreground colour and get the best most contrasting background colour for it.

I think I used such an equation in an app a while ago and it worked out quite well.

viacheslav-lozinskyi commented 3 years ago

Thank you for the information.

I will look how to adopt this algorithm to MetaProject. However in my case everything is much more complicated, because MetaProject use three color schemes. For info, warnings and errors.

For example any color close to red for info messages will confuse users. Colors like blue or green for errors will have the same problem. Additional complexity is that MetaProject must support dark and light color schemas of Visual Studio.

In fact this task is not simple.

bradphelan commented 3 years ago

I don't think it will be a problem if you look into the colour theory. Another good resource I've found is.

https://leonardocolor.io/?colorKeys=%23cd1d41&base=ffffff&ratios=3%2C4.5%2C5.50%2C6.50%2C7.50%2C8.50%2C9.50%2C10.50%2C11.50&mode=CAM02

viacheslav-lozinskyi commented 3 years ago

I will look it. Thanks.

viacheslav-lozinskyi commented 3 years ago

This problem is solved in the last release (2.0.1). Could you check it?