Home

Finish LINQPad Dark Theme?

Are there any plans to finish/implement the dark theming for the regular elements of the UI? Menus, pop-up dialogs, etc. Or even just following the current Windows theme.

While I don't live in Query Properties or the NuGet Manager, they come up often enough to be highly jarring relative to the rest of the UI.

Comments

  • The main menu, all context menus and the main toolbar will be properly dark-theme rendered in the first release of LINQPad 8 (there should be a preview out next week). The icons in the TreeViews (and nearly everywhere else) will also be drawn with a vector-based renderer that's dark-theme aware. Some of this required a WPF rewrite, which is why it took some time. There are plans to improve other areas in the following months. What would you rank as the most important elements?

  • Glad to know the work proceeds. Thanks Joe.

    In terms of priority:

    Query Properties
    NuGet Manager

    Those are the two dialogs I encounter the most.

  • Check out the early LINQPad 8 preview and let us know your thoughts:
    https://www.linqpad.net/linqpad8.aspx

  • Would it be much of an issue if Linqpad added support for "immersive dark mode" (native themed titlebar) ?

    Attached is a sample how it would look today.

    void Main()
    {
        IntPtr hWnd = LINQPad.Util.HostWindowHandle;
        NativeInterop.Dwmapi.UseImmersiveDarkMode(hWnd, true);
    }
    
    internal static class NativeInterop
    {
        public class Dwmapi
        {
            [DllImport("dwmapi.dll")]
            private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);
    
            private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19;
            private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
    
            public static bool UseImmersiveDarkMode(IntPtr handle, bool enabled)
            {
                if (IsWindows10OrGreater(17763))
                {
                    int attribute = DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;
                    if (IsWindows10OrGreater(18985))
                    {
                        attribute = DWMWA_USE_IMMERSIVE_DARK_MODE;
                    }
    
                    int useImmersiveDarkMode = enabled ? 1 : 0;
                    return DwmSetWindowAttribute(handle, attribute, ref useImmersiveDarkMode, sizeof(int)) == 0;
                }
    
                return false;
            }
    
            public static bool IsWindows10OrGreater(int build = -1)
            {
                return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build;
            }
        }
    }
    
  • Thanks - I did not know about this API. Will add this to the next build.

Sign In or Register to comment.