Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WinForm blackout screen customisation #19

Open
timegrinder opened this issue Jan 20, 2019 · 6 comments
Open

WinForm blackout screen customisation #19

timegrinder opened this issue Jan 20, 2019 · 6 comments

Comments

@timegrinder
Copy link

I understand this is more a minor / cosmetic enhancement for the future, so I wouldn't be expecting it any time soon.

Is your feature request related to a problem? Please describe.
Cycling profile takes significantly longer than possibly required.

Describe the solution you'd like
I'm unsure if it's an API or some other limitation or if you've just imposed it for now but I'd like the ability to customise the 'black out' screen that appears when changing profile.
ie. colours (background colour, transparency, progress ring colour, number colour etc) and especially the timers (with warnings to the user about setting it too short potentially not providing enough time to complete it).

Additional context
For example, my machine takes 15s to completely cycle profile when enabling and disabling surround, but the time taken from clicking 'apply' to the blackout screen ending ends up being 45s and I'd like to cut that down eventually. Plus people could style it to match their windows theme.

@AdamHebby
Copy link

+1 Definitely takes way longer than my computer actually takes to switch

@strazto
Copy link

strazto commented Oct 29, 2019

The lines responsible for triggering the splash dialog:

if (new SplashForm(() =>
{
Task.Factory.StartNew(() =>
{
if (!dv_profile.Profile.Apply())
{
failed = true;
}
}, TaskCreationOptions.LongRunning);
}, 3, 30).ShowDialog(this) !=
DialogResult.Cancel)
{
if (failed)
{
MessageBox.Show(this, Language.Profile_is_invalid_or_not_possible_to_apply, Language.Error,
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
new SplashForm(
() =>
{
Task.Factory.StartNew(() => currentProfile.Apply(), TaskCreationOptions.LongRunning);
}, 60, 30) {CancellationMessage = Language.Reverting_in}.ShowDialog(this);

We see they're presently hardcoded to 3 and 30

@falahati
Copy link
Owner

falahati commented Oct 30, 2019

As of now, there are 4 steps while changing to a profile:

  1. Turn all displays on and remove all Surround groupings (essentially reverting all current profile settings from the system)
  2. Group displays using NVidia Surround
  3. Apply NVidia display configuration
  4. Apply Windows display configuration

And unfortunately, there is no way that I know of to reliability detect if any of these steps are completed successfully and as each of these steps is dependent on the completion of the last steps it is essential that the application gives each transition enough time to complete.

The "60 seconds" splash screen is, therefore, there to show the best duration I could find that worked with the multiple systems I tried the app on. Obviously a faster system does it way sooner as well as the fact that sometimes (depending on the settings of current profile and the targeted profile) "Step 1" and "Step 4" are almost identical to the last step and therefore the application might seem to do nothing from the user's point of view and this might give a false impression that nothing happens in the first ~10 seconds and the last ~20 seconds of a profile switch; which might be kinda true but the application simply don't know in advance.

In other words, unless I can find a way to reliably detect if the changes requested are completed I can not decrease the time of the splash screen. I know the majority of the system out there can perform the switching process from two completely different profiles in under ~30 seconds. But you should consider all the slower systems out there as well as situations in which your system might be busy enough to take its time with the changes.

However, please feel free to add additional support for this issue by liking the first comment and maybe providing potential solutions.

@timegrinder
Copy link
Author

Heya,

Thanks for the responses, I understand why it's set to the period of time that it is but I'd like to clarify the purpose of the original post being eventually to add some user tune-able options (via a settings window) by having the defaults that are already there, then permit override from the user settings without the user having to edit the source and build it to customise it.

  1. (That affects all users and wouldn't affect performance) The ability to edit the colour scheme that is used by the WinForm blackout / progress circle so they can customise it to their system colour scheme. I assume this is is setting the colours to variables in the code with defaults and exposing some options to the user in a window, possibly with an example picture of how it would look with the new colours. This might be a small difference to the end user, but if the progress bar needs to be up for 60 seconds it would be less jarring to a user if it blended in with their system.

and a separate but related issue

  1. Setting the timer to default to the current default but providing an 'advanced' option, with warnings regarding the baseline required times for most users and that setting it too short may result in issues of it not completing. Allowing users who've tested / have high performance systems the ability to shorten the period it affects them.

As this issue was opened with two purposes and the main discussion has been about the timer of the progress window, should I separate this out into two distinct feature requests, keeping this one as the blackout screen, and make a new one regarding colour customisation?

@falahati
Copy link
Owner

falahati commented Oct 31, 2019

Thanks for the feedback. It is ok to have a single issue for both topics since I will probably implement these features together when I find the time to do so eventually.

I choose the dark gray background color due to the fact that a lot of flashing will happen and I didn't want the user to get blind in the process and I was just lazy with the loading colors as orange is the default color used in the loading control. :)
The right way to do this is to allow for user customization as well as using system accent color as default.

@strazto
Copy link

strazto commented Nov 1, 2019

I've gone ahead and implemented a custom timing setting on a per-profile basis, as in #31 .

I can envision lots of edge cases when switching between two profiles with radically different settings vs profiles with relatively similar settings, and I suppose a more robust solution might involve making some predictions based on these differences, but I suspect that being able to set how long profile switches take will be more than enough for most users (This is a tool whose value is driven by convenience, after all)

I choose the dark gray background color due to the fact that a lot of flashing will happen and I didn't want the user to get blind in the process

Personally, I really like the choice of background colours. I'm not going to work on this.

I don't know if it helps, @timegrinder but I chose to set the splash progress bar to system desktop color. It looks a little more cohesive to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants