Add `.xsh` script mentioned in gitea #50
Note since it's actually `xonsh` code run with either, - most pedantically: `xonsh ./snippets/calc_ppi.xsh` - or relying on how shebang: `./snippets/calc_ppi.xsh` * an sheboom.dpi_scaling_round2
parent
49bedb4912
commit
e63cffaf53
|
|
@ -0,0 +1,64 @@
|
|||
#!env xonsh
|
||||
'''
|
||||
Compute the pxs-per-inch (PPI) naively for the local DE.
|
||||
|
||||
NOTE, currently this only supports the `sway`-TWM on wayland.
|
||||
|
||||
!TODO!
|
||||
- [ ] support Xorg (and possibly other OSs as well?
|
||||
- [ ] conver this to pure py code, dropping the `.xsh` specifics
|
||||
instead for `subprocess` API calls?
|
||||
- [ ] possibly unify all this with `./qt_screen_info.py` as part of
|
||||
a "PPI config wizard" or something, but more then likely we'll
|
||||
have lib-ified version inside modden/piker by then?
|
||||
|
||||
'''
|
||||
|
||||
import math
|
||||
import json
|
||||
|
||||
# XXX, xonsh part using "subprocess mode"
|
||||
disp_infos: list[dict] = json.loads($(wlr-randr --json))
|
||||
lappy: dict = disp_infos[0]
|
||||
|
||||
dims: dict[str, int] = lappy['physical_size']
|
||||
w_cm: int = dims['width']
|
||||
h_cm: int = dims['height']
|
||||
|
||||
# cm per inch
|
||||
cpi: float = 25.4
|
||||
|
||||
# compute "diagonal" size (aka hypot)
|
||||
diag_inches: float = math.sqrt((h_cm/cpi)**2 + (w_cm/cpi)**2)
|
||||
|
||||
# compute reso-hypot / inches-hypot
|
||||
hi_res: dict[str, float|bool] = lappy['modes'][0]
|
||||
w_px: int = hi_res['width']
|
||||
h_px: int = hi_res['height']
|
||||
|
||||
diag_pxs: float = math.sqrt(h_px**2 + w_px**2)
|
||||
unscaled_ppi: float = diag_pxs/diag_inches
|
||||
|
||||
# retrieve TWM info on the display (including scaling info)
|
||||
sway_disp_info: dict = json.loads($(swaymsg -r -t get_outputs))[0]
|
||||
scale: float = sway_disp_info['scale']
|
||||
|
||||
print(
|
||||
f'output: {sway_disp_info["name"]!r}\n'
|
||||
f'--- DIMENSIONS ---\n'
|
||||
f'w_cm: {w_cm!r}\n'
|
||||
f'h_cm: {h_cm!r}\n'
|
||||
f'w_px: {w_px!r}\n'
|
||||
f'h_cm: {h_px!r}\n'
|
||||
f'\n'
|
||||
f'--- DIAGONALS ---\n'
|
||||
f'diag_inches: {diag_inches!r}\n'
|
||||
f'diag_pxs: {diag_pxs!r}\n'
|
||||
f'\n'
|
||||
f'--- PPI-related-info ---\n'
|
||||
f'(DE reported) scale: {scale!r}\n'
|
||||
f'unscaled PPI: {unscaled_ppi!r}\n'
|
||||
f'|_ =sqrt(h_px**2 + w_px**2) / sqrt(h_in**2 + w_in**2)\n'
|
||||
f'scaled PPI: {unscaled_ppi/scale!r}\n'
|
||||
f'|_ =unscaled_ppi/scale\n'
|
||||
)
|
||||
Loading…
Reference in New Issue