Skip to content

Commit

Permalink
scarab: Apply scaling factor in Wayland
Browse files Browse the repository at this point in the history
Sets `AVALONIA_GLOBAL_SCALE_FACTOR` to the GNOME desktop scaling factor
based on
<AvaloniaUI/Avalonia#9390 (comment)>,
falling back to the X FreeType DPI setting if the former is not
available.

Does not include `gsettings` and `xrdb` in build inputs, since these
should be available on the relevant platforms.

Bash does not support decimal/floating point arithmetic, so this *does*
include `bc` in the runtime dependencies.
  • Loading branch information
l0b0 committed Nov 10, 2024
1 parent 6478651 commit 7b09fac
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pkgs/tools/games/scarab/default.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
lib,
bc,
buildDotnetModule,
fetchFromGitHub,
copyDesktopItems,
Expand Down Expand Up @@ -29,6 +30,10 @@ buildDotnetModule rec {
-n nuget.org --configfile NuGet.Config
'';

runtimeDeps = [
bc
];

nativeBuildInputs = [
copyDesktopItems
icoutils
Expand All @@ -45,6 +50,8 @@ buildDotnetModule rec {
size=''${sizes[$i]}x''${sizes[$i]}
install -D omegamaggotprime_''$((i+1))_''${size}x32.png $out/share/icons/hicolor/$size/apps/scarab.png
done
wrapProgram "$out/bin/Scarab" --run '. ${./scaling-settings.bash}'
'';

desktopItems = [
Expand Down
24 changes: 24 additions & 0 deletions pkgs/tools/games/scarab/scaling-settings.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Keep existing value if it is already non-empty
if [[ -z "${AVALONIA_GLOBAL_SCALE_FACTOR-}" ]] && type gsettings >/dev/null; then
echo 'Attempting to get GNOME desktop interface scaling factor' >&2
AVALONIA_GLOBAL_SCALE_FACTOR="$(gsettings get org.gnome.desktop.interface scaling-factor)"
AVALONIA_GLOBAL_SCALE_FACTOR="${AVALONIA_GLOBAL_SCALE_FACTOR##* }"
fi

if [[ -z "${AVALONIA_GLOBAL_SCALE_FACTOR-}" ]] && type xrdb >/dev/null; then
echo 'Attempting to get scaling factor from X FreeType DPI setting' >&2
dpi="$(xrdb -get Xft.dpi)"
if [[ -n "${dpi}" ]]; then
AVALONIA_GLOBAL_SCALE_FACTOR=$(echo "scale=2; ${dpi}/96" | bc)
fi
fi

if [[ "${AVALONIA_GLOBAL_SCALE_FACTOR-}" == "0" ]]; then
echo 'Unset invalid scaling value' >&2
unset AVALONIA_GLOBAL_SCALE_FACTOR
fi

if [[ -n "${AVALONIA_GLOBAL_SCALE_FACTOR-}" ]]; then
echo "Applying scale factor: ${AVALONIA_GLOBAL_SCALE_FACTOR}" >&2
export AVALONIA_GLOBAL_SCALE_FACTOR
fi

0 comments on commit 7b09fac

Please sign in to comment.