Files
Sprout-Farm/SproutFarm-Backend/test/文档/DisplayServer_总结_Markdown.md
2025-09-15 19:10:37 +08:00

559 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DisplayServer API 参考文档
## 类简介
**继承**Object
DisplayServer 是用于低阶窗口管理的服务器接口。所有与窗口管理相关的内容都由 DisplayServer显示服务器处理。
> **无头模式**:如果使用 `--headless` 命令行参数启动引擎,就会禁用所有渲染和窗口管理功能,此时 DisplayServer 的大多数函数都会返回虚设值。
---
## 方法列表
### 🔔 系统交互
#### `void beep()`
发出系统提示音。
#### `void enable_for_stealing_focus(process_id: int)`
允许指定进程获取焦点。
#### `void force_process_and_drop_events()`
强制处理并丢弃所有事件。
---
### 📋 剪贴板操作
#### `String clipboard_get()`
获取剪贴板文本内容。
#### `Image clipboard_get_image()`
获取剪贴板图像内容。
#### `String clipboard_get_primary()`
获取主剪贴板文本内容(仅限 Linux
#### `bool clipboard_has()`
检查剪贴板是否有内容。
#### `bool clipboard_has_image()`
检查剪贴板是否有图像。
#### `void clipboard_set(clipboard: String)`
设置剪贴板文本内容。
#### `void clipboard_set_primary(clipboard_primary: String)`
设置主剪贴板文本内容(仅限 Linux
---
### 🖱️ 鼠标和光标
#### `CursorShape cursor_get_shape()`
获取当前光标形状。
#### `void cursor_set_custom_image(cursor: Resource, shape: CursorShape = 0, hotspot: Vector2 = Vector2(0, 0))`
设置自定义光标图像。
#### `void cursor_set_shape(shape: CursorShape)`
设置光标形状。
#### `BitField[MouseButtonMask] mouse_get_button_state()`
获取鼠标按键状态。
#### `MouseMode mouse_get_mode()`
获取鼠标模式。
#### `Vector2i mouse_get_position()`
获取鼠标位置。
#### `void mouse_set_mode(mouse_mode: MouseMode)`
设置鼠标模式。
#### `void warp_mouse(position: Vector2i)`
将鼠标光标移动到指定位置。
---
### 💬 对话框
#### `Error dialog_input_text(title: String, description: String, existing_text: String, callback: Callable)`
显示文本输入对话框。
#### `Error dialog_show(title: String, description: String, buttons: PackedStringArray, callback: Callable)`
显示系统对话框。
#### `Error file_dialog_show(title: String, current_directory: String, filename: String, show_hidden: bool, mode: FileDialogMode, filters: PackedStringArray, callback: Callable)`
显示文件选择对话框。
#### `Error file_dialog_with_options_show(title: String, current_directory: String, root: String, filename: String, show_hidden: bool, mode: FileDialogMode, filters: PackedStringArray, options: Array[Dictionary], callback: Callable)`
显示带扩展选项的文件选择对话框。
---
### 🎨 主题和颜色
#### `Color get_accent_color()`
获取系统强调色。
#### `Color get_base_color()`
获取系统基础色。
#### `bool is_dark_mode()`
检查系统是否为深色模式。
#### `bool is_dark_mode_supported()`
检查系统是否支持深色模式。
#### `void set_system_theme_change_callback(callable: Callable)`
设置系统主题变化时的回调。
---
### 📱 显示和屏幕
#### `Array[Rect2] get_display_cutouts()`
获取显示器刘海信息。
#### `Rect2i get_display_safe_area()`
获取显示器安全区域。
#### `int get_keyboard_focus_screen()`
获取键盘焦点所在屏幕。
#### `String get_name()`
获取显示服务器名称。
#### `int get_primary_screen()`
获取主屏幕索引。
#### `int get_screen_count()`
获取屏幕数量。
#### `int get_screen_from_rect(rect: Rect2)`
根据矩形位置获取屏幕索引。
#### `bool get_swap_cancel_ok()`
获取是否交换确定取消按钮。
#### `int get_window_at_screen_position(position: Vector2i)`
获取指定屏幕位置的窗口ID。
#### `PackedInt32Array get_window_list()`
获取所有窗口ID列表。
---
### 🖥️ 屏幕操作
#### `int screen_get_dpi(screen: int = -1)`
获取屏幕DPI。
#### `Image screen_get_image(screen: int = -1)`
获取屏幕截图。
#### `Image screen_get_image_rect(rect: Rect2i)`
获取屏幕指定区域截图。
#### `float screen_get_max_scale()`
获取所有屏幕的最大缩放系数。
#### `ScreenOrientation screen_get_orientation(screen: int = -1)`
获取屏幕朝向。
#### `Color screen_get_pixel(position: Vector2i)`
获取指定位置的像素颜色。
#### `Vector2i screen_get_position(screen: int = -1)`
获取屏幕位置。
#### `float screen_get_refresh_rate(screen: int = -1)`
获取屏幕刷新率。
#### `float screen_get_scale(screen: int = -1)`
获取屏幕缩放系数。
#### `Vector2i screen_get_size(screen: int = -1)`
获取屏幕大小。
#### `Rect2i screen_get_usable_rect(screen: int = -1)`
获取屏幕可用区域。
#### `bool screen_is_kept_on()`
检查屏幕是否保持开启。
#### `void screen_set_keep_on(enable: bool)`
设置屏幕保持开启。
#### `void screen_set_orientation(orientation: ScreenOrientation, screen: int = -1)`
设置屏幕朝向。
---
### 🖼️ 图标设置
#### `void set_icon(image: Image)`
设置窗口图标。
#### `void set_native_icon(filename: String)`
使用原生格式设置窗口图标。
---
### 💾 输出管理
#### `bool has_additional_outputs()`
检查是否有额外输出设备。
#### `void register_additional_output(object: Object)`
注册额外输出设备。
#### `void unregister_additional_output(object: Object)`
取消注册额外输出设备。
---
### ⚡ 功能检测
#### `bool has_feature(feature: Feature)`
检查是否支持指定功能。
#### `bool has_hardware_keyboard()`
检查是否有硬件键盘。
#### `bool is_touchscreen_available()`
检查是否支持触屏。
#### `bool is_window_transparency_available()`
检查是否支持窗口透明。
---
### ⌨️ 键盘
#### `int keyboard_get_current_layout()`
获取当前键盘布局。
#### `Key keyboard_get_keycode_from_physical(keycode: Key)`
从物理按键获取键码。
#### `Key keyboard_get_label_from_physical(keycode: Key)`
从物理按键获取标签。
#### `int keyboard_get_layout_count()`
获取键盘布局数量。
#### `String keyboard_get_layout_language(index: int)`
获取键盘布局语言。
#### `String keyboard_get_layout_name(index: int)`
获取键盘布局名称。
#### `void keyboard_set_current_layout(index: int)`
设置当前键盘布局。
---
### 📝 输入法
#### `Vector2i ime_get_selection()`
获取输入法选中范围。
#### `String ime_get_text()`
获取输入法文本。
---
### 🎯 状态指示器
#### `int create_status_indicator(icon: Texture2D, tooltip: String, callback: Callable)`
创建状态指示器。
#### `void delete_status_indicator(id: int)`
删除状态指示器。
#### `Rect2 status_indicator_get_rect(id: int)`
获取状态指示器位置。
#### `void status_indicator_set_callback(id: int, callback: Callable)`
设置状态指示器回调。
#### `void status_indicator_set_icon(id: int, icon: Texture2D)`
设置状态指示器图标。
#### `void status_indicator_set_menu(id: int, menu_rid: RID)`
设置状态指示器菜单。
#### `void status_indicator_set_tooltip(id: int, tooltip: String)`
设置状态指示器提示文本。
---
### 📱 数位板
#### `String tablet_get_current_driver()`
获取当前数位板驱动。
#### `int tablet_get_driver_count()`
获取数位板驱动数量。
#### `String tablet_get_driver_name(idx: int)`
获取数位板驱动名称。
#### `void tablet_set_current_driver(name: String)`
设置数位板驱动。
---
### 🗣️ 文本转语音
#### `Array[Dictionary] tts_get_voices()`
获取语音列表。
#### `PackedStringArray tts_get_voices_for_language(language: String)`
获取指定语言的语音列表。
#### `bool tts_is_paused()`
检查是否暂停。
#### `bool tts_is_speaking()`
检查是否正在朗读。
#### `void tts_pause()`
暂停朗读。
#### `void tts_resume()`
恢复朗读。
#### `void tts_set_utterance_callback(event: TTSUtteranceEvent, callable: Callable)`
设置朗读事件回调。
#### `void tts_speak(text: String, voice: String, volume: int = 50, pitch: float = 1.0, rate: float = 1.0, utterance_id: int = 0, interrupt: bool = false)`
开始朗读文本。
#### `void tts_stop()`
停止朗读。
---
### ⌨️ 虚拟键盘
#### `int virtual_keyboard_get_height()`
获取虚拟键盘高度。
#### `void virtual_keyboard_hide()`
隐藏虚拟键盘。
#### `void virtual_keyboard_show(existing_text: String, position: Rect2 = Rect2(0, 0, 0, 0), type: VirtualKeyboardType = 0, max_length: int = -1, cursor_start: int = -1, cursor_end: int = -1)`
显示虚拟键盘。
---
### 🪟 窗口管理
#### `bool window_can_draw(window_id: int = 0)`
检查窗口是否可绘制。
#### `int window_get_active_popup()`
获取活动弹出窗口ID。
#### `int window_get_attached_instance_id(window_id: int = 0)`
获取窗口附加的实例ID。
#### `int window_get_current_screen(window_id: int = 0)`
获取窗口所在屏幕。
#### `bool window_get_flag(flag: WindowFlags, window_id: int = 0)`
获取窗口标志。
#### `Vector2i window_get_max_size(window_id: int = 0)`
获取窗口最大尺寸。
#### `Vector2i window_get_min_size(window_id: int = 0)`
获取窗口最小尺寸。
#### `WindowMode window_get_mode(window_id: int = 0)`
获取窗口模式。
#### `int window_get_native_handle(handle_type: HandleType, window_id: int = 0)`
获取窗口原生句柄。
#### `Rect2i window_get_popup_safe_rect(window: int)`
获取弹出窗口安全区域。
#### `Vector2i window_get_position(window_id: int = 0)`
获取窗口位置。
#### `Vector2i window_get_position_with_decorations(window_id: int = 0)`
获取窗口位置(含边框)。
#### `Vector3i window_get_safe_title_margins(window_id: int = 0)`
获取标题栏安全边距。
#### `Vector2i window_get_size(window_id: int = 0)`
获取窗口大小。
#### `Vector2i window_get_size_with_decorations(window_id: int = 0)`
获取窗口大小(含边框)。
#### `Vector2i window_get_title_size(title: String, window_id: int = 0)`
获取标题栏大小。
#### `VSyncMode window_get_vsync_mode(window_id: int = 0)`
获取垂直同步模式。
#### `bool window_is_focused(window_id: int = 0)`
检查窗口是否有焦点。
#### `bool window_is_maximize_allowed(window_id: int = 0)`
检查窗口是否可最大化。
#### `bool window_maximize_on_title_dbl_click()`
检查双击标题栏是否最大化。
#### `bool window_minimize_on_title_dbl_click()`
检查双击标题栏是否最小化。
#### `void window_move_to_foreground(window_id: int = 0)`
将窗口移到前台。
#### `void window_request_attention(window_id: int = 0)`
请求窗口注意。
#### `void window_set_current_screen(screen: int, window_id: int = 0)`
设置窗口所在屏幕。
#### `void window_set_drop_files_callback(callback: Callable, window_id: int = 0)`
设置文件拖放回调。
#### `void window_set_exclusive(window_id: int, exclusive: bool)`
设置窗口独占模式。
#### `void window_set_flag(flag: WindowFlags, enabled: bool, window_id: int = 0)`
设置窗口标志。
#### `void window_set_ime_active(active: bool, window_id: int = 0)`
设置输入法是否激活。
#### `void window_set_ime_position(position: Vector2i, window_id: int = 0)`
设置输入法位置。
#### `void window_set_input_event_callback(callback: Callable, window_id: int = 0)`
设置输入事件回调。
#### `void window_set_input_text_callback(callback: Callable, window_id: int = 0)`
设置文本输入回调。
#### `void window_set_max_size(max_size: Vector2i, window_id: int = 0)`
设置窗口最大尺寸。
#### `void window_set_min_size(min_size: Vector2i, window_id: int = 0)`
设置窗口最小尺寸。
#### `void window_set_mode(mode: WindowMode, window_id: int = 0)`
设置窗口模式。
#### `void window_set_mouse_passthrough(region: PackedVector2Array, window_id: int = 0)`
设置鼠标穿透区域。
#### `void window_set_popup_safe_rect(window: int, rect: Rect2i)`
设置弹出窗口安全区域。
#### `void window_set_position(position: Vector2i, window_id: int = 0)`
设置窗口位置。
#### `void window_set_rect_changed_callback(callback: Callable, window_id: int = 0)`
设置窗口位置大小变化回调。
#### `void window_set_size(size: Vector2i, window_id: int = 0)`
设置窗口大小。
#### `void window_set_title(title: String, window_id: int = 0)`
设置窗口标题。
#### `void window_set_transient(window_id: int, parent_window_id: int)`
设置窗口为瞬态。
#### `void window_set_vsync_mode(vsync_mode: VSyncMode, window_id: int = 0)`
设置垂直同步模式。
#### `void window_set_window_buttons_offset(offset: Vector2i, window_id: int = 0)`
设置窗口按钮偏移。
#### `void window_set_window_event_callback(callback: Callable, window_id: int = 0)`
设置窗口事件回调。
#### `void window_start_drag(window_id: int = 0)`
开始拖拽窗口。
#### `void window_start_resize(edge: WindowResizeEdge, window_id: int = 0)`
开始调整窗口大小。
---
### 📞 帮助系统
#### `void help_set_search_callbacks(search_callback: Callable, action_callback: Callable)`
设置帮助系统搜索回调。
#### `void show_emoji_and_symbol_picker()`
显示表情符号选择器。
---
### ⚙️ 事件处理
#### `void process_events()`
处理事件。
---
## 常量
- `SCREEN_WITH_MOUSE_FOCUS = -4`:鼠标焦点所在屏幕
- `SCREEN_WITH_KEYBOARD_FOCUS = -3`:键盘焦点所在屏幕
- `SCREEN_PRIMARY = -2`:主屏幕
- `SCREEN_OF_MAIN_WINDOW = -1`:主窗口所在屏幕
- `MAIN_WINDOW_ID = 0`主窗口ID
- `INVALID_WINDOW_ID = -1`无效窗口ID
---
## 枚举
### Feature
系统功能支持检测枚举,包含多种功能如子窗口、触屏、鼠标、剪贴板、虚拟键盘等支持检测。
### MouseMode
鼠标模式枚举:可见、隐藏、捕获、限制等模式。
### ScreenOrientation
屏幕朝向枚举:横屏、竖屏及其反向,以及传感器自动模式。
### VirtualKeyboardType
虚拟键盘类型默认、多行、数字、小数、电话、邮箱、密码、URL等。
### CursorShape
光标形状枚举:箭头、工字形、指向手形等多种光标样式。
### WindowFlags
窗口标志枚举:控制窗口的各种行为和外观属性。
### WindowMode
窗口模式枚举:窗口、最小化、最大化、全屏等模式。
### HandleType
句柄类型枚举:用于获取不同类型的原生窗口句柄。
### VSyncMode
垂直同步模式枚举:控制画面撕裂和帧率同步。
### TTSUtteranceEvent
语音朗读事件枚举:开始、结束、取消、边界等事件。
---
> **注意**:此文档已排除所有已弃用的方法。某些功能可能仅在特定平台上可用,请参考原始文档中的平台支持说明。