#!/usr/bin/bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# Used as a source

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

    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
fi
