官宣!Wayland正式支持基于IntelliJ的IDE

对于基于IntelliJ IDE的Linux用户来说,一项令人期待的进步即将到来 – 对 Wayland 显示服务器协议的支持。 这项更新将带来许多好处,包括解决古老的分数缩放问题以及在与适用于 Linux 的 Windows 子系统 (WSLg)(在底层运行 Wayland 服务器)一起使用时提升桌面集成。虽然 Wayland 支持还远未完成,但现有功能已可供在 Wayland 上运行一些 Java Swing 和 AWT 应用程序。

在本文中,我们将深入研究这些进步,并探讨这种新颖的显示服务器方式带来的一些技术挑战。

JetBrains IDE正式版下载

Wayland

Wayland是一种现代显示服务器协议,旨在为图形环境提供更高效、更安全、适应性更强的架构来取代X Window系统。 它在许多重要领域带来新的范式,例如:

  • Wayland 不提供任何绘图基元,仅促进在屏幕上显示应用程序必须提前准备的像素。 它也不会装饰窗口,尽管部分实现旨在通过自定义协议提供帮助。
  • 它将应用程序彼此隔离并与桌面本身隔离,没有将窗口定位在屏幕上的特定坐标的内置功能,也没有查询该位置或其他窗口的像素的方式。
  • 对于表面由人发起的所有行为 – 例如移动窗口或将文本复制到剪贴板 – Wayland 的协议要求应用程序证明它确实代表用户行事,通常通过提供最近从 Wayland 收到的事件的指针,让服务器可以独立于客户端进行验证。
  • Wayland 协议为事务性,允许逐渐构建新状态,然后将结果作为一个整体提交,确保用户永远不会看到处于不一致状态的 UI。
  • Wayland 采用模块化设计,不同服务器可以支持各种协议,这就扩展了 Wayland 的功能以满足多种用例的需求。 不过,需要注意的是,并非所有服务器都支持同一组协议。 例如,只有五分之一的流行服务器(截至 2023 年 8 月)支持最新的 wp_fractional_scale_manager_v1 协议。
领先技术

XWayland 为不(尚未)直接与 Wayland 通信的图形应用程序提供了一条过渡路径,XWayland 是在 Wayland 会话之上运行的 X11 实现,这是所有 Java 应用程序(包括所有 JetBrains 基于 IntelliJ 的 IDE)显示 UI 并获取鼠标和键盘输入的方式。

拖放、窗口切换和弹出菜单存在问题,例如,无法在窗口范围之外截图, 部分问题甚至可以在 XWayland 框架内得到解决(有些问题实际上在最新 OpenJDK 中得到了解决)。

也许 XWayland 最紧迫的问题是缩放, 启用分数缩放后,“遗留”X11 应用程序渲染低于显示器的分辨率,然后由 Wayland 放大,这会使任何文本都明显模糊。 原因是应用程序没有任何方法可以告诉 X 服务器它是“HiDPI 感知型”应用程序,因此服务器必须假设最坏的情况,并通过缩放窗口像素来提供“帮助”。 不过Wayland 确实能够告诉服务器窗口的缩放比例,因此只要切换到使用 Wayland,这就不再是问题。

挑战

然而使 Java 对 Wayland 原生化说起来容易做起来难,就 JDK 而言,这相当于创建一个新的 Toolkit,它几乎是与 GUI 相关的所有内容的发源地。这包括图形、鼠标指针处理、按键转换、启动屏幕显示和输入方法提供 – 这些都必须从头开始实现。例如,X11 工具包大约有 50,000 行 Java 和 20,000 行原生代码,其中只有一小部分可以在 Wayland 中重用。

从非常概括的角度来看,任务非常简单:API (Wayland) 和另一个 API (Java) 需要互相转换。 Wayland 有 wl_keyboard:event:key 用于按键,Java 有 KeyEvent。 Java 有 SurfaceData 类来存储窗口的像素,Wayland 有 wl_buffer等,不过这些 API 的详细信息有很大不同。举个简单的例子,长时间按下一个键时,Wayland 服务器不会生成个别键盘事件,您只会得到一个。 然而在这种情况下,Java 桌面子系统的其余部分期望定期接收 KeyEvent 报告,并且工具包有责任做出此类安排。

从积极的一面来看,并不是要先实现所有东西才能启动一个简单的程序, 例如Swing 应用程序不依赖于 AWT UI 元素。这让您能够灵活确定优先级,首先交付重要的功能,将其他功能留给以后。

另一个幸运之处在于 Java 图形子系统的巧妙设计,它从不依赖于 X11 绘图基元。 这使得在 Wayland 上快速运行基于软件的渲染成为可能,并且几乎不需要修改平台无关的通用代码。

Wayland 工具包

Wayland 工具包的开发始于与 Oracle 桌面团队的共同工作 Project Wakefield,代码基于 OpenJDK 21。 截至 2023 年 8 月,工具包提供:

  • 基于软件的渲染。
  • 最低窗口装饰。
  • 交互式调整窗口大小和重新定位窗口,包括最大化、最小化和全屏支持。
  • 弹出窗口,包括用于顶级菜单的窗口。
  • HiDPI 和多显示器支持,包括不同的显示器缩放。
  • 鼠标和键盘,包括国际字符。

未来几个月的当务之急是:

  • 基于 Vulkan 的加速渲染。
  • 输入方法。
  • 剪贴板和拖放支持。
  • 启动屏幕。
  • 使用键盘快捷键切换窗口(鉴于 Wayland 严格的安全模式,这是一项非常复杂的工作)。

更详细的进度报告可参见项目的 wiki:Work breakdown - Work breakdown - OpenJDK Wiki(定期更新)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/145736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高德地图系列(一):vue项目如何使用高德地图、入门以及基本控件使用

目录 第一章 前言 第二章 准备工作 2.1 账号注册 2.2 高德地图开发平台文档 2.3 创建应用 第三章 使用地图 3.1 地图使用步骤 3.2 理解几个地图基础控件 3.3 基础类理解 第一章 前言 小编都是在vue项目中使用高德地图的,每一个功能都会亲测可用之后才会…

大语言模型|人工智能领域中备受关注的技术

个人主页:【😊个人主页】 系列专栏:【❤️其他领域】 文章目录 前言关于大语言模型大语言模型是什么?大语言模型有什么用?文案写作知识库回答文本分类代码生成 AWS 如何通过 LLM 提供帮助?Amazon BedrockAmazon SageM…

IDEA软件使用步骤

1.IDEA概述 IDEA全称InelliJ IDEA,是用于java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境:把代码编写,编译,执行,调试扽过多种功能综合到一起的开发工具。 下载:https…

【C语言 | 数组】C语言数组详解(经典,超详细)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

读书笔记:彼得·德鲁克《认识管理》第21章 企业与政府

一、章节内容概述 企业社会责任最重要的维度之一是政企关系。无论对于企业的顺利运作,还是对于政府的顺利运作,政企关系都至关重要。然而,重商主义典范和宪政主义典范这两种传统理论越来越不适应社会现实,越来越失效。虽然当前尚…

Unity开发之C#基础-异常处理(Try Catch)

前言 其实本来这章应该将栈和队列的 但是后来想想 栈和队列在实际应用很少跟多的是大家了解一下栈和队列的基本常识比如先进先出的是谁后进先出的是谁这种 csdn有很多介绍栈和队列的文章 我觉得都比我理解深刻所以大家可以去搜索参照一下 今天我们继续往下讲解 如何自己主动的…

如何从Android手机恢复已删除的联系人

联系人应该是最重要的信息之一。 如果您不小心从Android手机中删除了联系人,该怎么办? 如果不容易找回丢失的联系人,您可以使用奇客数据恢复安卓版。 从Android的手机中恢复已删除的联系人 只需删除Android联系人,然后您就可以通…

ubuntu中使用 vscode 连接docker开发环境

文章目录 ubuntu中使用 vscode 连接docker开发环境步骤一:安装 Remote Development 插件步骤二:连接远程环境步骤三:开发 问题解决参考连接 ubuntu中使用 vscode 连接docker开发环境 Remote Development 是一个 Visual Studio Code 插件&…

WPF小知识

在编写WPF程序遇到一些小问题&#xff0c;所以记录起来&#xff0c;查其他方便。 Label自动换行 网上搜的都不能自动换行&#xff0c;发现使用Run 就可以。在脚本中直接调用labTip.Text进行赋值就可以了。 <Label Foreground"#FF9E9E9E" FontSize"16"…

Google codelab WebGPU入门教程源码<4> - 使用Uniform类型对象给着色器传数据(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#5 对应的源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。 class Color4 {r: number;g: number;b: number;a: number;constructor(pr 1.0, …

【hive-解决】HiveAccessControlException Permission denied: CREATEFUNCTION

文章目录 一.任务描述二. 解决 一.任务描述 Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [nameroot, typeUSER] does not have following privileges for operation CREATEFUNCTION [ADMIN PRIVILEGE on INPUT, ADMIN…

华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯

近日&#xff0c;日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解&#xff0c;揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示&#xff0c;该手机的国产零部件比例达到了47%&#xff0c;相较于三年前的 Mate 40 Pro&#xff0c;提高…

gitlab 12.7恢复

一 摘要 本文主要介绍基于gitlab 备份包恢复gitlab 二 环境信息 科目老环境新环境操作系统centos7.3centos7.6docker19.0.319.0.3gitlab12.712.7 三 实施 主要有安装docker\docker-compose\gitlab 备份恢复三个文件 1.gitlab 配置文件gitlab.rb 2.gitlab 加密文件gitlab-s…

自动化测试面试经历

一家做户外的外企 面试问题 1、自我介绍&#xff1a;大概介绍了自己的工作经历 2、数据库问题&#xff1a;学生表中包含id、姓名、成绩、班级&#xff0c;求平均成绩 回答&#xff1a;group by 班级&#xff0c;求平均&#xff08;不够完美&#xff09; 3、java的访问修饰符…

你不知道的forEach函数

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 老实说我不喜欢用forEach&#xff0c;因为它导致的一些bug总是这么不经意&#xff0c;盘点我不喜欢的原因 原因一&…

自动驾驶汽车:人工智能最具挑战性的任务

据说&#xff0c;自动驾驶汽车是汽车行业梦寐以求的状态&#xff0c;将彻底改变交通运输业。就在几年前&#xff0c;对自动驾驶汽车的炒作风靡一时&#xff0c;那么到底发生了什么呢&#xff1f;这么多公司吹嘘到2021年我们将迎来的无人驾驶汽车革命在何处&#xff1f;事实证明…

[ubuntu]ubuntu上安装jdk1.8教程

首先需要去官方网站去下载对应jdk1.8版本&#xff1a; https://www.oracle.com/java/technologies/downloads/ 您也可以去csdn搜索我提供jdk安装包 这里以jdk-8u201-linux-x64.tar.gz为例子&#xff0c;首先下载安装后解压 tar -zxvf jdk-8u201-linux-x64.tar.gz 比如我解…

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…

基于 selenium 实现网站图片采集

写在前面 有小伙伴选题&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…

RabbitMQ之发布确认高级

文章目录 前言一、发布确认 整合springboot1、确认机制方案2、代码架构图3、配置文件4、添加配置类5、消息生产者6、回调接口7、消息消费者8、结果分析 二、回退消息1、Mandatory 参数2、消息生产者代码3、回调接口4、结果分析 三、备份交换机1、代码架构图2、修改配置类3、报警…