C言語で書いた。
成果物
こんな窓を作れました。
前回
簡単に書けるのはいいけど、以下2つの不満あり。
- 起動だけで2秒以上かかるの遅すぎ
- 背景色を白でなく黒にしたい
調査
低レベルAPIを使えば爆速アプリが作れるはず。
上記によると
- DRM(Direct Rendering Manager)
- X Window System
DRMやXという仕組みがあるらしい。これを使って開発してみよう。
今回
上記をほぼ丸パクリした。感謝。ついでにタイトルを設定した。
ソースコード
x0.c
#include <stdio.h> #include <X11/Xos.h> #include <X11/Xlib.h> #include <X11/Xutil.h> int main() { Display *dpy; int scr; Window win; XSetWindowAttributes xswa; char *xservname=NULL; char *title="MyApp"; //char *title="非ASCII文字は表示されずなぜかaになる…どうすればいい?"; if ((dpy=XOpenDisplay(xservname)) == NULL) { fprintf(stderr,"can not open %s\n",XDisplayName(xservname)); exit(-1); } scr = DefaultScreen(dpy); xswa.background_pixel = BlackPixel(dpy,scr); xswa.border_pixel = WhitePixel(dpy,scr); xswa.event_mask = ExposureMask; win = XCreateWindow(dpy,RootWindow(dpy,scr),0,0,320,240,1, CopyFromParent,CopyFromParent,CopyFromParent, CWBackPixel | CWBorderPixel | CWEventMask, &xswa); XStoreName(dpy, win, title); XMapWindow(dpy,win); for (;;) { XEvent ev; XNextEvent(dpy,&ev); switch (ev.type) { case Expose: XClearWindow(dpy,win); break; default: printf("unknown event %d\n",ev.type); break; } } }
APIは以下参照。
make_and_run.sh
#!/usr/bin/env bash gcc -I/usr/X11R6/include -L/usr/X11R6/lib x0.c -o x0 -lX11 ./x0
これを以下のように実行すると、コンパイルして実行する。
$ ./make_and_run.sh
Windowが出た! しかも実行した瞬間に! 速い! えらい!
細かい疑問
- 日本語のタイトルってどうやれば設定できるの?
- waylandっていうXの置き換えをめざす奴がいるらしいけど、どうなの?
感想
- 超面倒そう…
- Xってツイッターじゃないの?
- 今どきXプログラミングなんて書いてる人いるん? 皆TypeScriptなんじゃない?
- XのAPI一覧、20世紀のサイト感が漂っている…
- 懐古厨の記事みたい(もう懐古厨という言葉自体がそれ)
- 玄人ぶれそう。Xプログラミングって知ってるか?
パフォーマンスは最高だろうけど、やりたいことを実現するのに何年かかるやら…。