自分でライブラリ作っちゃえば良い
Xlib を勉強しているのですが、Xt 等の上層ライブラリはC++が前提なのでしょうか?
また、Xt 等を使う場合Xlib は必要無く Xt を使うだけでプログラムが書けるのでしょうか?
プログラミング自体初心者などで良く分かりません。
このままXlib を勉強するのか、それともXt 等の上層ライブラリとそれに必要な言語(C++)
等を、勉強するか悩んでいます。
Xlib や Xt だけなら C でOK。
Xt だけ覚えても、細かいウィンドウ処理をする場合には Xlib が必要になるので
両方勉強しておいた方がいいよ。
ありがとうございます。
Xlibは、「X Window ハンドブック」で勉強しているのですが、Xtでお勧めの本はありますか?
日本語の書籍が希望です。
>>500 トッパンのシリーズ。XlibもXtもみんなある。
私の教科書だったのは「X Toolkit プログラミングテクニック」と
「実践 X-Window Ver.11 プログラミング Xlib と X ツールキット」。
まだ手に入るのかな?
教科書がないと勉強できない人とか役に立つの?
世の中には教科書を与えても勉強しない人がいる
>>503 教科書を読まずにネットに転がっているサンプルコードを改変するだけ
のバカプログラマよりは、はるかにいい。
マニュアルもドキュメントも教科書だろ?
なら、教科書が無いと俺には難しい。
役に立たなくてごめんなさい
>>503 教科書を馬鹿にする者は、教科書に泣くぞ。
508 :
デフォルトの名無しさん:2008/05/13(火) 23:05:49
似たような質問でてるけど、答えが出てないので、
バックグランドで走らせているシェルスクリプトから、
X上でキーボードの状態を入手する方法ありませんか?
(xev見たいな機能をWindowを出さないで実行するとかでもOK)
スクリプト実行から○○秒以内に、
X上(どこでも)で、特定のキーが押された場合に、指定したアプリケーションを実行する。
みたいなことがやりたいです。
「Xで特定のキーが押されたことを通知するプログラム」を作り、シェルスクリプトから起動すればいいのでは?
フォーカスがないときにどうやって取得するのかは、知らん。
この手の質問は「何々しようとして〜やってみたが××が思った通りにならない」
とでも書かれていればレスしやすいんだけどな
とりあえずヘッダでも眺めてみたら?
511 :
508:2008/05/14(水) 20:51:00
Xevent拾おうと思ったけど、フォーカスがない場合は、無理っぽい。
Xlib全然関係ないけど、/dev/input/event0 を一定時間ごとに監視ってのを
やろうかと思ったけど、番号event*が固定されない上に、スマートに検出が難しかった感じです。
Xをフックして、キー入力を拾う方法とかないですかね?
そもそもX端末のキーなのか実行端末のキーなのか、どっちなのかと。
Xサーバの動いてる実端末でキーが拾えればOKです。
どっちでもOKってことですね。
タイマー処理中に、特定のキーが押された状態なのをスクリプトから
検知できるとベスト。
acpiのイベント辺り参考にならんかな
>>508 ウィンドウマネージャのキーアサインをカスタマイズして、外部プログラムを叩くだけで十分じゃね?
キーの押下状態取得なら XQueryKeymap() で取得可能。
window無しでxevみたいなことをしたいのであれば、XGrabKey() を使えばおk
XQueryKeymap()で取ってきたキーコードに
ビットフラグでフィルタして、
XKeycodeToKeysym()で行けそうですね。
後で、試してみます。
518 :
517:2008/05/16(金) 20:17:41
XQueryKeymapで取得できました。
ちょっと、返り値の形式が特殊だったのに手こずりましたが、、、
説明の分かりにくいこと。
せっかくのなので、サンプルコードのうpキボンヌ
こんなのをwhileで回して、欲しいキーのコードと比較したらOKでした。
disp=XOpenDisplay(hostname); して
以下を回す。
XQueryKeymap(disp, keys);
for( i = 0; i < 32; ++i ){
for( j = 0; j < 8 ; j++ ){
if( keys[i] & ( 1 << j ) ){
kcode_pushed = i*8 + j;
KeySym kysim = XKeycodeToKeysym(disp, kcode_pushed, 1);
}
}
}
>>519 #include <stdio.h>
#include <X11/Xlib.h>
int
main(int argc,char *argv[])
{
int i, j;
char keys_return[32];
Display *display = XOpenDisplay(NULL);
if (!display) {
fprintf(stderr,"Cannot open display\n");
return 1;
}
XQueryKeymap(display, keys_return);
for (i = 0; i < 32; i++) {
for (j = 0; j < 8; j++) {
if (keys_return[i] & (1 << j)) {
int k;
KeyCode keycode = i * 8 + j;
KeySym *keysym = XGetKeyboardMapping(display, keycode, 1, &k);
if (keysym && *keysym)
printf("%s\n", XKeysymToString(*keysym));
}
}
}
return 0;
}
522 :
デフォルトの名無しさん:2008/05/18(日) 07:58:21
サンクスコ、あげ
>>521 これだとCPU負荷上がりすぎるんじゃね?
どちらかというとポインタの話なのでここでいいか迷ったのですが、質問です。
main(int argc, char *argv[]) 関数内から
makeWindow(int argc, cha *argv[]);のように作ったmakeWindow関数に
makeWindow(argc, argv); のように引数を渡し、
makeWindow関数内で
makeWindow{
Display *display;
Window window;
・・・ と書いていき、
XSetStandardProperties(display, window, "title", "icon",None, argv, argc, NULL);
のように記述した行でSegmentation faultを起こします。
何が原因なのでしょうか?
525 :
524:2008/05/31(土) 18:14:11
すいません、解決しました。
半日悩んでこんなくらだらないミスなんて・・・orz
XlibでCGの描画やってるんだけど
XImageより高速に描画する方法ってある?
比較的軽いシェーディングでもフレームレート落ちるんだが・・・。
XShmImage使うと多少良くなるのかな?
空で回してみりゃどっちがネックか分かるじゃん
528 :
526:2008/07/15(火) 00:49:19
>>527 プログラムの動作時間とか計ってみたら
XPutImage,XPutPixelがかなり時間がかかってる。
XImage使う以外で、何か良い方法ありますかね?
529 :
デフォルトの名無しさん:2008/07/15(火) 01:23:05
早いと思うライブラリはどういう処理やってるか調べてみたらa
昔がんばってた頃は、SHM付きのXImageが最速だった気がする。
XPutPixel使ってる時点で無駄が多い臭い
532 :
526:2008/07/15(火) 16:30:38
レスサンクス
>>529 一度Qt覗いてみたけど挫折したんだよな…。
もう少しがんばってみるかー
>>530 やっぱりmit-shmか。ちょっと調べて実装してみます。
>>531 XPutPixelが遅いってことは
Ximageのdataを直接いじればいいのかな?
これもちょっとやってみますー
>>532 Xlibは、一つの関数呼び出しごとに一回のリクエストが走るものと思っておくといい。
つまり、XPutPixel()なんか使った日には一体何回リクエストが走ることになるやら。
だからこそ、線分にしろ長方形にしろ、まとめて描画する(≒リクエストを送る)関数が用意されているわけで。
534 :
526:2008/07/17(木) 15:31:16
一応shmもdata直接いじりも実装できた。
最低限のプログラムでまわすと、実行時間の短縮が目に見えるんだけど
実際シェーディングとかを実装したプログラムに入れてみても、目に見える程違わない…
どこかおかしいのかなぁー
それと、XShmPutImageから投げられる完了イベントってどうやって拾うの?
>>534 多分君はXlibの基本がわかってないと思う
xlibって遅くない?
xlibつかう位なら、Java Appletで描画した方がまだ早いでしょ。
じゃばあぷれっと(笑)
Swing は xlib に基づいているわけだが
>>536 そのJavaAppletは誰が描画するんだ?
540 :
526:2008/07/22(火) 16:05:20
>>535 Xlibに関しては、描画できればいいや程度だったから
確かに基本はわかってないと思う…。
まず完了イベントなんてのが送られてくると思ってる時点で、Xlibがどういうものかすら分かってないと思う
542 :
526:2008/07/23(水) 00:52:41
シェーディングとやらが遅いのをXlibの所為にしたいだけだろ
>>541 XShmPutImageは完了イベントを発生させることができるんだけど…
545 :
デフォルトの名無しさん:2008/10/02(木) 20:14:30
時代はフレームバッファ
>>545 そうなるのかなと思って待ってたけど、その時代はこなかったので
諦めてXlibの勉強を最近始めたよ