#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# Used as a source

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; }

DEFAULT_CONF=$(< /usr/lib/ublinux/default)
[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf"

SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/video; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

xfce4_hidpi(){
    [[ -x /usr/bin/startxfce4 ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	xfconf-query --channel xsettings --property /Gdk/WindowScalingFactor --create --type int --set "${SCALE}"
	xfconf-query --channel xsettings --property /Gtk/CursorThemeSize --create --type int --set "${MOUSE_CURSOR}"
	xfconf-query --channel xsettings --property /Xft/DPI --create --type int --set "${XORG_DPI}"
	xfconf-query --channel xfwm4 --property /general/theme --create --type string --set "Default-xhdpi"
    elif [[ $1 == @(disable|off) ]]; then
	xfconf-query --channel xsettings --property /Gdk/WindowScalingFactor --reset
	xfconf-query --channel xfwm4 --property /general/theme --reset
	xfconf-query --channel xsettings --property /Gtk/CursorThemeSize --reset
	xfconf-query --channel xsettings --property /Xft/DPI --reset
    fi
}
plasma_hidpi(){
    [[ -x /usr/bin/plasmashell ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	kwriteconfig5 --file kcmfonts --group General --key forceFontDPI "${XORG_DPI}"
	kwriteconfig5 --file kcminputrc --group Mouse --key cursorSize "${MOUSE_CURSOR}"
	kwriteconfig5 --file kdeglobals --group KScreen --key ScaleFactor "${SCALE}"
	kwriteconfig5 --file kdeglobals --group KScreen --key ScreenScaleFactors "${SCALE};${SCALE};${SCALE};${SCALE};"
	# ScreenScaleFactors "DP1=2;HDMI1=2;HDMI2=2;VIRTUAL1=2;"
    elif [[ $1 == @(disable|off) ]]; then
	kwriteconfig5 --file kcmfonts --group General --key forceFontDPI --delete
	kwriteconfig5 --file kcminputrc --group Mouse --key cursorSize --delete
	kwriteconfig5 --file kdeglobals --group KScreen --key ScaleFactor --delete
	kwriteconfig5 --file kdeglobals --group KScreen --key ScreenScaleFactors --delete
    fi
}
gnome_hidpi(){
    [[ -x /usr/bin/startgnome ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	true
    elif [[ $1 == @(disable|off) ]]; then
	true
    fi
}
lxde_hidpi(){
    [[ -x /usr/bin/startlxde ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	true
    elif [[ $1 == @(disable|off) ]]; then
	true
    fi
}
lxqt_hidpi(){
    [[ -x /usr/bin/startlxqt ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	true
    elif [[ $1 == @(disable|off) ]]; then
	true
    fi
}
mate_hidpi(){
    [[ -x /usr/bin/startmate ]] || return 0
    if  [[ $1 == @(enable|on) ]]; then
	true
    elif [[ $1 == @(disable|off) ]]; then
	true
    fi
}

    if [[ -n ${XORG_DPI} ]]; then
	if [[ ${XORG_DPI} == @(no|disable) ]]; then
	    xfce4_hidpi disable
	    plasma_hidpi disable
	    gnome_hidpi disable
	    lxde_hidpi disable
	    lxqt_hidpi disable
	    mate_hidpi disable
	    return 0
	elif [[ ${XORG_DPI} == auto ]]; then
	    XORG_DPI=192
	    MOUSE_CURSOR=48
	    SCALE=2
	elif [[ ${XORG_DPI} == @(192|4K) ]]; then
	    XORG_DPI=192
	    MOUSE_CURSOR=48
	    SCALE=2
	elif [[ ${XORG_DPI} == @(144|2K) ]]; then
	    XORG_DPI=144
	    MOUSE_CURSOR=32
	    SCALE=1.5
	else
	    # Пользовательское значение XORG_DPI, остальные велечины высчитываются
	    MOUSE_CURSOR=28
	    SCALE=1
	fi
	xfce4_hidpi enable
	plasma_hidpi enable
	gnome_hidpi enable
	lxde_hidpi enable
	lxqt_hidpi enable
	mate_hidpi enable
    fi
