derceg / explorerplusplus

Explorer++ is a lightweight and fast file manager for Windows
https://explorerplusplus.com
GNU General Public License v3.0
2.5k stars 359 forks source link

Dark theme #115

Open 2E0PGS opened 6 years ago

2E0PGS commented 6 years ago

I think it would be awesome to have a dark theme.

Perhaps I will see what the codebase is like and what GUI framework it uses then make a pull-request adding the feature.

pseudo555 commented 1 year ago

Hello,

From the screenshot displayed, the https://github.com/derceg/explorerplusplus/issues/354 issue is still present on windows 11

Here is what looks like version 1908 on win10 : eppWin10

As you can see, the blue overlay is way less aggressive on w10 instead on 11 (where we can say the blue filter is almost cyan).

Edit: answering by mail to this thread was a bad idea. I delete previous answer and repost it from web interface.

pseudo555 commented 1 year ago

I must have a bad setting somewhere: image

Menu bar stay light whereas the submenu are dark : image

Customized color seems valid: image

Option is forced to dark: image

Win 11 64bit 22h2 build 22621.1778.

WildByDesign commented 1 year ago

@pseudo555 Your build is from about a week before the dark menu change went in. Download this one: https://ci.appveyor.com/project/derceg/explorerplusplus/builds/47218632

pseudo555 commented 1 year ago

Ms defender doesn't allow me : image

I'll disable it to extract stuff.

i2 commented 1 year ago

Tabs are still non-conformant to the system theme, correct?

derceg commented 1 year ago

Tabs are still non-conformant to the system theme, correct?

One of the issues here is that Microsoft haven't created a dark mode theme for the tab control. I think they've only really updated the themes for controls that Explorer uses. Which means that the only way of styling the control in dark mode would be for the application to draw it. I typically try to avoid that, since it can be time consuming to try and get right and mistakes can be very visible. Having said that, I know Notepad++ draws its tab control, so I could use that as a reference.

It's probably something I'll end up doing even if Microsoft do add a dark mode theme for the control, since one thing I've noticed in adding dark mode support is that the code can be fairly easily repurposed to allow for other color schemes to be used. It wouldn't work as well as dark mode, since some controls, like menus, would be drawn in stock colors, but you could set custom background/text/highlight colors and most controls would use those colors. So, even if defining a fully custom color scheme wouldn't work too well, you could tweak the existing color schemes.

anonymous1184 commented 1 year ago

@derceg is there any way to change the accentuation color from 3-state buttons?

For example, I use the folder tree and when enabled is not readable, it looks like this:

image

When I hover, looks pretty fine and is clear that it's enabled:

image

I do have the latest build (in fact, I wrote a pretty simple updater to parse the assets from AppVeyor and keep Explorer++ updated).

WildByDesign commented 1 year ago

The problem with the toolbar buttons being highlighted with that bright blue seems to affect all apps that use win32-darkmode, such as LibreOffice, Notepad++ and Explorer++. I believe that it is a Microsoft bug within the aero.msstyles file and I doubt that they will ever fix it.

Here are example resources from aero.msstyles file comparing Windows 10 to Windows 11:

aero-win10vswin11-dark

For some reason, Microsoft added that bright button highlight with the very first release of Windows 11 and has kept it ever since. The strange thing is that they didn't even add it anywhere else. For example, SPLITBUTTON remained the same color tones. So it stands out from everything else.

The same resource is used in light mode as well.

You essentially have to use a third-party theme (msstyles) to avoid this problem. I use Rectify11 msstyles theme and it fixes the problem in LibreOffice, Notepad++ and Explorer++ beautifully.

I was also able to temporarily fix the problem by replacing the resource within the aero.msstyles file. It worked great, but it is risky and certainly not something that can be done for an entire user-base.

I wish there was a better option for fixing this problem though.

@derceg Does this (https://gist.github.com/rounk-ctrl/b04e5622e30e0d62956870d5c22b7017#dark-controls) provide any methods for fixing the toolbar button resource being used?

If somebody can figure out a fix, it could benefit LibreOffice, Notepad++ and Explorer++ plus any other programs that utilize win32-darkmode.

anonymous1184 commented 1 year ago

@WildByDesign thanks for the info (as a user of LibreOffice this will be a must for me). And here I was thinking that maybe, just maybe, I could stop using shell fixes (ironic given that this is an Explorer replacement).

derceg commented 1 year ago

At the moment, custom drawing is used to change the text and highlight colors for the toolbar (the background color comes from the parent window). The system is still responsible for drawing the control in full, it just uses the colors provided by the application.

That means that one very simple change that could be made would be to use a different text color when a button is checked (a checked button is drawn in the pressed state, which is why there's the blue highlight in the first place):

image

The other option would be to custom draw the entire button. I experimented with that a few weeks ago and it's not too hard to draw the button in the same sort of way as it's normally drawn:

image

The advantage of that would be that the application would have full control over the colors that are used.

However, there are some potential downsides. The safest thing to do would be to only fully draw checked buttons (in practice, that would just be the folders button). But that means if there are any differences from how the button is normally drawn, the folders button could look different from the other buttons. Also, if there are any bugs, the folders button, specifically, could look broken, while every other button would look ok.

I mentioned a few days ago that the code currently used to implement dark mode can also be used to apply custom colors to most controls. While I'm not sure fully drawing checked buttons is worthwhile just for dark mode, it could be important when using custom colors, since depending on the colors that are chosen, the background/checked highlight/text colors could end up being similar to one another and not easily distinguishable.

So, overall, I think it could be worth doing.

pseudo555 commented 1 year ago

You essentially have to use a third-party theme (msstyles) to avoid this problem. I use Rectify11 msstyles theme and it fixes the problem in LibreOffice, Notepad++ and Explorer++ beautifully.

Could you explain how you did it ? I undrstand this is not the expected space to do so, but i didn't find a way to send you a pm...

WildByDesign commented 1 year ago

Could you explain how you did it ? I undrstand this is not the expected space to do so, but i didn't find a way to send you a pm...

Sure. I wanted to keep things simple and not do the entire Rectify11 system file modifications and such. So I only used the msstyles from it.

WildByDesign commented 1 year ago

@derceg I have spent a good amount of time studying the resources of the Aero.msstyles file and I was wondering if you could help me understand the issue a bit better. Your explanations are always fantastic, detailed and very much appreciated. Please keep in mind that I am not a programmer.

DarkModeBUTTON

I have realized that the Aero.msstyles theme file does contain the relevant/matching resources for the dark mode toolbar buttons. As I understand it, it should be pulling the resources from Toolbar > BUTTON in light mode. And when dark mode is declared, it should be pulling the resources from DarkMode::Toolbar > BUTTON. But it seems that the issue/bug is that it's pulling those same light mode resources for dark mode toolbar buttons as well. The proper dark mode toolbar button resources are available but are clearly not being utilized.

So what I am hoping to understand from you is, if myself or someone else were to report this Windows 11 specific issue to Microsoft, how would it be best explained? How are the dark mode toolbar button resources available but yet not being utilized?

I understand that this wont affect Explorer++ as much since you custom draw most toolbar buttons and are likely in the process of custom drawing the Pressed button state as well, but if Microsoft were to fix this issue it would greatly benefit Notepad++ and LibreOffice because this issue greatly affects their toolbar buttons in all states and is quite horrific in Windows 11.

Thank you.

chuckboucher commented 1 year ago

I don't care about the button. I'd just like to have the dark menu bars. I have been able to get the main window and left nav to be dark using the plugin. Where can I download the 1.4.0.2137 build from as an executable?

anonymous1184 commented 1 year ago

@chuckboucher v1.4.0.2137 is over two months old, so you won't find it. Current is v1.4.0.2200 and is just a few hours old, so you have a whole moth to download.

chuckboucher commented 1 year ago

@chuckboucher v1.4.0.2137 is over two months old, so you won't find it. Current is v1.4.0.2200 and is just a few hours old, so you have a whole moth to download.

found the latest. Thank you.

ChristopherHaws commented 1 year ago

@derceg So what I am hoping to understand from you is, if myself or someone else were to report this Windows 11 specific issue to Microsoft, how would it be best explained? How are the dark mode toolbar button resources available but yet not being utilized?

I filed an issue in the Feedback Hub on Windows. I provided links to this issue as well as the issue on LibreOffice.

If everyone could upvote the issue, maybe Microsoft will finally fix the issue.

https://aka.ms/AAlwbvc

WildByDesign commented 1 year ago

I filed an issue in the Feedback Hub on Windows. I provided links to this issue as well as the issue on LibreOffice.

If everyone could upvote the issue, maybe Microsoft will finally fix the issue.

I've been trying to vote for this, but everytime I click the link and it opens Feedback Hub, it says "Your account doesn't have access to this feedback". My Feedback Hub is logged into my Microsoft Account and everything seems fine for all other issues. But this issue just wont show up and searching for it doesn't work either.

Has the bug report been removed?

Mishasama commented 1 year ago

Has the bug report been removed?

No, in my case, it works fine, and I had upvoted it. Is your Microsoft account in a specific country? Or do you not have insider status? Maybe your feedback hub needs to be updated?

WildByDesign commented 1 year ago

No, in my case, it works fine, and I had upvoted it. Is your Microsoft account in a specific country? Or do you not have insider status? Maybe your feedback hub needs to be updated?

My Microsoft Account is in Canada. It does have Insider status. Also, it's the latest version available to me in the Microsoft Store. I can see all other dark mode related bugs and vote for them, except this one for some reason. I checked again today and still no way to access it.

Mishasama commented 1 year ago

No, in my case, it works fine, and I had upvoted it. Is your Microsoft account in a specific country? Or do you not have insider status? Maybe your feedback hub needs to be updated?

My Microsoft Account is in Canada. It does have Insider status. Also, it's the latest version available to me in the Microsoft Store. I can see all other dark mode related bugs and vote for them, except this one for some reason. I checked again today and still no way to access it.

Maybe you'll have to call Microsoft customer care to figure it out.

derceg commented 1 year ago

I have realized that the Aero.msstyles theme file does contain the relevant/matching resources for the dark mode toolbar buttons. As I understand it, it should be pulling the resources from Toolbar > BUTTON in light mode. And when dark mode is declared, it should be pulling the resources from DarkMode::Toolbar > BUTTON. But it seems that the issue/bug is that it's pulling those same light mode resources for dark mode toolbar buttons as well. The proper dark mode toolbar button resources are available but are clearly not being utilized.

I believe the direct answer here is that the toolbar control calls OpenThemeData with the second argument set to "Toolbar", regardless of whether dark mode is active. So, the Toolbar class will be unconditionally used.

An application can use the DarkMode::Toolbar class by making a call like SetWindowTheme(hwnd, nullptr, L"Toolbar") (which will use the Toolbar class in light mode and DarkMode::Toolbar class in dark mode). However, that won't necessarily work as expected. Below is what it looks like in Explorer++:

image

Neither the dropdown arrows nor the separators are drawn correctly. I'm not sure whether that's because the DarkMode::Toolbar class is a work in progress or has a specific use case somewhere in Explorer, where the lack of dropdown arrows and separators isn't an issue.

More broadly, my impression is that Microsoft have really only implemented dark mode for the controls that Explorer uses. If it's not a control that Explorer uses, it's not updated.

Also, Explorer++ still has to rely on undocumented APIs in order to enable dark mode, so official support for dark mode Win32 apps is all but non-existent. Which means that the classes in aero.msstyles may work (and Explorer++ does use a number of them), but I'm not sure any of the dark mode classes would be considered officially supported.

Even with the use of the undocumented APIs and classes from aero.msstyles, partially or fully drawing controls is still necessary to achieve a cohesive result.

It would be really nice to have proper dark mode support from the OS, but overall, that's something that would require a lot more work.

TLCPlusPlus commented 1 year ago

+1 to dark mode, hope this gets figured out.🤞

NWJ9PB commented 1 year ago

bumping this feature request

PrivacyFriendlyMuffins commented 1 year ago

The official FAQ says,

It can be enabled by going by to Tools > Options > Appearance and selecting the "Dark" theme option.

There is no "Appearance" menu under Tools > Options.

pseudo555 commented 1 year ago

Make sure you use a recent / snapshot version. Mine is currently 1.4.0.2220 ( a little bit outdated) and have such option.

On Tue, Oct 3, 2023 at 6:41 AM PrivacyFriendlyMuffins < @.***> wrote:

The official FAQ https://explorerplusplus.com/faq#dark_mode says,

It can be enabled by going by to Tools > Options > Appearance and selecting the "Dark" theme option.

There is no "Appearance" menu under Tools > Options.

— Reply to this email directly, view it on GitHub https://github.com/derceg/explorerplusplus/issues/115#issuecomment-1744200019, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEL7PVCIZODSRLDOIJGJX2LX5OJPZAVCNFSM4FDMRO5KU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TCNZUGQZDAMBQGE4Q . You are receiving this because you were mentioned.Message ID: @.***>

anonymous1184 commented 1 year ago

@PrivacyFriendlyMuffins it must be a "latest build" (refer to the README.md):

About ![image](https://github.com/derceg/explorerplusplus/assets/53758552/00b2a16b-f4e3-45e9-a639-1d11e994140d)
Options ![image](https://github.com/derceg/explorerplusplus/assets/53758552/33f1c968-1e2b-41b8-9dee-e569c82c9272)

@derceg In the 3+ years I've been following this thread, I've seen people struggling with the fact that the Dark Mode feature is available only in the dev version. I wrote a pretty simple updater ("compiled" AHK script, ~100 LOC) that takes care of that problem.

Runs via Window Task Scheduler, parsing AppVeyor API info to get the latest successful build if available, matches previous version architecture and creates backups when updating.

I'd like for you to peer-review it if you are OK with automatic updates for the development versions. And, of course, if this doesn't violate AppVeyor's ToS/EULA (I'm not familiar with the legalities of the service).

PrivacyFriendlyMuffins commented 1 year ago

Looking back at the FAQ, it does indeed say

Yes, there is dark mode support in more recent dev versions when running on Windows 10 1809 and newer.

Oof. I apologize for wasting everybody's time. I should have paid more attention.

Sent from ProtonMail mobile

-------- Original Message -------- On Oct 3, 2023, 04:54, anonymous1184 wrote:

@.***(https://github.com/PrivacyFriendlyMuffins) it must be a "latest build" (refer to the README.md):

About

image

Options

image


@.***(https://github.com/derceg) In the 3+ years I've been following this thread, I've seen people struggling with the fact that the Dark Mode feature is available only in the dev version. I wrote a pretty simple updater ("compiled" AHK script, ~100 LOC) that takes care of that problem.

Runs via Window Task Scheduler, parsing AppVeyor API info to get the latest successful build if available, matches previous version architecture and creates backups when updating.

I'd like for you to peer-review it if you are OK with automatic updates for the development versions. And, of course, if this doesn't violate AppVeyor's ToS/EULA (I'm not familiar with the legalities of the service).

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

Gaibhne commented 10 months ago

It's extremely disappointing to see this issue stuck in perpetual alpha mode for five years now, going as far as having people build third party updaters to download the dev builds instead of moving this into stable. @derceg what can be done to move this out of its niche ? Is there anything users could do to help this issue move along ? Are there any big blockers we could work on ?

thakyZ commented 9 months ago

While I understand dark mode is only in the development builds and has been for some time and thus is a work in progress, I hope you do take feedback for what you have at the moment.

I should preface this with one note that the Windows 11 is super laggy and super clunky, and this a good alternative for now.

As well as a note for the build: This is while using version 1.5.0.2330 dev (build date: Feb 12 2024 323:45:36) running on Windows 11 23H2 22631.3155.

I am sure there is going to be more in the future but I didn't see anyone mention these and as well as it's been a while since.

tame-64 commented 3 months ago

Hi, for the bright checked toolbar you actually could trick the state into thinking that it's still in hot, by resetting the state, something like this:

...
if (customDraw->nmcd.uItemState & CDIS_CHECKED)
{
    customDraw->nmcd.uItemState = CDIS_HOT;
    return TBCDRF_USECDCOLORS | TBCDRF_HILITEHOTTRACK | TBCDRF_BLENDICON;
}
...

so at least it's not that bright.

Pysis868 commented 3 months ago

https://github.com/derceg/explorerplusplus/issues/115#issuecomment-1744520690

@anonymous1184 Nice tip.

Of course I went through all of these already:

Then found AppVeyor solved this for us, providing latest easily at least, just had to fix/update the BuildJobModel name:

curl -s 'https://ci.appveyor.com/api/projects/derceg/explorerplusplus/' | jq -r '.build.jobs[].name'

Configuration: Debug-Asan; Platform: Win32 Configuration: Debug-Asan; Platform: x64 Configuration: Release; Platform: Win32 Configuration: Release; Platform: x64 Configuration: Release; Platform: ARM64

i2 commented 3 months ago

I wrote a pretty simple updater ("compiled" AHK script, ~100 LOC) that takes care of that problem.

@anonymous1184 Could you share this AHK script? Thanks!

derceg commented 3 months ago

In terms of updates, I probably shouldn't have pointed people towards AppVeyor directly. I've seen a few comments from them online that say that they don't want to be used a download service. Which is fair enough and is one of the reasons the builds are now stored on S3.

@anonymous1184 Apologies for not getting back to you sooner. The main reason would be that I've been planning on building an update check into the application itself. With the way builds are now stored, checking whether a new build is available is pretty simple.

First, the latest version number can be retrieved by fetching the following file (dev can also be replaced with stable/beta):

https://download.explorerplusplus.com/dev/latest_version.txt

If a later version is available, it can be downloaded using:

https://download.explorerplusplus.com/dev/latest/explorerpp_x64.zip

Or, a specific version can be fetched using a URL like:

https://download.explorerplusplus.com/dev/1.5.0.2444/explorerpp_x64.zip

You can see the other files that are available (e.g. the 32-bit version, the ARM64 version) on the builds page:

https://explorerplusplus.com/builds?prefix=dev%2F1.5.0.2444%2F

The intention here is for the URLs and filenames to remain stable, which will allow update checks to function consistently over time.

Using those URLs, at least, will be better than going through AppVeyor, since (1) they don't want that and (2) artifacts on AppVeyor expire after a month. The files available at the URLs above will be kept indefinitely.

RodrigoKazuma commented 3 months ago

The official FAQ says,

It can be enabled by going by to Tools > Options > Appearance and selecting the "Dark" theme option.

There is no "Appearance" menu under Tools > Options.

Just to help others, the Dark Mode is only available on the Explorer++ Development Build 64-bit