diff --git a/doc/en/scripting/builtins/libgui.md b/doc/en/scripting/builtins/libgui.md
index 3dc10612b..e6febc9db 100644
--- a/doc/en/scripting/builtins/libgui.md
+++ b/doc/en/scripting/builtins/libgui.md
@@ -16,6 +16,17 @@ gui.str(text: str, context: str) -> str
-- Returns size of the main container (window).
gui.get_viewport() -> {int, int}
+-- Returns current GUI scale: window pixels per one UI unit (0.5..4).
+-- Set by the display.gui-scale setting (auto mode fits the window size).
+gui.get_scale() -> number
+
+-- Returns GUI scale used in auto mode (fits the current window size).
+gui.get_max_scale() -> int
+
+-- Returns cursor position in UI units (unlike input.get_mouse_pos,
+-- which returns window pixels). Use it to position UI elements.
+gui.get_cursor_pos() -> {number, number}
+
-- Returns environment (global variables table) of the specified document.
gui.get_env(document: str) -> table
```
diff --git a/doc/en/scripting/builtins/libinput.md b/doc/en/scripting/builtins/libinput.md
index 9cf754d33..c2f7c858d 100644
--- a/doc/en/scripting/builtins/libinput.md
+++ b/doc/en/scripting/builtins/libinput.md
@@ -55,7 +55,8 @@ end, document.root)
input.get_mouse_pos() --> {int, int}
```
-Returns cursor screen position.
+Returns cursor screen position in window pixels.
+To get position in UI units (affected by GUI scale) use `gui.get_cursor_pos()`.
```lua
input.get_mouse_delta() --> {int, int}
diff --git a/doc/ru/scripting/builtins/libgui.md b/doc/ru/scripting/builtins/libgui.md
index 51ac7307f..0085501c2 100644
--- a/doc/ru/scripting/builtins/libgui.md
+++ b/doc/ru/scripting/builtins/libgui.md
@@ -31,6 +31,17 @@ gui.str(text: string, context: string) -> string
-- Возвращает размер главного контейнера (окна).
gui.get_viewport() -> {number, number}
+-- Возвращает текущий масштаб интерфейса: пикселей окна в одной единице UI (0.5..4).
+-- Задаётся настройкой display.gui-scale (в режиме Авто подбирается под размер окна).
+gui.get_scale() -> number
+
+-- Возвращает масштаб интерфейса, который выбирается в режиме Авто (помещается в текущее окно).
+gui.get_max_scale() -> int
+
+-- Возвращает позицию курсора в единицах UI (в отличие от input.get_mouse_pos,
+-- возвращающей пиксели окна). Используйте для позиционирования элементов UI.
+gui.get_cursor_pos() -> {number, number}
+
-- Возвращает окружение (глобальные переменные) указанного документа.
gui.get_env(document: string) -> table
diff --git a/doc/ru/scripting/builtins/libinput.md b/doc/ru/scripting/builtins/libinput.md
index f3ac4b699..d1ef05af8 100644
--- a/doc/ru/scripting/builtins/libinput.md
+++ b/doc/ru/scripting/builtins/libinput.md
@@ -29,7 +29,8 @@ input.set_enabled(bindname: string, flag: boolean)
## Курсор мыши
```lua
--- Возвращает позицию курсора на экране.
+-- Возвращает позицию курсора на экране в пикселях окна.
+-- Для позиции в единицах UI (с учётом масштаба) используйте gui.get_cursor_pos().
input.get_mouse_pos() -> {number, number}
-- Возращает дельту позиции курсора.
diff --git a/res/layouts/pages/settings_audio.xml.lua b/res/layouts/pages/settings_audio.xml.lua
index 97628d1e8..d27c3c4e1 100644
--- a/res/layouts/pages/settings_audio.xml.lua
+++ b/res/layouts/pages/settings_audio.xml.lua
@@ -1,28 +1,7 @@
-function create_trackbar_setting(id, name, step, postfix)
- local info = app.get_setting_info(id)
- postfix = postfix or ""
- document.root:add(gui.template("track_setting", {
- id=id,
- name=gui.str(name, "settings"),
- value=app.get_setting(id),
- min=info.min,
- max=info.max,
- step=step,
- postfix=postfix
- }))
- update_trackbar_label(app.get_setting(id), id, name, postfix)
-end
-
-function update_trackbar_label(x, id, name, postfix)
- app.set_setting(id, x)
- -- updating label
- document[id..".L"].text = string.format(
- "%s: %s%s",
- gui.str(name, "settings"),
- app.str_setting(id),
- postfix
- )
-end
+local settings = require "core:settings_common".new(document, {app=app})
+-- templates call these functions by name, so they must be global
+create_trackbar_setting = settings.create_trackbar_setting
+update_trackbar_label = settings.update_trackbar_label
function update_checkbox_setting(id, value)
app.set_setting(id, value)
@@ -41,12 +20,8 @@ function update_checkbox_setting(id, value)
end
end
-function create_checkbox(id, name, tooltip)
- tooltip = tooltip or ''
- document.root:add(string.format(
- "%s",
- id, app.str_setting(id), gui.str(tooltip, "settings"), gui.str(name, "settings")
- ))
+local function create_audio_checkbox(id, name, tooltip)
+ settings.create_checkbox(id, name, tooltip, "update_checkbox_setting")
update_checkbox_setting(id, app.get_setting(id))
end
@@ -78,6 +53,7 @@ function on_open()
create_trackbar_setting("audio.volume-ui", "UI Sounds", 0.01)
create_trackbar_setting("audio.volume-ambient", "Ambient", 0.01)
create_trackbar_setting("audio.volume-music", "Music", 0.01)
+ create_trackbar_setting("audio.volume-contrast", "Volume Contrast", 0.01, "", "audio.volume-contrast.tooltip")
document.root:add("")
document.root:add("