# 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 语音朗读事件枚举:开始、结束、取消、边界等事件。 --- > **注意**:此文档已排除所有已弃用的方法。某些功能可能仅在特定平台上可用,请参考原始文档中的平台支持说明。