sourcegit-scm / sourcegit

Windows/macOS/Linux GUI client for GIT users
MIT License
1.05k stars 102 forks source link

Feature request: Hide column, adjust column width, re-order column position, adjust spacing as per font size #461

Open lamyergeier opened 1 week ago

lamyergeier commented 1 week ago

image

Spacing can be adjusted as per font size so that it doesn't look cluttered on High-DPI screen

On my High resolution screen I would like to use Font size 28 to avoid straining my eyes (please adjust row height (multiple of font size, like 1.5 times or 2 times) and column width (fits column headers and still have some spacing from the edge, Left tab column width) for adequate spacing):

image

love-linger commented 1 week ago

This article might be helpful to you https://github.com/AvaloniaUI/Avalonia/wiki/Configuring-X11-per-monitor-DPI.

This app actually has fully DPI awareness on Windows and macOS. On Linux, since there's so many desktop environments, it may not work by default. Currently, the AvaloniaUI (which UI framework used by this app) will try to read some global environment variables to do this job. The source code is:

static IScalingProvider GetScalingProvider(AvaloniaX11Platform platform)
{
    var envSets = new[]
    {
        ("AVALONIA_GLOBAL_SCALE_FACTOR", "AVALONIA_SCREEN_SCALE_FACTORS", new[] { "AVALONIA_USE_PHYSICAL_DPI" })
    }.ToList();

    if (Environment.GetEnvironmentVariable("AVALONIA_SCREEN_SCALE_IGNORE_QT") != "1")
    {
        envSets.Add(("QT_SCALE_FACTOR", "QT_SCREEN_SCALE_FACTORS",
            new[] { "QT_AUTO_SCREEN_SCALE_FACTOR", "QT_USE_PHYSICAL_DPI" }));
    }

    UserScalingConfiguration? config = null;
    double global = 1;
    bool forceAuto = false;

    foreach (var envSet in envSets)
    {
        var envConfig = TryGetEnvConfiguration(envSet.Item1, envSet.Item2, envSet.Item3);
        if (envConfig != null)
        {
            (config, global, forceAuto) = envConfig.Value;
            break;
        }
    }

    IScalingProvider provider;
    if (config != null)
        provider = new UserConfiguredScalingProvider(config.NamedConfig, config.IndexedConfig);
    else if (forceAuto)
        provider = new PhysicalDpiScalingProvider();
    else 
        provider = new XrdbScalingProvider(platform);

    // ReSharper disable once CompareOfFloatsByEqualityOperator
    if (global != 1)
        provider = new PostMultiplyScalingProvider(provider, global);

    return provider;
}
lamyergeier commented 1 week ago

@love-linger Thanks, but I don't use X11 as most modern Linux desktops are now using Wayland.

image

May I suggest that you could provide users to be able to define line height factor as a multiple of Font size (as shown in the above image). And this line height factor can be defined in the software for all row height (also applicable to above image). Users could a choose a value from 1 to 2.5 in steps of 0.25 to have tight spacing or more spacing between lines.

love-linger commented 1 week ago

https://github.com/AvaloniaUI/Avalonia/wiki/Configuring-X11-per-monitor-DPI this also works on Wayland since there are many of X11 software runs on XWayland

love-linger commented 5 days ago