1 :
デフォルトの名無しさん :
03/08/04 22:52
2 :
デフォルトの名無しさん :03/08/04 22:55
↓3取ったやつはバカ
/ /:::::::::::::::::::::::::`'::::::::::::::::::::\ \
\. /::::::::::::::::::::::::::::::iVi:::::::::::::::::::::::ヽ/
ヽ/::::::::::::::::::::::::::::::::| |::::::::::::::::::::::::::|
l:::::::::::::::::::::i:|:::::::|:| |/|'l:::::::: i:::::::::|、
|::::::::::ト:从|'l:|:_::::|'! / `ー '|:::::::/::ヽ
N::人::| , ─、` ,─ 、 |へ':::::::|
>>1 /:::::::r‐l 〈 i.::::| |.::::i 〉 | 〉〉::::::| おまいが、質問したいだけなんだろ?
|::::::::l〈ヽr 、 ̄  ̄ |ノ::::::::::ト、
|::::::::ヽ | | ' /::l::|:::::::::ト、\
|'i;:::::::/| | 匸) / Tー、::::;N| ├、
/ ̄/ | ト r‐、 イ〉 ヽ  ̄ | |
/ | | └ ⌒ヽ/ / | | /
/ ヽ | -'⌒ヽ〉 / | /
↑3取ったやつはバカ
そっそくだけど。 for(){ 〜(処理)〜 } と、処理をしているときにイベント(マウスクリック等)を拾いたいのです。 VBの「events」みたいな働きをするのってありますか? もしくは、関数かなにかを周期的にCALLさせながら、イベントを拾うみたいなことって できるでしょうか?
VBの「events」は知らないが、イベントを取得する関数は XNextEvent() だ。 キューから取り出さないなら XPeekEvent()。 関連する関数として、 XPending(), XEventsQueued() などがある。
キューに特定のイベントが存在するかどうかをチェックするには、 XIfEvent()、 XCheckIfEvent() もしくはXPeekIfEvent()を使用する。 XIfEvent()は目的のイベントがなければブロックする。 XCheckIfEvent()はノンブロッキング。 XPeekIfEvent()はイベントをキューから取り出さない。
ちなみに ConnectionNumber() でファイル記述子が取得できる。 これを select することで event を待つ方法もある。 (もちろん他のファイル記述子も一緒に使える)
XtだったらXtAppAddInput()というのもあるけど。
注意しなければいけないのは、Xはサーバ/クライアントのアプリになるため、 ソケットの向こう側にあるイベントとこちら側のキューにたまっているイベントがあることだ。 キューにあるイベントをすべて処理したからといって、もうイベントが残っていないとはいえない。
>11 Xtは死滅したと思ってた。 まだ現役なのかなぁ? EclipseのMotif版はXtか?
MotifはXtだ。
保守
保守
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
保守 死ね 山崎
保守
糞スレを保守するな。
FORTH は屑!
24 :
デフォルトの名無しさん :03/08/29 23:35
WMみたいにキーイベントをグラブするにはどうしたらいいんですか。
>24 そこまでわかっているのなら、ぐぐればすぐわかるのに。 int XGrabKeyboard(display, grab_window, owner_events, pointer_mode, keyboard_mode, time) Display *display; Window grab_window; Bool owner_events; int pointer_mode, keyboard_mode; Time time;
>24 ICCCMも読んどけよ。
27 :
デフォルトの名無しさん :03/08/30 00:56
XLIB? 昔そんなの鼻高々に一生懸命やってる奴いたよ! 今はみんな失業者だよ! そんな過去の遺物もういらねーよ!
Xlibなんか弄ろうとしても時間の無駄だよ gtkなりQtなり Xlib が 見 え な く な る ぐ ら い 囲った方がいい
XIM って Xlib 使ってるの?
>25 御親切にどうも。 英語は頭が理解する前に目が潰れるので聞いてしまいたい、 display = XOpenDisplay( NULL ); window = DefaultRootWindow( display ); XGrabKey( display, keycode, mode, window, True, GrabModeAsync, GrabModeAsync ); XSelectInput( display, window, KeyPressMask | KeyReleaseMask ); XNextEvent( display, &event ); なにが悪いのだ。 >27 >28 趣味やし、プログラマになる気はないし。
GtkとかQtとかあるのに、なんでいまさらXlibなのさ
Xlibで十分なのに、なんでわざわざGtkとかQtなのさ
>>32 私にとっては、Xlibで十分とは言えないが、あとアテナ・ウィジットが
あれば問題ない。Xtもこのスレで良いのか?
XtでTCPのacceptってどう扱えばよいのでしょうか? タイマーイベントでnonblockのacceptをポーリングしかない? listenしているところにconnectがきたというイベントを XtAddInput()することはできないのでしょうか?
>34 へ? XtAppAddInput でできるっしょ。 XtAddInputでもいいけどさ。
>35 間違えた。XtAppAddInputでいいんだけど、 filenoには何を指定すればいいんですか? socket fdで試してみたけどぜんぜん反応してくれなかったんですが・・・
>36 listen(s, backlog) してから XtAppAddInput()すればいいんだけど...
>37 やっぱりsocket,bind,listenしたsockfdをみればいいんですね・・・ なんか間違ってたかもしれないので、もう一度やってみまつ。 今試せる環境がないので・・・ ありがとうございました。
保守
socket?bind?listen? おいおい、ここはxlibのスレだぜ?GUIのスレだ。 グラフィカル・ユーザ・インタフェースのスレだ。 そういうのはネットワーク関係のスレで話しな。
GUI ねえ。
てす
43 :
デフォルトの名無しさん :03/09/09 14:45
Gtk+でアプリケーションの中に、Xlibで描画する既存のクラスを埋め込もうとしています。 Gtk+で画面やボタンを作ってから、window,displayをXlibのクラスに渡して Xlibのクラス側で表示したいのですが、うまくいきません。 windowは、(Window)window;でキャストしますが displayは、GTK→Xlibに渡す際にどのようにすればよいのでしょうか? ---------------------------------------------------------------- VIEW *view; int main(){ GtkWIdget *window; 〜 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); 〜 //初期設定 view->window = window; view->display = display; // <-? ・・・ //描画する部分 drawing_area = create_drawing_area(); gtk_box_pack_start(GTK_BOX(vbox), drawing_area, TRUE, TRUE, TRUE); gtk_widget_show(drawing_area); 〜 gtk_main(); return; ----------------------------------------------------------------
44 :
デフォルトの名無しさん :03/09/09 23:16
age
>>40 Xlibプログラミングでsocketは必要です。
46 :
デフォルトの名無しさん :03/09/10 20:55
ヽ(`д´)ノアゲゲゲ
いや、どうせクソスレだからおおいにテストしてくれ
50 :
デフォルトの名無しさん :03/09/12 22:51
Webカメラから画像を取り込んで表示したいんですけど、 Xで描画するときはピクセル値を指定しないといけませんよね? RGBデータを1ドットづつXAllocColorで変換したんですけど時間がかかりすぎます。 どうすればよいでしょうか?
う〜ん、わかんね。
>>52 すいません、よくわからないのですが
RGBデータから直接Ximageを作れるということですか?
今のところRGBからPixel値に変換したデータからXimageを作って
XPutImgeで出力しようと思っています。
Visual が TrueColor なら visual の rgb mask から Pixel 値を決めうちできるよ。 XAllocColor 要らない。
>>54 レスありがとうございます。
よくわからないので、もう少し勉強してみたいと思います
オーバーレイで表示できないのかな。
保守
保守
59 :
デフォルトの名無しさん :03/09/17 20:56
XPM画像の、縮小、拡大の仕方を教えてください。
>>59 それはおそらく Xlib とは関係ありませんが
netpbm でも参考にしたらどうでしょう。
保守の一手
保守の言葉攻め
保守の商事
hosyu
保守
保守
athena widget 使ってる人いますか?
>>68 使おうとして学習中。JavaやVBになれた軟弱な
脳みそにはなかなかツライ。
内輪で配付する X のアプリを作ろうと考えているのですが、各人の環境がまちまち なので(Gtk+ も入ってたり入ってなかったり)、スタティックリンクして使える ツールキットを探してたんだけど、日本語が通ってまともなライブラリって無いです ね。っつー事で Xaw + Xt で行こうかなと思ってます。 他になんか良いのがあったら教えて下さい。
他の人がGtk+を入れればいいやン。
いやだも〜ん。
>>71 まぁそれも一つの(唯一の?)手だけど、そこまでやるのはしんどいです。
浮上
保守
リストとかボタンとかを作る時って、それぞれに対してウィンドウを作っているのですか? 例えばメニューウィジェットを作る時は、メニューの項目分のウィンドウを作っているの でしょうか?
80 :
デフォルトの名無しさん :03/10/12 21:18
取り敢えず Xlib 駆使して widget set を作るチュートリアルが欲しい。 Xt 使わないで Xlib 直接触ってるから速いぜっていう toolkit は多いけど、大きすぎて 読むのが大変。タブビューとかスクロールリストとか、手ごろなサンプル無いかな。
81 :
デフォルトの名無しさん :03/10/13 16:57
>>78 そういう感じっぽいね。(w
なんか、Xlibで作られた、ボタンとかリストみると
いかにも手作りって感じがイカス。
X 上の GUI toolkit のソースコードを幾つか見てみましたが、ウィンドウ内ウィンドウは 作ってませんでした。やっぱオーバヘッドが大きいのかな。 考え方は面白いと思うんですけどね。シンプルだし。
83 :
デフォルトの名無しさん :03/10/16 21:22
ウインドウ内に子ウインドウもどき画面をつくって・・ 移動、縮小、拡大、閉じる・・・ を実装させてさらにマルチにするとなると中々大変。 途中であきらめました。
せめてX-toolkitぐらいは使ったら?
やだー
86 :
デフォルトの名無しさん :03/10/17 22:55
87 :
デフォルトの名無しさん :03/10/20 22:48
あぶねーあぶねー保守だ。
保守
嘘。FOX のサンプルアプリで xwininfo したらちゃんと子ウィンドウを作ってました。
Xaw を使ったアプリも当然ながら、子ウィンドウを作ってますね。Motif も Xt を使って
いるので同じですよね。Gtk+ や FLTK も調べてみます。
>>10 さんの通り、普通はpoll or select して X のイベントを取って来てるみたいですね。
手探りながら、簡単なウィジェットセットなら生 Xlib だけで作れそうな気がしてきました。
保守
hoho
92 :
デフォルトの名無しさん :03/11/05 21:13
hosyu
hoyu
for you
me too
当分Xlibは必要なくなった、今、コンソールかgd。
いじってると色々面白いけどなあ。>Xlib 環境用意するのが手間がかかるから あんまり触る人いないのかなあ。
gdって何だろう。
>>99 #include "gd.h"
gif とか、jpg png 作る奴ね。
hosyu
保守
保守
hosyu
ほしゅ
∩∩ ┯ ( ・x・)Ф 沈度417/727
∩∩ ┯ ( ・x・)Ф 沈度428/727
ほしゅる
hosyi
(・Д・)happy new year
>110 13時間半くらいフライングです
ε===(・Д・) happy new year ズザー
∩∩ ┯ ( ・x・)Ф 沈度464/727
hosyu
ほしゅ
ほしゅ
ほゆ
hoyu
ほしゅ
hosyu
ほしゅ
∩∩ ┯ ( ・x・)Ф 沈度582/727
質問でございます。 window maneger て本とにただの一クライアントなんでしょうか? マネージャとしてなんか手順を取らないでいいんでしょうか? 勝手に他のクライアントのイベントを盗み見るようなことでやってるんでしょうか?
ICCCM
125 :
デフォルトの名無しさん :04/04/03 02:28
ベクターグラフィックスライブラリの cairo
ttp://cairographics.org/ 基本 C みたいですが、Haskell, OCaml, Mono, Ruby, Python, etc. のバインディング有り。
ライセンスが MIT license なのが嬉しいな。
ベクターグラフィックスライブラリの cairo
ttp://cairographics.org/ 基本 C みたいですが、Haskell, OCaml, Mono, Ruby, Python, etc. のバインディング有り。
ライセンスが MIT license なのが嬉しいな。
蒸し返して申し訳ないけど教えてください。 XtAppAddInput()にわたすfdは socket()、bind()、listen()したfd渡せばいいんだよね。 PF_UNIXを指定した場合、 XtInputReadMaskを受けた後、すぐにXtInputExceptMaskを どうしても受けてしまう。。。 X11R5ではそんなことなかったのに。今はR6です。
貼付けておいてなんだが、
>>129 の作者は OpenGL/GLUT を知らんのかな。
図書館でXlibの本を発見したもんで,喜々としてXlibの勉強始めてみたけど, 今は必要ないのかなぁ?
132 :
デフォルトの名無しさん :04/10/22 00:41:18
質問です。 デスクトップの任意のウィンドウに表示している文字列を取得することって出来ますか? よくWindowsの英和辞書ソフトなんかで、マウスカーソルを適当なウィンドウの単語に もってくと、ポップアップで辞書の内容が表示されるソフトがありますが、あんな感じの ソフトを仕事でつくることになってしまいますた。。。 よろしくお願いします。
>>132 質問のレベルから見てお前には荷が重過ぎる仕事だキケー!
辞表の書き方なら教えてやってもいいキケー!
>>133 うるせぇんだよボケが
その口調がおもしろいとでも思ってるのか?
>>134 『面白いと思って言ってる』と考えてる時点でお前は頭が悪いキケー!
>>132 xtermなんかはコピペできるでない?
サーバーにも手を入れてExtensionを書けばサーバー側で描画してるのは取れる。 クライアント側でレンダリングしてるのまで含めると統一的な方法は無いと思う。 セレクションつかえばその辺の問題は無いけど一旦カーソルで選択する必要が あってマウスカーソルをあわせるだけってわけにはいかないはず。 ぶっちゃけ言ってることそのままやるのは相当大変。
XサーバーでWindowを生成して、図形書いたりXPutImage使ったりはできたん
ですが、文字を書くにはどうすればいいんでしょうか?
おそらく座標とバッファを渡せば実現できる関数が存在する(MFCの
pDC->textOut() みたいな)と思うんですが・・・。
>>1 にあるサイトのどのヘンにかいてあるとか、教えていただけないでしょうか。
>>138 XDrawString() とか XDrawText() っつーそのまんまなAPIがあります。
ある矩形領域に収まるように文字の大きさを調節してPixmapに文字を書き出すにはどうしたらよいのでしょうか?
141 :
デフォルトの名無しさん :05/01/24 13:40:02
top=XtAppInitialize(...); XtRealizeWidget(top); こんな感じでXtでウィンドウを表示したのですが、 ターミナル(プロンプト?)からウィンドウにフォーカスが移動しません マウスでウィンドウタイトルクリックしてもアクティブになりません 助けて
142 :
デフォルトの名無しさん :05/01/24 14:31:37
やっぱXlibだよね。 XlibならXさえ入ってればportableだし。
雑談してないで答えろよ
雑談してないで答えろよ
変な Window Manager 使ってるせいだとか。 twm や fvwm なら無問題 (ぉ Xt 使ってるなら、XWMHints の input はデフォルトで True になった筈だよねえ、確か?
いつも気になることがありまつ。 Defaultなんたらで返る値って、そのアプリ専用なのかWindow System 全体 で共用されてるものなのかどっちなんでそかね?
基本的にはアプリケーション固有だと仮定しておくのが 安全でしょ。 たとえば DefaultScreen() なんて、環境変数 $DISPLAY や コマンドラインの --display オプションの設定で変わるもの だし。 個別にみると、まあいろいろ
149 :
デフォルトの名無しさん :05/02/06 17:07:22
XCopyArea等で取り込んだイメージを画像データとして保存することはできないのでしょうか? 別に取り込んだ画像でなくても、ウインドウから直接でも結構です 検索したら xwdsaveと言うものをみつけました 動作は全くこれで構わないのですが、これはフォートランのものでした このような物はないでしょうか? すいませんが教えていただけると幸です よろしくおねがいします
わかるかたいませんかね? 一応UNIX板の方にも書きもまさせていただきます
UNIX板の方でレスがついたから、ここには返事書かなくて いいよな。
OS XのX11でtoolkitのお勉強はじめますた
そうですか
どうですか
ほのぼのとするレスですね
156 :
デフォルトの名無しさん :2005/03/29(火) 13:50:04
Xt使わないで、xlibのみで gtkなんかでいうところのテキストウィジェットみたいな ことがしたいんですけど、サンプルかなんかあったら教えてください。
ありがとうございます。
hoshu
160 :
デフォルトの名無しさん :2005/06/13(月) 21:24:54
ktermなどのターミナル上でマウスクリック等のイベントを使わずに自分(kterm)のウインドウIDを取得する方法ってあります。
環境変数 WINDOWID
WindowsみたいなLISTVIEWないですか。 ないですよね。 失礼しました。
163 :
デフォルトの名無しさん :2005/06/14(火) 21:29:51
160です。
>>161 ありがとうございます。
基本的には解決したのですがまだちょっと問題があります。
具体的には、kterm上からtelnetにて他のホストに入った場合にそのホストでの環境変数WINDOWIDがセットされていません。
いろいろ知らべてみたのですが、ウインドウタイトルから該当WINDOWIDを調べる方法しか見つかりませんでした。
この方法だと同一タイトルのウインドウが複数ある環境だとうまく動かないので、なにかほかの方法ありませんかねー。
>ウインドウが複数ある環境だとうまく動かないので いったいなんのためのIDだろう
165 :
デフォルトの名無しさん :2005/06/14(火) 23:16:34
>>164 説明不足でした。
同一タイトルのウインドウが複数あるとすべてのウインドウIDを拾ってしまい必要なIDが特定できない
です。
167 :
166 :2005/07/09(土) 11:05:09
あたた。誤爆した。orz
JPEGの画像を開いて表示することはできますか? 方法を教えてください。お願いします。
>>168 できる。
gdk-pixbuf ってライブラリを使うのが定番かな。
質問させて頂きます Xlibでウインドウを作りそこに文字を"XmbDrawImageString"で表示しているのですが マウスで文字をドラッグしたりしても選択されません(すいませんどういえばいいのか分かりません (kterm等でドラッグしたら文字が反転しバッファに貯められマウスの中ボタンでペーストされる動作 (が行いたいのです どうすれば選択できるようになるのでしょうか?
マウス入力を監視して、ドラッグされたら文字を反転したり、中ボタンが押されたら primary selection から文字列を ペーストしたりするためのプログラムを書けば、Xlib のレベルでもできる… が、とっても苦労するので、そういうことをしてくれるライブラリ(toolkit のたぐい) を使うのが普通。 今時のはやりは、たぶん gtk かな。 Qt でもいいが、ライセンスが GPL なので、商用ソフトには使いづらい。 古きを尋ねるなら Motif (Lesstif) あたり。 たとえば、gtk なら下記のプログラムで、だいたいやりたいことはできる。 #include <gtk/gtk.h> int main(int argc, char **argv) { GtkWidget *top, *text; gtk_set_locale(); gtk_init(&argc, &argv); top = gtk_window_new(GTK_WINDOW_TOPLEVEL); text = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(text), 1); gtk_container_add(GTK_CONTAINER(top), text); gtk_widget_show(text); gtk_widget_show(top); gtk_main(); return (0); } コンパイルは gcc `gtk-config --cflags` hoge.c.c `gtk-config --libs` のようにする。
172 :
170 :2005/10/01(土) 01:41:16
>>171 ありがとうございます
gtkやQt, Motifも入っていないので、すいませんができればXlibで行いたいです
XtもC++ができないため使えません
KtermもXlibで行っていると思っているのですがこれは違うのでしょうか?
> gtkやQt, Motifも入っていないので、 ネットに繋がってれば、ダウンロードしてインストールするだけ なんだから、インストールすれば? 一から自分で書くと、週単位、 下手すると月単位の時間がかかるよ。 > XtもC++ができないため使えません Xt 使うのに C++ は要らない。Cだけで十分。 gtk も Motif も Cで OK > KtermもXlibで行っていると思っているのですが kterm は Xt 使ってる。 でも日本語copy&pasteまわりはXlibも使ってゴリゴリ書いてるね。 結構大変だよ。charproc.c だけで 5000行を越えている。
174 :
170 :2005/10/01(土) 02:30:15
>>173 わざわざありがとうございます
> ネットに繋がってれば、ダウンロードしてインストールするだけ
インストールするのは簡単なんですけど、インストールできないのではなくインストールしていないのです
このマシンのスペックは
CPU: Pentium MMX 120MHz @ 60x1 60MHz
Mem: 16MB EDO
HDD: 340MB
なため、なかなか現実的ではありません
Memory 16MB は確かにキツいな。 だが、上のgtkのサンプルプログラムの常駐メモリは2.7MB程度 だったから(NetBSD/i386で測定)、全く使えないほど遅くはない だろう。gtk1 のバイナリパッケージなら、展開してもディスク 使用量は6MBいかないようだし。 Motif も比べてみたが、gtk よりむしろメモリを必要とするようだ。 どうしてもXlibでのやり方を知りたかったら、gtkのソースを読んでみたら?
176 :
デフォルトの名無しさん :2005/10/01(土) 03:23:38
>>175 16MBしかないのに2.7MBはつらいんじゃ?
実際にはファイル開いて読んだりイベント待ったりいろいろするから
テキスト表示させるにも5MB弱程度食うと思う
そうなると1/3食うことになるからな
X入れて日本語入力できる環境だと10MB弱程度はメモリ消費してると思うし
大惨事だと思う
一応質問ならageとけ
確かに小さくはないんだが、kterm あたりでも 1.4MB くうからなあ。 今時のツールキット使って 2.7MB はまあ仕方ないと思うよ。 メモリの足りないマシンだと、2.7MB のうちかなりの部分がpage outされるだろうから、アクティブに必要とする部分はたぶんもっと 小さいと思うし。 とりあえずgtk1を試してみて、重くて耐えられなかったら考え直すっ てのがいいんじゃない?
>>177 関係ないけどメニュー削ればメモリ半分にならない?
>>171 のこと? 見れば分かるけど、メニューは最初からないよ。
あるのは gtk_text のウィンドウだけ。
180 :
178 :2005/10/01(土) 03:45:30
違う ktermのこと
ああなるほど。 よく見るとメモリ1MBくらいしかくってないktermもいるから、 たぶんそれくらいにはなるね。
> Qt でもいいが、ライセンスが GPL なので、商用ソフトには使いづらい。 いつの話だよ
184 :
デフォルトの名無しさん :2005/10/02(日) 11:50:33
>>183 「いつの話だよ」は、「いまどきならGPLな商用ソフトもありだろう」ってことじゃないのかな。
「GPLな商用ソフト」が通用するのは限られた分野だとおもうけど。
ソースコード公開前提で作る企業と、そうじゃない企業と、 どちらが多いと思う? 公開せずに作るって方が圧倒的に 多数じゃないかなあ? だから使えないとは書かずに使いづらいって書いたわけで。 公開前提で作る企業がゼロだというつもりはない。実際に ゼロではないしね。
rxvtは軽いで有名
つーか商用なら金払って使えばいいじゃん。
今まではGlibで全てやって来たんですけど なにか覚えるとするとGtkがいいんですかね? 自分的にはGtkのアプリを使うときよく落ちるっていう感じがするんですけど OpenMotifとかのほうがいいですかね? でもそれだと入れてない人もいるし・・・ Motif ってでもGtkとかに比べるとかなり軽量ですよね?
> Motif ってでもGtkとかに比べるとかなり軽量ですよね?
>>175 で比べた内容に限ると、gtk1 は Motif と同じくらいか、
若干Motif よりも軽量だった。従って、その推論とは逆の結果。
やってみるまでは、俺も Motif の方が軽いんじゃないかと思って
たんだけどね。
なお、gtk2 は gtk1 よりも 6割くらい使用メモリが増えてたので、
Motif よりも重かった。
俺はMotifを押すけどな お前らは何がいいの?
191 :
デフォルトの名無しさん :2005/11/06(日) 16:23:04
貧乏人向けはxlib,富裕層にはgtk ライセンス払ってまで純正motif使う価値はあんまりない。
今じゃ openmotif がタダで使えますがなにか?
193 :
linux初心者 :2005/11/20(日) 23:28:57
debian 3.1 r0a (Sarge) i386を使っています。 xlibを用いたCについて勉強中です。 Xlibの標準ヘッダーファイルを入手して所定の場所に置きたいのですが、 どのパッケージをインストールすればいいのでしょうか。 共有ライブラリはあるのですが、ヘッダーファイルがどこにも見当たりません。 一番最初にdebianをインストールした時には、ヘッダーファイルはあったのですが、 再インストールした際、ヘッダーファイルがインストールされなかったようなのです。 どうか、ヒントだけでもよろしくお願いします。
Linux板のDebian関係スレで聞いたほうが良いと思うぞ。
195 :
193 :2005/11/21(月) 22:57:29
>>194 分かりました。
Linux板のほうで聞くことにします。
アドバイスありがとうございます。
全く関係ないけど 01が全角だし左右のバーも長音記号「ー」になってるのが すごく気になる
01が全角なのは、全角でも数字なので間違いではないし許容できるけど 「ー」はどう見ても間違いなので気になる。
XLIBでマウスホイールのイベントはどうやって受けるの?
ボタンの4/5できます。xorg.confでの設定に因りますが。
ホシュ
202 :
201 :2006/04/10(月) 22:43:14
ImUtil.c を読みました。使い方を間違えなければ、自分で XImage を作っても 問題無さそうですね。
203 :
デフォルトの名無しさん :2006/05/11(木) 13:37:07
イベント処理でウィンドウ毎に関連付いたデータを取得したいです。 WindowsでいうとSetWindowLong() / GetWindowLong()でthisポインタを設定/取得する感じです。 XLibではどうすればいいでしょうか? struct MyWindow { Window window; int extraData1; // ウィンドウに関連付けたい各種データ int extraData2; }; static const int WNDCNT = 16; int main(int argc, char** argv) { Display* display = XOpenDisplay("localhost:0.0"); MyWindow wnds[WNDCNT]; for (int i = 0; i < WNDCNT; ++i) { wnds[i].window = XCreateSimpleWindow(...); wnds[i].extraData1 = rand(); wnds[i].extraData2 = rand(); XMapWindow(display, wnds[i]); XSelectInput(display, window, KeyPressMask | KeyReleaseMask etc); // Windowsならここで SetWindowLong(wnds[i].window, GWL_USERDATA, &(wnds[i])) して MyWindowへのポインタを登録できる } while (1) { XEvent event; XNextEvent(display, &event); switch (event.type) { case KeyPress: // Windowsならここで GetWindowLong(event.window, GWL_USERDATA) して MyWindowへのポインタを取得できる break; case KeyRelease: // Windowsならここで GetWindowLong(event.window, GWL_USERDATA) して MyWindowへのポインタを取得できる break; } } }
>>203 Windowは単なるIDだから(ファイルハンドルみたいなもん)、
こんくらいしかないんじゃね?
struct MyWindow *
Window2MyWindow(Window w)
{
int i;
for (i=0;i<WNDCNT;i++)
if (wnds[i].window == w)
return &wnds[i];
return (struct MyWindow *)NULL;
}
XGetWindowProperty は?
>>206 そうか?プロパティ使った設計は至極真っ当だと思うけど。
>>207 XGetWindowPropertyて毎回パケット投げてサーバに問い合わせるんだぞ?
回線によっちゃ、キーの反応がすごく悪いアプリケーションになる気がするけどなぁ。
>>207 プロセス間でやりとりするようなデータを置くならともかく
プロセス内で閉じてるんであれば
ウィンドウIDとそれに関連するデータはひとつのオブジェクトと
するのが「まっとう」なのでは?
つーか、でなくたって遅いプロトコルなんだからできるだけ負荷掛けないように作るのが当然だろ。
Xt使ってるならXtAddCallback()とか。
今Xlibだけで作ってるやつって珍しいのか?
>>212 好き好んで生Xlib使ってる人は少ないんじゃないですかねえ。
変態……じゃない、大変だと思う。
215 :
212 :2006/05/16(火) 03:09:01
ごめん。 俺XLib以外使った事ねぇーや 確かに始めに作るのは大変だけど昔に作った部分の使いまわし使いまわしで マウスとかでのコピーでも全然大変じゃないよ なんでそれにこだわるか聞かれてないけど説明すると 自分の環境にはGtkとかQt, Motifは邪魔だから入れてないし XをインストールしたときにKtermとかはすんなり入るのに、例えばGtk使うアプリがあったら それまでコンパイルがするのがまんどくさい。 自分はほとんどKtermしか使わないからっていうのもあるけど。 だから、自分もXlibとかしか使わないのを作ってその環境でも普通に使えるのを作ってる 実際作ってみるとそういう環境の人がかなりいるのが分かってうれしいよ
>>215 自分もそうおもいます。
一度 Qt をかじったこともありますが、あれよあれよと言う間に バージョンが
あがって、以前に作ったものがコンパイルできなくなったので嫌になりました。
217 :
207 :2006/05/17(水) 16:17:55
>>208 PropertyNotifyイベントをハンドルして値を再取得する作りを想定しているが、
そりゃ、あまりにも頻繁に更新されるデータにプロパティを使うのは適さない
だろう。
Motifは安定しているよ〜w
出力画面を画像データとして保存する方法ありますか?
>>219 つ[xwd]
つ[xv]
つ[imageMagick]
222 :
デフォルトの名無しさん :2006/06/04(日) 01:49:14
ウインドウの配置座標を確実に決め打ちしたいんですけど そういうことって出来ないですかね? XCreateSimpleWindowだとtwmで、マウスで位置を決めるか適当に配置かしか選べません。
>>216 を読んで思ったのですが、
XFree86やX.orgは、バージョンアップしても動くのでしょうか?
>>222 WindowManagerによらず場所を決めたいのなら、
WindowManagerの支援を全て切り捨ててWindowを作るしか。
その代わり、枠もつかなきゃシステムメニューもタイトルバーもつかないが。
それがいやだったら、表示後移動するって方法で逃げるくらいかな。
>>222 XSetStandardPropertiesのhintに座標つっこんでおく。
WindowManagerにはhintを無視してWindowを配置する権限があります。
228 :
222 :2006/06/04(日) 05:23:38
>>224 , 225, 227
ありがとうございます。
一応確かめたところ、twmではhintsにいれたところ固定でウインドウが出力されました。
XSetStandardPropertiesじたい知りませんでしたし、調べているうちにいろいろな物があることを知り
自分ももっといろいろと知れたらと思うのですが、皆さんはどのようにXlibを勉強したのでしょうか?
229 :
222 :2006/06/04(日) 06:02:01
ああ・・・ twmではできましたけど、BlackBoxじゃできないようになりました・・。 BlackBoxはXCreateSimpleWindowには従うし・・。 orz 他にはないですかね・・
>>1-230 / || :ヽ
┌|(⌒ヽ :|| ..:⌒: |┐ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|::|::ヽ.__:):||(___ノ ::|::| │
|:|: .. :|| .. |:| │
:|: .. || ..|| < 日本語でおk
:\ [_ ̄] /::| │
:: |\|_|_|_|_/:::| \________
__| | / / :|___
背景色をイベントが起きたら変えたいのですが、 そういう関数名はなんですか?
>>229 あれ、そんじゃ blackbox て一般的な X11 のアプリで -geometry で座標指定しても効かないの?
それとも XSetWMHints でもっと細かく指定しなきゃならんのかな。initial_stateあたりとか。
>>228 ソース読むくらいかなぁ。X11だとマニュアルから当たるよりは
同じようなことを実現してるプログラムのソース見たほうが早いことはあるね。
233 :
231 :2006/06/04(日) 18:42:57
ないですかね・・。 クリックされたら色を変えたいんですけど XSetBackgroundを変えて再マップしても変わりません どなたかサンプル的なコードをお願いします
>>233 XLib直に使ってるの?
XSetBackground()はGCの関数だからGCの基本的な使い方を知る必要があるわけだけど大丈夫?
さもなくばXSetWindowBackground()かなぁ。こっちは使ったことないからよく判らんが。
#Toolkitを使ってたらToolkitが色変えちゃう気もするしねぇ……
XSetBackgroundはデフォルト背景色を変えるだけで描画はしてくれんだろ。 XClearWindowあたり(かな)で、ちゃんと描画しなきゃダメ。
画像のビュアーを作りたいと思うんですけど お勧めの画像変換ライブラリとかってありますか? PerlのImageMagickで変換すると遅くて遅くて・・。
>>237 >PerlのImageMagickで変換すると遅くて遅くて
PerlにはImageMagickはありません。
ImageMagickには画像変換関数もあれば画像変換ツールもありますが、どちらも処理速度は(ほぼ)同じです。
#当然と言えば当然。
ついでに言えば、画像変換の処理速度の問題はXlibにはなんら関係がありません。
#まぁ、Xlib自体が遅いがな。
239 :
デフォルトの名無しさん :2006/06/25(日) 00:18:08
>>169 gdk-pixbufってGtk+じゃないのか?
指定した座標1Pixelに色を置くのはどうするのでしょうか?
>>240 PutPixel()
ただし、かなり遅いので必要なら別途別の手段を講じること。
#演算が遅いのではなくプロトコルそのものが遅いので、XImageを使うなりなんなり。
PutPixelってなんだ?
XDrawPoint()だろ。 よしんばXPutPixel()だったとしたらXImageへの描画だし。
今一盛り上がらないね
Xlibを使ってjpegイメージを表示するプログラムをかいていだだけないでしょうか? そういうプログラムをつくろうと思っていたのですが、なかなかうまくいきません。 XDrawPointだと表示する色をしていできないようなのですが、座標と色を指定して置くことはできないんでしょうか?
>>245 できます。GCについて勉強してください。
247 :
207 :2006/07/14(金) 13:18:16
libjpegを使ってXDrawPointでGCのXSetForegroundの色を変えながらループで描画したのですが 無茶苦茶時間がかかります。 VGAサイズのjpegファイルを表示するのに30秒位かかります。 他に方法はありますか?
>>248 XDrawPoint()で一点ずつ描くのを諦める。
>>248 そりゃ1ピクセル毎に描画命令送ってんだから遅いだろうよ。
そういうのは普通ローカルにXImage作ってそこに直接描いて最後にXサーバに送る。
XImageむずかしす…
XMapWindow, XMapRaisedの違いって何? スタックを上げるの意味がわからない
>>252 XMapWindowはウィンドウを表示状態にする。(非表示状態にするにはXUnmapWindow)
XRaiseWindowは重なって裏に回っているウィンドウを手前に表示する。
スタックてのはとりあえず単なるウィンドウの重なり具合と思っとけばよろしい。
おまえ関係ない話してるぞ XMapWindowとXMapRaisedだぞ だぞ
あ、ごめんXMapRaisedか。XRaiseWindowと読み違えてた。 XMapRaised はほぼ XMapWindow + XRaiseWindow かな。
256 :
デフォルトの名無しさん :2006/07/15(土) 21:21:21
無理 XImage全く意味がわからない
なら諦めて、出来合いの適当なライブラリでも使えば?
ライブラリとか検索してもなかったんですけど しってますか?
どうにかXImage使ってできました‥ ほとんど理解してないですけど‥‥ でも実行してみると表示は一瞬ですけど、表示するまでに 30秒ぐらいまたないといけないんで同じです… こんなものなのですかね? それとも私の書き方が間違ってるとか‥
わからないならgtkでもqtでもmotifでもいいから使っとけ。 Xlibは特に理由もなく直接叩くレイヤーじゃない。
GtkとかQtをインストールしてないです… なんで作ってるかっていうと、Pentium 120MHzのマシンがあるんですけど それにもGtkとかQt, Motif等のライブラリは一切インストールしてないんで (コンパイルしようにもどれだけ時間がかかるかわからない… それでも使えるビュアーがあれば便利だと思って作ってます。 たしかにXV使えば見れることは見れるんですけど、操作が今一なんで‥
俺もそいったライブラリは入れてないからXV使ってる。 協力したいけどプログラミングの知識がない・・・。 とりあえず期待しとく。
xvあるならソース見ればいいじゃない。
ソース読んでも全くわからないです…
わかることはgrepかけてみると、XPutPixelを使ってないということくらいです…
どうやってるのか調べようと思っても、チンプンカンプンです。
プログラミングはほとんどやらないので、無謀だったのかな…。
ちなみに、私が書いたコードはこれです。
何か改善の余地があるところでもあれば教えていただけるとうれしいです。
http://wopr.iobb.net/file/main.c
毎ピクセルごとにXAllocNamedColor呼んでりゃ、そりゃ遅いだろ。 XAllocNamedColorはサーバに聞きにいく。 visualからrgbのmaskとshiftもってきて、自分でrgbからpixel値作って XImageのバッファ直接弄るのがいちばん速いけど、各種depthとか対応しなきゃならないし そこまでやる気なさそうなソースだから、せめてXAllocNamedColorで問い合わせて把握した 色のピクセル値はキャッシュして使い回せ。普通の画像ならかなりマシな速度になると思うので。
266 :
264 :2006/07/16(日) 04:07:24
>>265 ありがとうございます。
>XAllocNamedColorはサーバに聞きにいく。
そういう関係のことがまったくわかってないです…
>そこまでやる気なさそうなソースだから、
…。 やる気がないというか、できないです…。説明していただいてることすら理解ができていません。
申し訳ないです。
>色のピクセル値はキャッシュして使い回せ。普通の画像ならかなりマシな速度になると思うので。
http://wopr.iobb.net/file/main2.c こういうことですかね? 一応やってみたのですけど、30秒程度と表示までの時間はかわりませんでした。
ちなみにstrcmp, strcpyが入ってるので、それを省いてできるか今やってみています。
質問ばかりでもうしわけありません。
267 :
264 :2006/07/16(日) 04:22:50
すいません。
>>266 は完璧なミスをしていました。
もう少し落ち着いて考えてみてから、かきこませてもらいます。
本当にすいませんでした。
おー,昔の自分がおる.俺も昔全く同じことやった.昔の俺にちょっと手助け. 264 の環境を予想するとたぶん以下のコードで動く.ただし試してない.間違ってたらすまん. ポイントは 265 が言うように,visual クラスが TrueColor のように読み出し専用の場合は, XVisualInfo 構造体の red_mask,red_shift やらを使って直接 pixel 値を計算できるということ. とりあえず,これを頭に入れて xv のソース読め.そうすりゃわかるだろ. unsigned long set_color(unsigned char r, unsigned char g, unsigned char b) { return ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3); // return (r << 16) | (g << 8) | b;// もし depth = 24 ならこっち }
わかるとはおもえんが
270 :
264 :2006/07/16(日) 15:29:47
>>268 ありがとうございます。 私にはまだほとんど理解できないですが、どうにかして"grep -R red_mask ./*"で
出てきたところが読めるようになれるようにがんばります。
ちなみに、
>>265 さんの"キャッシュして使いまわせ"と言うのにたいして
私なりに考えて作ってみました。 前にXAllocNamedColorした値と同じなら、前のXAllocNamedColorの値を
使うっていう単純なものですけど…。 しかも、前回の一回分だけ…
http://wopr.iobb.net/file/main3.c これでVGAサイズのスクリーンショットを表示するのに10秒強位になりました。
数字的にいえば3倍でかなり早くなったんですけど、VGAの同じ色が連続で続くようなイメージなんで
XGAサイズの風景写真とかだと、1分30秒かかるのでまだまだ実用にはほどとおいです…
>>269 もうしわけないです…
ソース読んだことがないやつにXVのソースがどこまで読めるか
>>270 のソースみるともっと他人の良質なソース読むべき
ximg->data[n] = c;のような形式で書き直せば手元で試した限り数千倍は早かった。
XGetRGBColormapsでフォーマット調べて頑張れ。
#数日かけてでもツールキットコンパイルしたほうが手間は少ないと思うが
その試したソースを見せてあげればいいのに
手抜きな。後はフォーマット調べて頑張れ。 ximg = XCreateImage( display, visual, 24, ZPixmap, 0, 0, hint.width, hint.height, pad, 0); ximg->data = malloc( ximg->bytes_per_line * hint.height); for( tmp[1] = 0; tmp[1] < hint.height; tmp[1]++ ){ for( tmp[2] = 0; tmp[2] < hint.width; tmp[2]++){ int idx = ximg->bytes_per_line * tmp[1] + tmp[2] * 4; ximg->data[idx + 0] = jpeg_buf[tmp[1]][tmp[2] * 3 + 2]; ximg->data[idx + 1] = jpeg_buf[tmp[1]][tmp[2] * 3 + 1]; ximg->data[idx + 2] = jpeg_buf[tmp[1]][tmp[2] * 3 + 0 ]; } }
ところでお前等はわざわざなんでXLib使ってんの?
小物作るのには十分だから。 GUI作りこむ必要があるときはQtやJava使ってる。
277 :
264 :2006/07/17(月) 03:42:17
>>271 全く読めなかったです…。
>>274 ありがとうございます。
がんばって調べてみたのですが、わからないです…
なんとなく一瞬でイメージは表示できるようになったんですけど、なんとなく表示されてるって感じで色が滅茶苦茶です。
多分教えていただいたカラーマップが関係あると思うのですが、ちょっとわたしでは理解ができませんでした。
もしよろしければ、これをちゃんと表示できるようにしていただけると本当に助かります。
http://wopr.iobb.net/file/misc.c すいませんがもしよろしければお願い致します。
>>277 だからvisual->{red,green,blue}_mask を見て
自分でshiftさせてpixel値を作らなきゃだめだって。
RGBの配置なんてディスプレイ毎に違うんだから
人の環境そのままで動くわけない。
とうとう丸投げか
red_mult red_max base_pixelでぐぐればほぼ答えそのままじゃないか? それでも分からないならツールキット使うかsf.jpででも協力者募ってくれ。 そのサイトのハッカー関連コラムなんなんだ。
281 :
264 :2006/07/18(火) 07:17:30
>>278 ありがとうございます。
ずっと調べてるのですが全く…。
>人の環境そのままで動くわけない。
これってその方法でプログラムをかいたら、他の人は自分の環境にコードを書き直さないと
使えないってことになるんですかね?
できれば汎用的なものがいいんですけど。
>>279 自分でいうのもなんですが、質問ばかりしてスレを消費してしまったりしているので
これ以上続けるのも迷惑かとおもい、できればやっていただければと思いました。
すいません。
>>280 調べているのですが…。なかなか自分がわかるところまではいけません。
>それでも分からないならツールキット使うかsf.jpででも協力者募ってくれ。
やはりろくにソースも読めない人間が、プログラムを書こうっていうのが無謀だったのですかね…。
自分ではできればうれしいのですが、あまり迷惑をお掛けするのもあれなんで
もうしばらくやってみて、できなければあきらめようと思います。 御迷惑をお掛けしてすいませんでした。
>そのサイトのハッカー関連コラムなんなんだ。
そのサイトのアップローダを使っていたのですが、動かなかったので連絡してみたら上げるファイルあったら
メールで送ってくれたら置いてくれるっていうことだったので、あげてもらいました。
そのサイトはわたしとは関係ありません。
xvがダメならxpmlib辺りではどう? XpmReadFileToPixmap()とかXpmReadFileToImage()とかあるよ。 Pixmapができちゃえば、後は XSetTile(dpy, gc, pixmap); XSetFillStyle(dpy, gc, FillTiled); XFillRectangle(dpy, xid, gc, 0, 0, width, height); でいける気もするが。
>>282 それは新鮮なテクニックだな。脊髄反射で XCopyArea() してる俺は凡人か…(´・ω・`)。
285 :
264 :2006/07/20(木) 00:34:42
>>282 ありがとうございます。
今現在そのライブラリのソースがないので、ダウンロードして調べてみようと思います。
内容がちょっとわからないのですが、アマゾンでX-window実用グラフィック入門という本を注文してみました。
どうにか自分でもできるようにがんばってみたいと思います。
>>283 調べてみると、いろいろな画像形式に対応している上に変形なども行ってくれるみたいですね。
ありがとうございます、取り敢えずはそれで作ってみたいと思います。
286 :
264 :2006/07/20(木) 00:56:09
どんなことができるかだけ調べてた・・・。 gtkとperlとかいろいろと要求されます・・・。
287 :
264 :2006/07/21(金) 22:08:28
X-window実用グラフィック入門 全然役に立たない・・。
ホントに X-Window なんて表記だとは思わなかった。酷ぇな…
kwsk ぐぐるとその本を参考資料にしている大学があるようなんだが。
現状で手に入るX11の本って相当少ないからなぁ。 誰かまともというかチュートリアル以上のものを書いて欲しいが 売れないんだろうな。
銀色の本って絶版? X11R4あたりだったが、Xlib独自の部分だけならあれで十分だったなあ。
XGrabKey()で取ってきたイベント情報から、 そのイベントが本来送られるはずだったwindowを得ることはできますか?
>>292 event->subwindow がそうでない?
xwininfoあたりがやってるのでソース見て真似すれ。
295 :
デフォルトの名無しさん :2006/11/02(木) 01:01:28
XWindow練習帳age
>>295 『X Windowで遊ぶ本』と内容一緒っぽいけど、何か違うの?
著者も出版社も一緒だけど…
だね。 その本買って読んだけど、目次じゃやってること同じだと思う。 感想としては、読んでも意味無いね。 ほとんどなんの説明もしてないし、コードの大半はXlib関係ない
299 :
デフォルトの名無しさん :2007/01/14(日) 21:12:04
Xlibに関する解説サイトをいくつか見てみたんだけど、 ウインドウ表示やイベントループの基本的なところは Win32APIに相当するものがあって大体理解できたました。 でもWin32APIにあるメニュー関連処理に対応するものが 見当たらない気がします。無いのでしょうか?
>>299 その辺りはXlibより上流のToolkitの仕事かな。
でもどうせだから、更に上流のMotifなどのWidgetを使う方がいいと思うし、
それならいっそGnomeで作ってしまえ、とも思う。
まぁあれだ、Xlibには最低限しかないと思っておけば間違いない。
もうすぐXCBがくるけど、そういう話題はないの?
>>300 Win32APIなおれはメニューは最低限だと思ってた…。
メニューのリソースなんかは面倒見てくれて、
イベントの取得は自分でループ回したいような
レイヤー(というのかな?)はどんなものが
あるでしょうか?
要はWin32API(非MFC)から同じような構造を保ったまま
Xwindow上に移行するオススメが有れば、と。
いやだから、>300にお勧めが書いてあると思うのだが。 Xlibだとボタンさえないからな。
>>303 上流のって、イベントループ部分がフレームワークになってて
隠蔽されてないですか?
ボタンは要らないんです。メニューだけ欲しい…
>>304 ここはXlibスレだ。それ以外のライブラリはスレ違いだ。
寧ろあんたの環境に合わせて犬板にでも海栗板にでも逝っちまえ。
つーか、少しXの基礎を勉強して来い。
>>301 そんなのあったんだね。知らんかった。
しかも結構前から作ってるみたいね。
308 :
デフォルトの名無しさん :2007/01/29(月) 16:56:23
XSelectInput(disp, win, ExposureMask | KeyPressMask | ResizeRedirectMask); ResizeRedirectMaskを指定すると、再描画がうまくいかないのですが、 何が原因として考えられるでしょうか? windowを小くするぶんにはちゃんと再描画されるのですが、 windowを大きくするとちゃんと再描画してくれません。 ResizeRedirectMaskを外すとちゃんと再描画してくれます。 何かわかるかたいたら教えてください。お願いします。
リダイレクトしたイベントはどう扱ってるのか? そもそもResizeRedirectMaskの意味わかってて指定してるのか?
310 :
308 :2007/01/30(火) 11:35:18
void redraw() { } 〜〜〜〜〜 略 event_mask = ResizeRedirectMask | ExposureMask; //event_mask = StructureNotifyMask | ExposureMask; XSelectInput(display, window, event_mask); 〜〜〜〜〜 略 while (1) { XNextEvent(display, &event); switch (event.type) { case ResizeRequest: win_width = event.xresizerequest.width; win_height = event.xresizerequest.height; printf("widht: %d height %d\n", win_width, win_height); redraw(display, window, gc, event); break; // case ConfigureNotify: // win_width = event.xconfigure.width; // win_height = event.xconfigure.height; // printf("widht: %d height %d\n", win_width, win_height); // redraw(display, window, gc, event); // break; case Expose: if (event.xexpose.count == 0) { redraw(display, window, gc, event); } break; } }
311 :
308 :2007/01/30(火) 11:37:08
レスありがとうございます。 簡単に書くとこんな感じなんですが、 これで、ResizeRedirectMask の行とcase ResizeRequest:のとこを コメントにして、今現在コメントになっているとこを外すと思いどおり に動作するのですが、StructureNotifyMask だとwindowの移動とかでも イベントがきてしまい効率が悪いなぁと思い、本当はwindowのリサイズだけ を拾いたいのですが、 これだと例えば、100x100のwindowを作ったとして そうすると、最初に作った100x100の部分に関しては再描画されるのですが windowのサイズを大きくした場合広がった部分が再描画がされません。 ConfigureNotifyイベントでやると問題ないのですが、、、
312 :
308 :2007/01/30(火) 16:57:27
やはりResizeRedirectMaskの意味を勘違いしてたか このイベントマスクはリサイズの要求を捕捉するためのもの ウィンドウサイズの変更を通知してもらうためのものじゃない
>やはりResizeRedirectMaskの意味を勘違いしてたか ですね。 なんともややこしい。man見ても全然理解できてなかった。 まぁ1つ勉強になりましたわ。
XLibの描画命令とかの使い方はわかるんですが、ボタンとかエディットとかを呼び出す方法がわかりません VineLinuxでGNOMEなんですが教えてください もしくはどういう資料にのってるか教えてください
>>315 XLibにボタンなんて贅沢なもんはありません。
大人しくGnomeを使ってください。
レスありがとうございます GNOMEのたたき方を調べてみます
XForms っていつの間にか LGPL になってたんだね。 以前は非商用に限りフリーだったんだけど。
319 :
デフォルトの名無しさん :2007/04/24(火) 19:48:57
久しぶりに来たら、スレのレベルがだいぶ下がってないか?
最初っから下がりっぱなしですが。
322 :
デフォルトの名無しさん :2007/04/27(金) 19:35:19
>>321 メニューやボタンはどうやって出すんですか?
>>322 Xlibのみを使うのであれば、全部自前で用意してください。
Xlibの質問なんて低レベルにきまっとるだろ
質問させてください。 このスレを一通りみていたのですが、上の方にGtkとかQtだとバージョンアップすると、それにあわせてプログラムを作り直さないといけない ということなのですが、Xlibを使ったものだと作り直さずにそのままXのバージョンがあがっても使えるのでしょうか?
ヒント:下位互換
>>326 Gtkのことは分かりまへん。
Qt 2から付き合ってきましたが、2→3はちょっとの修正で済みました。
3→4は、下位互換クラスを使っても、かなり修正が要りました。
でも、ほとんど同じソースでWindowsでもLinuxでもMacでも動いたんで
Qtを使って良かったと思ってます。
ナマのXlibで組んでいたときは、メニューやボタンから作らんといけな
かったので大変でした。
もっとも、ソース非公開のプログラムを作ろうとしたらQt商用版は高い
ライセンスが必要ですので、目的に応じて検討してください。
329 :
デフォルトの名無しさん :2007/05/11(金) 23:23:39
こちらから誘導されて参りました。
http://pc11.2ch.net/test/read.cgi/tech/1178432985/42n- # 以下上記レスと同文
環境:Linux gcc
X上CUIで、マッピングが施される前のキーコード(物理的キーコード)をキーが押下された際に取得したいです。
スキャンコードまで低レベルでなくてよく、xmodmap -pk や xev で調べられる KeyCode に相当するものが丁度いいのですが、
showkey のソースを参考にした方法では /dev/console を Xサーバが握ってしまっていて不可能、
xev のソースの方法ではXウィンドウを生成せねばならず、CUI上で実装する方法が見つかりません…。
ncurses の keybound なども試してみましたがこちらはマッピング後のキー情報しか得られませんでした。
最悪 xmodmap した結果をパースして利用するなりでなんとかなるとは思うのですが、
何か都合の良い方法があるのではないかと諦めきれず質問させて頂きました。
識者の方がいらっしゃいましたらご教授くださいませ。
X上のCUIってなんだ?
「X Server が上がってる状態でコマンドラインのアプリを動かす場合に」って事でしょ
俺も
>>329 と同じ疑問を持って以前調べた事があるけどよくわがんねかった
>>332 漏れは大体判ったよ。
>>329 XWindow上で端末エミュレータを動かし、その中でキーをあれこれしたいということだろ?
Xの思想から言えば、端末エミュレータであれこれするなってことになると思う。
つーか素直に自分で端末エミュレータもどきを実装すればいいだろ。
>>332 ジエンじゃねーよ…
端末エミュレータ上でごにょごにょするアプリ作ってます
↓
生のキー入力情報が欲しいな
↓
X が上がってるとキー入力は X に奪われてしまうなあ
↓
普通なら X さんからキー入力情報を頂かないといけないのか…
↓
でも、別にウィンドウを開く訳じゃないので X のライブラリなんかリンクしたくないよ
↓
(こんな単純な事はもっと簡単にやる方法があるに違いない!)
って事でしょ。細部は違うかもしれんが、大体こんな感じだ。
さらに拍車をかけて何を言ってるのかわからんぞ。 自分でわかるように書くんじゃなくて、他人に伝えるようにかけよ
自演は放置でFA
何でそんなに自演が気になるのかな。 自演の指摘その物が独り相撲なのになあ。
自演はどうでもいいけど、自演に意味が無いことを伝えるのは有用かも。
[xk]term なら環境変数 WINDOWID を定義してくれてるから、 環境変数 DISPLAY と WINDOWID で頑張ってgrabするくらいしかない。
342 :
336 :2007/05/14(月) 20:14:09
>>339 「ジサクジエーンということにしないと、自分だけ解ってないみたいで辛い」んだろう。
X上のCUIってのは、ターミナルエミュレータのことか。 漏れも最初の書き込みだけだとわからんかった、歳かな
>>340 実際は自演じゃないから逆効果なんじゃないかな。
書き込まれた内容だけを見てレスを付けられるようになってくれると良いんだけどね。
>>343 ターミナルエミュレータの事ではなく、何らかのコマンドラインアプリケーションの事でしょう。
どゆこと?
「X Server が上がってる状態でコマンドラインのアプリを動かす場合に」って、
>>331 が言ってるけど
X Clientは別のホストで動いてて・・ 意味がわからん
X Client上でキー入力しか受け取れないと思うけど、それでいいならrootにInputしかけたらいいんじゃないの?
>>346 「X が上がっていても動く showkey が欲しい」
これでどう?
俺もあなたが言ってる事がよう分からん…
俺も今まで読んでて
>>346 だけ意味が分からなかった
>>348 xev はみんな知ってるのよ。
CUI と書いてあるのはウィンドウを開きたくないって事なんですよ。
分かんないかなあ…
>>351 あぁ、スマソ。そういう事なら良いかも。
やっぱり自演だったのね
そうそう。君の書き込み以外は全部同じ人が書いてるんだよ。ってアホか… どうしても自演認定したくて仕方がないみたいね。何かトラウマでもあるの?
自分だけ理解できないで、置いてけ堀のまま話が進んでいくことに耐え切れなかったんじゃない?
356 :
332 :2007/05/16(水) 14:55:43
荒らしてるのはいつも質問者 これ、豆知識な
358 :
デフォルトの名無しさん :2007/06/06(水) 00:32:48
質問させてください。 仕事でMotifを使っているプログラムを引き継ぎ・改修することになりました。 その中でXtInitializeを使っている個所があって、表示端末を指定して 出力している個所があります。 表示端末にXサーバが起動していれば問題ないけれど、 必ずしもそうとは限らないし、また指定する方で誤った出力先を指定することもありうるので、 XtInitializeで失敗するときに、ログファイルに出力するようにしたいんです。 ところが、実際に動作させると、なんかXtInitialize内部で死亡(コアダンプとかではなく、通常に) するので、関数が抜けてきたところでは、判別がつかないっぽいです。 おそらく、標準の動作がそうなんでしょうが、 これを回避(関数内部で終了するのはかまわないがどうにかしてログに残すなど)する 方法はないでしょうか? お手数ですが、よろしくお願いいたします。
マニュアル読め
マニュアルには何らかの方法が書いてあるのですか?
関数の仕様を知れ ライブラリも読め
>>361-362 とりあえず簡易的な(Webなどの)マニュアルを見ましたが、
それには書いてなかったんですよね。
それと、最初ログメッセージ書いておいて後から消すなんて、
そんな器用なことできるんですか?(w
(まあ、できなくはないだろうけど、
私が言う「ログファイル」は複数のアプリケーションが書く可能性がある
ログファイルなんで、消すのすんごく面倒なんですがねw)
Motifスレがあるのは知りませんでした。そっちで訊きますよ。
サンクス。
でも、なんか知っているんなら、とっかかりになることでも
書いていただけると助かるのに、なんてやさしいお方なのかなあ(w
Webのマニュアルって何? 添付のマニュアルは読まない人なの?
>>363 スレ違いの質問でも答えてもらえると思ったら大間違い。
質問したら答えてもらえると思ってる こいつの思考回路がめでたいな
>>365-366 信じて貰えないと思うけども、Motifのスレがあるのは知らなかったんですよ。
で、しょうがないからここで訊いた、と。
まあ、確かに、他にスレがあるんならスレ違いで俺が悪いです。
ごめんなさいm(__)m
>>364 あ、添付は初めから無いです。
勿論、専門書読めば別でしょうけども。
とりあえず、やり方分かりました。
専門書なんて関係無くね? 何か勘違いしてる予感。
マニュアルページのXtInitializeを読むと……
久々に質問がきたので皆んな大喜びですね
GCの属性値を調べる方法はありませんか?
属性値? XGetValues()では事が足りないの?
374 :
372 :2007/06/18(月) 22:42:16
ありがとうございます GCに設定されている値を調べたいと思っています。 XGetValuesはマニュアルが無かったので、後程調べてみます。 やりたいことというのは、 Display dpy; Window wnd; GC gc; XGCValues value; .... gc = XCreateGC(dpy, wnd, 0, value); とすると、GCに何が設定されたのか調べたいと思っています。 value構造体を宣言してなんの変更もせずにXCreateGCをすると、 valueには何が入っているのでしょうか? デフォルト値が入るの でしょうか?
375 :
372 :2007/06/18(月) 22:47:04
すみません。 間違えて入力してしまいました。 valuemaskに0を設定すると、*valuesは無視してデフォルトを設定するんですよね。 valuemaskに、GCForeground | GCBackground | GCPlaneMask を設定したとして 読んでください。 valuemaskは変更して、valuesは何も設定していない時に何が入るのか 調べたいと思っています。
むぅ、間違えた。XGetGCValues()だった。 valueに値を設定しないということは、これはXに関係なくCの問題で不定値が入っている。 #つまり、設定しないで使ってはいけないということ。 valuemaskが0の場合に限り、valueは完全に無視される。
377 :
372 :2007/06/18(月) 23:55:35
よく考えてみたらそうですね… ありがとうございます。 XGetGCValuesについては、調べてみます。
結局、>372は自分で調べる気がさらさらないのねw
色っていうのはunsigned longで表されてるんですよね? だとしたら、BlackPixelの値から定数を引いて行くと カラーマップみたいなのができるんですか?
380 :
379 :2007/06/20(水) 01:37:29
実際に作ってみたら、BlackPixelが0になってるようで引いていくと 真っ黒になったので、定数を足して行くように作りました。 そしたら、黒から青になるような図の繰り返しの帯ができました。 更に大きい値の定数を足していくと、緑とか赤の繰り返しの帯が できました。 繰り返すにつれて色が変わって行ってるので、多少の変化はあるよう なのですが、同じような色の変化の繰り返しになっています。 これはどのような法則で色が決められているのでしょうか?
>>380 Visual による。
その計算が適用できるのは TrueColor の場合だけ。
XLibの解説書でも読んでくれ。 おそらくred * 0x10000 + green * 0x100 + blueにでもなっているんだろ。
>>382 分からないのなら答えなくていいから、偽の情報をばらまくな
>>380 xdpyinfo で見られる red, green, blue mask てのがそうだ。
>>381 の言う通り Visual から拾える。TrueColorの場合は、これらを元に r,g,b から計算可能。
depthもいろいろあるからしっかり対応してくれ。
385 :
379 :2007/06/20(水) 23:48:47
>>381 , 382, 384
ありがとうございます。 でも、よくわからないです…。
xdpyinfoででてきた値を書けた値が基準色になるのでしょうか?
> red, green, blue masks: 0xf800, 0x7e0, 0x1f
こうなっているのですが、
0xf800 * 1 = 赤
0x7e0 * 1 = 緑
0x1f * 1 = 青
と言う風な認識でいいのでしょうか?
ちなみに実際にその値を表示させてみると、赤、緑、青が表示されました。
また、例えば黒から少しづつ色を白に近づけて行くにはどのようにすれば
いいのでしょうか?
>>385 そのパターンだと赤5ビット緑6ビット青5ビットのRGBのようだね。
黒から白までの色を作るには、gray0からgray100までの色名を使うか、
各プレーンの値を計算するか、どちらかになるのかな。
>>385 > 0xf800 * 1 = 赤
> 0x7e0 * 1 = 緑
> 0x1f * 1 = 青
> と言う風な認識でいいのでしょうか?
ノゥ!
(赤 << 12) + (緑 << 6) + 青
pixel値にbitmask(0xf800, 0x7e0, 0x1f)を論理積したものがその色の要素。
(pixel & 0xf800) >> 12 で赤の成分が取れる。
388 :
379 :2007/06/21(木) 01:50:36
>>386 , 387
ありがとうございます。 色の扱いって難しいんですね。
なんで5bit, 6bit, 5bitの値が出て来たのかも、
> (赤 << 12) + (緑 << 6) + 青
こうなったのかも全く理解できないです…。
XlibをというかC言語自体を触り始めたばかり私には、
まだ敷居が他界みたいですね…。
389 :
デフォルトの名無しさん :2007/06/21(木) 12:53:27
横から質問させて頂きます。 色の話が出ていたので疑問に思ったのですが、RGB各256の値から 色を作りたい場合XAllocColorを使わずに作るには、どうしたらい いんですか?
>>288 0xf800, 0x7e0, 0x1f を2進数で書いてみればわかるんじゃないかな。
1111 1000 0000 0000
0000 0111 1110 0000
0000 0000 0001 1111
1になってるビットを数えて、各要素の解像度がわかる。1の右の0の数を
数えて、シフトする量がわかる。
(387氏はちょっと間違えていて、赤は11ビットシフト、緑は5ビットシフト)
Xlibでの色の扱いを紹介したページってないのかな
394 :
デフォルトの名無しさん :2007/10/03(水) 14:16:11
XLibを使った画像ビュアーを作りたいんですが、シンプルでXLibで作られた画像ビュアー ってないですかね? XVは大きいので、画像を表示だけしてる。 みたいなソースが見たいです。
>>394 それだけでいいなら、XLibでやっつけたら?
そうでないなら、Intrinsicがどうせ載っているでしょ。
AthenaWidgetやMotifWidgetが使えると思うよ。
つーか、Gnomeならeogを使うのが一番簡単なんだがw
>>395 すみません。
Pentiumなマシンを貰ったので、それを使おうと思ってるのですが
GNOMEやらはメモリとかスペックの都合でなかなか動きそうにありません。
なので、写真だけは見たいので自分で作れればと思ったのですが
だったらXVでもImageMagickでも、既存アプリをそのまま使えばいいじゃん。 作りたいなら止めないけど。
>>397 XVはライセンスがややこしくない?
ImageMagickは重すぎるだろうし、結局何で表示するん?
399 :
デフォルトの名無しさん :2007/10/04(木) 06:15:09
Java でタブレットを使いたいのですが Javaライブラリにウィンドウを管理してもらってるため Display や Window が手元にありません。 この状態から拡張イベントを受け取るか グラブする方法を教えてください。
400 :
399 :2007/10/09(火) 22:26:56
>Display や Window が手元にありません。 うそでした。
画像ビュアを作りたいって奴が多いのな。 だれかサンプル書いてやれよ
画像ビューアって簡単なのだったらXImageで作ったのにファイルから読み込んだデータ突っ込んで、ExposeのときにXPutImage呼ぶだけじゃ・・・
XSetWindowBackgroundPixmap使えばExposeさえ不要。
とりあえず書いてやれよ
私も色の扱いについて悩んでいます。 毎回、色をサーバに問い合わせていたら時間がかかりすぎてしまいます。 過去ログでmaskでshiftするというのがあったのですが、よく分かりません。 詳しく教えて頂けると嬉しいです。
初歩の勉強が足りんだけ
ところで、勉強するにはどうしたらいいんだ? 英語から始めなきゃダメ?
bitについて勉強すればいいだけ。
Xlibについて勉強できる本はありませんか? 日本語のものが希望です。
410 :
409 :2007/10/19(金) 15:54:32
for ( int i = 0; i < img_height; i++ ){ for ( int j = 0; j < img_width; j++ ) { color.red = img_data[i][j * 3 + 0 ] * 256; color.green = img_data[i][j * 3 + 1 ] * 256; color.blue = img_data[i][j * 3 + 2 ] * 256; XAllocColor( x_res->display, cmap, &color); XSetForeground( x_res->display, x_res->gc, color.pixel); XDrawPoint( x_res->display, x_res->mywd, x_res->gc, j, i); } } こうしていると、非常に表示が遅いです。 XAllocColorが遅いようなのですが、 もっと高速に表示させるにはどうしたらいいのでしょうか?
411 :
409 :2007/10/19(金) 15:58:09
書き忘れていましたが、XAllocColorが遅いと思ったのは for ( int i = 0; i < img_height; i++ ){ for ( int j = 0; j < img_width; j++ ) { color.red = img_data[i][j * 3 + 0 ] * 256; color.green = img_data[i][j * 3 + 1 ] * 256; color.blue = img_data[i][j * 3 + 2 ] * 256; //XAllocColor( x_res->display, cmap, &color); XSetForeground( x_res->display, x_res->gc, XBlackPixel( x_res->display, x_res->myscr)); XDrawPoint( x_res->display, x_res->mywd, x_res->gc, j, i); } } とすると、非常に高速に描画されます。 よろしくお願いします。
>>411 >>248- から嫁。xvやらいろんなプログラムのソース嫁。
>>412 そのいろんなプログラムに、いいソースを持ったのが無いよ
「いいソース」の条件を具体的に
とりあえず弄り始める前にヘッダだけでも読んで どんな構造体あるかどんな関数があるか把握しとけよw
開いているWindowのサイズを変更することってできますか? XCreateSimpleWindowの場合、Windowを作ったときにサイズを指定してるので サイズの変更はできないのでしょうか?
man3下をResizeとかChangeSizeで探してみるとかせんのかね?
10年ほど前にXlib直書きを引退して、 今じゃほとんど憶えていない自分ですら一発でman出せたくらいに直球だ
640x480のウィンドウを作ったとして、座標( 800x800)の位置に書き込みを行うと、 メモリ範囲外への書き込みになってしまうのでしょうか? それとも、捨てられたりするのでしょうか?
ちゃんとクリッピングしてくれるので安心してよい。
XCreateSimpleWindowでWindowを作り、WMのWindowの操作によりWindowのサイズを変更して XGetNormalHintsでWindowサイズを見ても、Windowのサイズを変更する前のサイズがセットされ ています。 現在のウィンドウサイズを取得するにはどうすればいいですか?
XGetWindowAttributes, XGetGeometry
>>422 ありがとうございます。
XGetGeometryで実現できました。
これをXHintsに再設定しておけば、次からはXHintsへのアクセスで取得できるんですね。
使いかたは、 gload01 画像ファイル名 で。 jpeg、png、xwd のフォーマットに対応しています。
甘やかすなよ
画像ビュワーの話が出ているので便乗質問させてください。 私もXlibを使って画像ビュワーを作っているのですが、画像の大きさの変更で悩んでいます。 jpeglibを使うと、1/1, 1/2, 1/4, 1/8サイズにしか縮小できないようなのですが、 ウィンドウサイズに画像をフィットさせたい場合は、どのような方法があるでしょうか? 最悪、ImageMagickで画像サイズを修正しようかと思っていますが、他の方法があれば 教えて頂きたいです。
gdk-pixbufとか使え
整数分の1でなら、n×n ドットのマトリクスに分割して、色の平均値を取れば 出来る(表示だけなら端数はごまかしても良いし)。 ジャギーをあまり気にしなければ簡単な方法だけれども、プログラム自体は結構 めんどくさい。
430 :
デフォルトの名無しさん :2007/11/13(火) 23:07:45
>>430 60%縮小とか、縦横比が元の画像と異なるとかによって変わってくるかなと思って。
s[100][100]からd[60][60]へ変換する場合は、n=100/60=1.6、走査の点を(x,y)とすると、
d[0][0]はx>1.6、y>1.6の範囲の色を平均値を取る。つまり
d[0][0]=s[0][0]、s[1][0]、s[0][1]、s[1][1]の平均値。
d[1][0]はx>3.2、y>1.6の範囲の色を平均値を取る。
d[1][0]=s[2][0]、s[3][0]、s[2][1]、s[3][1]の平均値。
d[2][0]はx>4.8、y>1.6の範囲の色を平均値を取る。
d[2][0]=s[4][0]、s[4][1]の平均値。
とやって行けばいいのかな。
すまん、符号が逆だった。 寝ぼけてるよ・・・
もうXlib関係無い、よそでやれ
435 :
デフォルトの名無しさん :2007/11/15(木) 22:07:02
>>432 レンジの中心点からの距離の重み付けをしたほうがいいのでは?
速度との兼ね合い、はいさいなら
>>427 画像ビュアーなら画像を見る機能さえ付いてたらいいんじゃない?
画像のリサイズとかに対応するより、見る機能を追加しって方がいいと思う
439 :
デフォルトの名無しさん :2007/12/03(月) 18:56:33
Xlibでドラッグ&ドロップにような機能を実装したいんですが、 ドラッグ側はmousePressイベントでOKとしても、ドロップ側はどうすればどう判断すればいいのですか?
>>439 何故U/IをXlibにまで降りて実装しようと考える。
普通、GnomeかせめてXtを使うだろ。
442 :
デフォルトの名無しさん :2007/12/06(木) 17:56:30
>>439 XSendEventでポインタが居るウインドウにイベントを送ればいいのでは、
確かイベントの送り先にPointerWindowかなんかが選べたはず。
443 :
デフォルトの名無しさん :2007/12/07(金) 22:25:39
>>440 >普通、GnomeかせめてXtを使うだろ。
おかれている環境によって普通の定義がだいぶ違うと思うけど。
おれの普通だとXtかmotifになるんだが。
>>443 俺もだ。もしかして監視制御屋さんですか?
私のところだと、私自身はMotif使いだけれど他の業者はGnomeだったりXtだったり。 それぞれいつ頃からXに関わっているかが違う所為かもね。
446 :
デフォルトの名無しさん :2007/12/20(木) 19:47:48
互換性を考えたらXt最高
何と何との互換性?
448 :
デフォルトの名無しさん :2007/12/24(月) 18:02:38
趣味糧食屋?
ウィンドウのサイズが変更された、ウィンドウが移動された、ウィンドウが前面にマップされた 全てExposeイベントになるのですが、上記のイベントを分けて受け取ることはできませんか?
ついでだけど、Exposeイベントってなんで毎回2回発行されるの? ウインドウを動かすだけで、2回発行される理由を知りたい。
>>452 window managerにもよるんじゃね? xevで確認すれ。
あとは、連続したexposeをclient側でひとつにまとめるとかはよくやる。
ximg->dataを作るとき、どのようにして作るのが正しいんですかね? ウインドウのサイズとぴったり作るとすれば、 ximg->data = malloc( hints.width * hints.height *( sizeof( unsigned long int)); として作れば良いんですかね?
bytes_per_line を使う
>>455 調べてみたのですが、よくわかりません。
自分が調べてコードを書いているのですが、bytes_per_lineは0にしておけば良いと言うことでした。
(どこで調べたのかは忘れてしまいました。)
もしよろしければ、詳しく教えていただけないでしょうか?
457 :
456 :2008/01/16(水) 23:47:18
継続して調べていたのですが、XCreateImageの際にbytes_per_lineの値を0にしておけば、 計算してくれて、入るようですね。 bitmap_padは、depthの値にしていたのですがこれも間違っているようでしたので32にしました。 ですが、height * ximg->bytes_per_lineにすると、セグメント違反だと言われます。 メモリを大きく取っていれば問題ないようなのですが…。
>>458 連続するイベントは無視して、最後のイベントで処理する。
>>459 わかんね。
連続してるのはどう判断するの?
例えば3回イベントがくるとしても、その3回っていうのはプログラム側からしたら分からんよね?
どうやってこの次にも同一のイベントが来るって言うのと、これが最後のイベント。って判断するの?
俺が素人過ぎるのかな…。
>>460 XEventsQueuedが0ならば最後のイベント
>>461 それをすると、いくつかの種類のイベントがあったら最後のイベントしか実行しないようにするの?
フラグ持っといて、0ならフラグチェックしてフラグ立ってるイベント全部処理する。みたいな感じで処理するの?
exposeの話だろ。最後のexposeだけでいいじゃん。
>>463 while( 1){
XNextEvent( disp, &event);
switch( event.type){
case Expose:
if( 0 == XEventsQueued( disp, QueuedAfterFlush)){
EXPOSE;
}
break;
case KeyPress:
KEYPRESS
break;
}
}
と書いてた場合、最後のイベントがexposeじゃなかったらexposeは無視される。
って話じゃないの?
どうかくんだよ
マニュアルくらい読めよ
読んだが、なにをいいたいんだ? サンプルも何もないぞ
>>457 malloc はそれで OK。format は ZPixmap で
>>458 XExposeEvent.count を使う
if( 0 == event.xexpose.count){ こやってみたけど、exposeが1回じゃ収まらないな 0になって、exposeしている間にexposeイベントが発生してるのかな
>>471 確かに改めて見てみると、何回かイベントが処理されるね。
処理されない方法ある?
ExposeEventが来た時はflag立てるだけにして、 flag!=0 && XEventsQueued()==0 の時にexpose処理をすればいいだけなのに、 なんでここはアホの子が多いんだ?
Xlibなんて叩こうと思ってる時点で阿呆だから
書き忘れた。
>>473 それは
>>471 がやってることと同じだから。
人のことを言う前に、時分の頭のことを考えろな。
>>475 同じじゃない。
expose.countはExposeのRectangleが分割された時に残りのnumRectsが入ってるので、
client側処理の遅延により処理が滞った時は expose.count = 0 の ExposeEvent が複数個
イベントキューに存在することもある。
あほ? 動作確認は普通、_Xdebug=1;のときにするだろ。
俺もアホの仲間だと思うけど質問。 ExposeとKeyPressのイベントを取ってて、KeyPressでもexpose、Exposeの時も exposeをしてて、KeyPressでは表示を変えたりWindowのサイズを変えたりして る。 KeyPressがあったときは、なぜかExposeイベントが発生したり発生しなかったり で、KeyPressにもexposeをしかけてるのだけど、これを1つにまとめる方法って あるだろうか? KeyPressでExposeが怒らなかったときは、exposeは一回しかしないから良いの だけど、KeyPressでexposeしてExposeも発生すると2回exposeをやってしまう。
色の反転はどうするんですか?
XmbDrawImageStringで文字を描画しているのですが、どうしても日本語が表示されません。 日本語のフォントは指定しています。 どのような原因が考えられますでしょうか?
すみません。 setlocaleをfontsetの前に実行していたのが原因のようでした。 失礼しました。
483 :
481 :2008/01/24(木) 03:13:02
なんども質問して申し訳ありません。 ある行数以上のファイルで起こるのですが、 i_FI.ISO8859-1: 156: 14 iso8859-15/XLC_LOCALE: fi_FI.ISO8859-15: 168: 41 iso8859-1/XLC_LOCALE: fo_FO.ISO8859-1: 180: 39 iso8859-15/XLC_LOCALE: fo_FO.ISO8859-15: 192: 41 iso8859-1/XLC_LOCALE: fr_BE.ISO8859-1: 204: 39 iso8859-15/XLC_LOCALE: fr_BE.ISO8859-15: 216: 41 iso8859-1/XLC_LOCALE: fr_CA.ISO8859-1: 228: 39 iso8859-15/XLC_LOCALE: fr_CA.ISO8859-15: 240: 41 のような文字列が、大量に出力されます。 これは何を意味しているのでしょうか? localeとでているので、何かロケールの問題だとは思うのですが、 一定行数以上のファイルを扱わないと、個の文字列は出力されません。
オーバーフローしてね?
カラー値から、RGBの三原色に戻すにはどうしたら良いでしょうか?
XFree86 4.3.0 から 4.5.0に変えたのですが、仕様って変わったんですかね? XGetGeometryで、 src/x.c:51: warning: pointer targets in passing argument 6 of 'XGetGeometry' differ in signedness src/x.c:51: warning: pointer targets in passing argument 7 of 'XGetGeometry' differ in signedness と怒られてしまいます。 前は怒られなかったんですが。 XGetGeometryは"unsigned int"を求めているようですが、XSizeHintsが"unxigned int"で確保していないようです。 どうしたらよろしいでしょうか?
・諦める。 ・コンパイルオプションを一時的に変更する。 ・根本から修正してしまう。
まずXFree86を使ってる時点で茨の道を歩んでることを自覚しないとな。 あと、型に注意してるのってコンパイラが厳格になっただけだろ
491 :
488 :2008/02/28(木) 21:11:14
すみません。ご指摘の通りでした。 gccも変更されておりました。
まだ勉強中のみなのですが疑問に思ったため質問させて頂きます。 例えばオセロのようなプログラムを作る場合、ウィンドウに適当に線を引き クリックされた座標でクリックされた位置を計測してオセロのマスとするのと、 一つのマスに一つのウインドウを作り、クリックされたウインドウでマスとす るのと、どちらがXlib的なやり方なのでしょうか? 自分が読んでいる本によると、「クリックされる場所はウインドウで判断す る」的なことが書いてあるため後者だと考えているのですが、前者のほうが簡 単に作れそうですし効率的だと思います。 どちらでも作れるのであれば問題ないとは思うのですが、Xlib的な方法がある のであれば教えて頂きたく思います。 どうかよろしくお願いします。
Xlibを名前で使うなんてマゾいことをする人には大差ないと思う。 Motifを使う場合なんかは、絵を貼れるボタンを収容する表型のパーツ(ウィジェット)があるので、 座標計算を一切しないで画面を作ることができる。この差は大きい。
494 :
493 :2008/02/29(金) 01:24:32
「名前」じゃないよ…… 『Xlibを「生」で使う』 に訂正。
Xtってどうなのよ。 Cしかできないんだけど、C++覚えたほうがいいのかな。
今の私だったら、MotifをC++で使いたくなる。 もう、XmToggleButtonGadgetGetState()はこりごりだ。 # XtにもXtWidgetToApplicationContext()なんてのがあるが。
自分でライブラリ作っちゃえば良い
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の勉強を最近始めたよ