标签: xlib

X11中的消除锯齿文本

我正在尝试使用Xlib来深入了解Linux GUI程序的工作原理.我写了一个简单的程序,在一个窗口中显示"Hello,world",但它看起来很不合时宜,因为文本没有消除锯齿.

在X11中显示消除锯齿文本的最佳方法是什么?如何在GTK,Qt和其他工具包中实现抗锯齿?

linux x11 antialiasing xlib

6
推荐指数
2
解决办法
4041
查看次数

最小化全屏Xlib OpenGL窗口

我目前正在尝试从我的全屏Xlib OpenGL窗口启用alt-tabbing,但是遇到了一些困难.我试过XUnmapWindow(..),哪种方法有效,但分辨率没有重置(除非我应该手动执行此操作?)并且我的Xlib窗口不会显示为最小化窗口(即我无法将alt-tab返回窗口,即使应用程序似乎仍然在后台运行).

我尝试的下一件事是将窗口从全屏模式更改为窗口模式(即在窗口模式下重新创建窗口),但显然,我宁愿不必这样做.

我正在听FocusOutFocusIn事件,FocusOut似乎在我的alt-tab时调用,但我不知道如何让我的应用程序正确地最小化.如果在FocusOut调用事件时我的代码中没有做任何事情,我的应用程序不会做任何事情(即我不能最小化窗口).

任何帮助,将不胜感激!

编辑:不幸的是,我无法让X Windows正确地最小化全屏窗口.因此,为了解决这个问题,我决定destroy()使用全屏窗口,然后create()在窗口模式下使用新窗口.似乎运作良好.

opengl window-managers fullscreen minimize xlib

6
推荐指数
1
解决办法
2949
查看次数

linux、C++、xft:如何使用它?

我尝试使用Xft的教程,以及让他们打电话的是一个教程...看起来就像是写在朝鲜的阵营......我也发现了这一个。所以让我试着一步一步地做:

// g++ XftTest.cc -lX11 -lXft `pkg-config --cflags freetype2`
#include<unistd.h>
#include<X11/Xlib.h>
#include<X11/Xutil.h>
#include<X11/Xft/Xft.h>
int main()
{
  Display *display;
  XftFont      *font;
  XftDraw      *xftdraw;
  XRenderColor xrcolor;
  XftColor     xftcolor;

  display = XOpenDisplay(0);
  Window XP = XCreateSimpleWindow(display,DefaultRootWindow(display),0,0,360,90,0,0,0);
  XMapWindow(display,XP);

  font = NULL; /* added 6/16 */

  //font = XftFontOpenName(display,0,"NorthKorea-50"); // how to check if this is good ?
  font = XftFontOpenName(display,0,"") /* added 6/16 */
  if (!font) return 1;

  xftdraw = XftDrawCreate(display,XP,DefaultVisual(display,0),DefaultColormap(display,0));

  xrcolor.red  =65535;
  xrcolor.green=0;
  xrcolor.blue =0;
  xrcolor.alpha=65535;
  XftColorAllocValue(display,DefaultVisual(display,0),DefaultColormap(display,0),&xrcolor,&xftcolor);

  XftDrawString8(xftdraw, &xftcolor, …
Run Code Online (Sandbox Code Playgroud)

c++ linux fonts xlib

6
推荐指数
1
解决办法
4092
查看次数

X11 和假键盘/鼠标事件

我想知道如何检测按键事件或鼠标指针事件是否是由像 xdotool 这样的(类似自动化)应用程序生成的。

基本上,我正在编写一个应用程序来检查是否没有真正的鼠标或键盘活动。

在我的应用程序中,只有当我们没有真正的鼠标移动或键盘上没有真正的按键按下/释放时,我才想标记空闲活动。

任何有关此的参考都会很棒。

我想使用纯XLib API 来完成此操作。

我不想使用XCB

任何扩展,例如XRecord(我目前正在使用它来捕获事件)都可以。

linux x11 ubuntu xlib xserver

6
推荐指数
1
解决办法
1578
查看次数

无法调用 XInitThreads

我写了一个 SFML C++ 游戏,并试图开始使用线程,但过了一段时间一切都崩溃了。搜索后我发现修复似乎是调用 XInitThreads(); 但这以某种方式不起作用。

简化代码:

    #include <X11/Xlib.h>   

    int main() {        
    XInitThreads();
    //other stuff
    return 1337;
    }
Run Code Online (Sandbox Code Playgroud)

我尝试编译时收到的错误消息是“对符号‘XInitThreads’的未定义引用。难道头文件正在工作,但没有实现该方法的文件?

c++ xlib sfml

6
推荐指数
1
解决办法
1万
查看次数

如何等到窗口被映射和可见

等待X11窗口映射和查看的正确方法是什么?确切地说,我想等到我可以安全地调用XSetInputFocus()而不会遇到以下错误导致X服务器回火的任何风险:

// X Error of failed request:  BadMatch (invalid parameter attributes)
// Major opcode of failed request:  42 (X_SetInputFocus)    
Run Code Online (Sandbox Code Playgroud)

目前这种错误经常发生,尤其是在慢速X服务器上或者在使用libXrandr更改了监视器分辨率后立即尝试打开新窗口时.

我已经有了这个问题的解决方案,但它非常hacky因为它轮询window属性所以我想知道是否有更清洁的版本.

这是我目前的做法:

static Bool predicate(Display *display, XEvent *ev, XPointer arg)
{
    return(ev->type == MapNotify);
}

static void waitmapnotify(struct osdisplayinfo *osd)
{
    XEvent ev;
    XWindowAttributes xwa;

    XPeekIfEvent(osd->display, &ev, predicate, NULL);

    do {
        XGetWindowAttributes(osd->display, osd->window, &xwa);
        usleep(1);
    } while(xwa.map_state != IsViewable);   
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作得很好,但它很hacky所以我在这里讨论它 - 以防万一有一个更干净的方式来做这件事.

c linux x11 xlib

6
推荐指数
1
解决办法
1090
查看次数

如何使用 python xlib 生成单个按键?

我想制作一个非常简单的 python 3 脚本,它将生成一个按键(F15)。我不想使用一堆库来执行此操作,因为我只需要按下一个键并且不需要支持整个键盘。我知道我需要使用 KeyPress 和 KeyRelease 来生成键盘事件。我只是不确定从哪里开始,而且文档有点混乱。

http://tronche.com/gui/x/xlib/events/keyboard-pointer/keyboard-pointer.html http://python-xlib.sourceforge.net/?page=documentation

python xlib

6
推荐指数
1
解决办法
1527
查看次数

(XGetImage + XPutImage) VS XCopyArea VS (XShmGetImage + XShmPutImage) VS GTK+ 的性能

UPD:很久以前就应该更新这篇文章,但如果有人需要示例,可以在https://github.com/awpe/xwinclone上看到结果软件。


我不仅对 Xlib 很陌生,而且对 Linux 接口编程也很陌生。

我正在尝试解决将一个窗口的内容绘制到另一个窗口的常见任务(这并不像看起来那么常见,因为我找不到任何可靠的示例)。

然而,我遇到了严重的性能问题,我正在寻找可以用来使程序更快、更可靠的解决方案。

现在我将提供一些有关程序流程的信息,因为我不确定所选的程序设计是否正确,也许我使用Xlib的方式存在一些错误。

程序以适当的方式获取活动窗口(从现在起称为SrcWin)的ID(Xlib“Window”类型)(不是某些程序的小部件的ID,而是绘制所有内容的真实可见窗口),首先它XGetInputFocus用于获取焦点窗口,然后在找到根窗口的子窗口时使用迭代窗口XQueryTree,然后使用XmuClientWindow函数获取命名窗口(如果不是已找到的窗口)。

然后使用它获取SrcWinXGetWindowAttributes的宽度和高度,它们都在函数中用于创建相同大小的新窗口(称为TrgWin )。XCreateSimpleWindow

一些事件是为新窗口 TrgWin 注册的,例如KeyPressExpose usingXSelectInput函数。

图形上下文是这样创建的:

GC  gc = DefaultGC (Display, ScreenCount (Display) - 1);
Run Code Online (Sandbox Code Playgroud)

现在开始无限循环,在此循环中select调用函数来等待 X 连接上的某些事件或超时 ( struct timeval)。

之后该程序尝试使用以下命令从SrcWin获取图像:

XImage *xi;
xi = XGetImage (Display, SrcWin, 0, 0, SrcWinWidth, SrcWinHeight, AllPlanes, ZPixmap);
Run Code Online (Sandbox Code Playgroud)

如果成功获取图像,则会将其放入TrgWin

if (xi)
{
    XPutImage (Display, TrgWin, gc, …
Run Code Online (Sandbox Code Playgroud)

c c++ gtk xlib xcb

6
推荐指数
0
解决办法
2306
查看次数

从 Xlib 转换为 xcb

我目前正在将我的一个应用程序从 Xlib 移植到 libxcb,但在查找有关我在某个时候使用的 XInput2 扩展的信息时遇到了一些麻烦。libxcb 中是否有 XInput2 实现?如果是,我在哪里可以找到文档。

目前我在使用以下功能时遇到了麻烦:XIQueryDevice, XISelectEvents. 这些主要是我使用的功能。

也许有人可以为我指出文档或为我提供一个非常小的例子来开始。

c linux x11 xlib xcb

6
推荐指数
1
解决办法
957
查看次数

使用 xlib 绘制边框(框架)

是否可以使用 xlib 绘制没有标题栏、关闭按钮、鼠标按钮响应的透明窗口。所以只是用特定的颜色和宽度边框?就像是在此处输入图片说明

这个橙色矩形是我需要创建的。此外,我希望有可能以编程方式移动、调整大小、关闭并使其闪烁(更改计时器的边框颜色)。

我设法创建没有标题栏的透明窗口,并在窗口的每一侧绘制矩形以制作边框效果:

#define W_WIDTH 640
#define W_HEIGHT 480

#define X_POS 100
#define Y_POS 120
#define BORDER_WIDTH 2

Display *dpy;
Window w;

XRectangle rectangles[4] =
    {
    { X_POS, Y_POS, W_WIDTH, BORDER_WIDTH },
    { X_POS, Y_POS, BORDER_WIDTH, W_HEIGHT },
    { X_POS, W_HEIGHT - BORDER_WIDTH, W_WIDTH, BORDER_WIDTH },
    { W_WIDTH - BORDER_WIDTH, Y_POS, BORDER_WIDTH, W_HEIGHT }
    };

int main(int argc, char *argv[])
{
    GC gc;
    XGCValues gcv;
    int run = 1;

    dpy = XOpenDisplay(NULL);

    XVisualInfo vinfo;
    XMatchVisualInfo(dpy, DefaultScreen(dpy), 32, TrueColor, …
Run Code Online (Sandbox Code Playgroud)

c x11 xlib

6
推荐指数
1
解决办法
872
查看次数

标签 统计

xlib ×10

linux ×5

x11 ×5

c ×4

c++ ×3

xcb ×2

antialiasing ×1

fonts ×1

fullscreen ×1

gtk ×1

minimize ×1

opengl ×1

python ×1

sfml ×1

ubuntu ×1

window-managers ×1

xserver ×1