我正在玩这个为我的个人系统编写桌面集成应用程序的想法,它应该像通常的桌面小部件引擎(screenlets,gdesklets,google小工具)一样。它应该从互联网上给我一个关于我的系统的不同信息的完整概述,并最终应该在我的桌面上可视化它们。它应该集中我所有的日常必要信息。
最简单的方法肯定是为已知的桌面小部件引擎之一编写自己的小部件,但我更喜欢从头开始编写它。因此,我正在寻找一些实现提示,我如何在桌面上构建一个全局视图,窗口管理器没有用边框,标题栏和其他东西装饰,并且没有背景颜色。特殊透明度X%效果不是必需的,需要compiz。
一个很好的例子可能是额外的libcario支持绘图。我还会选择像GTK +或QT这样更大的gui工具包。直接使用更复杂的X11 API接口也是一种选择。优选的语言是C和C ++。
如果有人可以分享他的知识,如果他已经在那个领域有过类似的经历,我会很高兴的。
答案 0 :(得分:2)
构建无边框窗口有两种方法:(1)完全绕过窗口管理器,(2)使用窗口管理器。
第一个很简单,但是限制(你必须自己管理例如窗口拖动和放置在虚拟桌面上)。这是通过创建一个带有override-redirect
标志的窗口来完成的。
第二种方法涉及设置窗口属性(如在xprop
中),称为WM提示。如果您想使用原始Xlib,您需要为此学习ICCCM。像gtk +这样的大多数工具包都有用于设置WM提示的API。
对于简单的“是或否”“透明度”,有XShape
API(这在技术上是一个扩展,即X11的可选部分,但它几乎无处不在)。或者您可以创建一个背景设置为None
的窗口(但这种方法可能会出现合成窗口管理器的问题,即Compiz)。或者您可以完全避开应用程序窗口并直接在(虚拟)根窗口上绘制。据推测,libcairo会让你这样做,但我不熟悉它。
希望这有帮助。
答案 1 :(得分:1)
您没有说明您要定位的操作系统,但我假设是一个Linux发行版。
首先,您的窗口管理器必须支持无边框和未修饰的窗口。
然后你需要选择语言(c和c ++完全不同)。如果你选择 c ++,然后Qt接缝就像一个明显的选择。
对于Qt,可以轻松创建无边框窗口:Making a borderless window with for Qt