65 lines
1.8 KiB
Plaintext
65 lines
1.8 KiB
Plaintext
|
|
#!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'
|
||
|
|
)
|