[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
mgl2 019 patch
神木です。
fontkit とはまた別の話ですが、...
そろそろ 019 へのパッチが出てきそうな雰囲気なので出しておきます。
X11 上に MGL2 を rotate して表示している場合に
マウスポインタの位置が正しくアプリに伝わっていないバグと、
mgl_set_key_mode(MGL_SK_EXMOUSE_EVENT) において
最初にすくなくとも 1 回マウスボタンを押さなければならない
(move だけを扱うことができない; focus-follow-mouse できない) バグの fix です。
それと、get_key() が mgl_set_key_mode(MGL_SK_EXMOUSE_EVENT) している時に
仕様に載っていない keycode (0x80FFFFFF) を -1 のかわりに返して来ることが
あるようです。
# これ、たいがい get_key() のあとある switch() 文をすりぬけて busy loop
# をつくりだしますが、動作上は問題なく見えるとこが嫌らしいっす。
回避のためアプリ側で
c = get_key(0);
if((c == -1) || (c == 0x80FFFFFF)) { ... }
とやってたりしますが、こちらは追ってません。
>From: suz@hpc.bs1.fc.nec.co.jp (Koji Suzuki)
>Date: Sat, 14 Oct 2000 04:50:06 GMT
>鈴木(康)です。
> | mgterm 上で rogue clone 動かすと curses の振舞いがちょっとおかしい (?_?)
> | 1 行消去のはずなのに後ろ半分が消えない、みたいな動作をする。
> | こっちはこれから調べるところ。termcap の設定がミスってるだけだといいな...
>ncurses と相性が悪いのでしょうか?
>ひょっとしたら、なんか定義が足りないのかも知れません。
>なにかわかったら教えてください。
メッセージ分離型 rogue clone (rogue_s) で内蔵 curses を使ったものですが、
termcap の vt100 のエントリから ac を抜いたものでは正しく動いたので
なにかの機能の解釈齟齬があるようです。
# ac は抜かないと日本語が表示されない。
あとは比較すりゃーいいだけなんだけど見比べてて目眩が (^^;
--
神木一也
kensyu@y.email.ne.jp
---- ここから
diff -uNr mgl2-alpha-019/lib/emx11.c mgl2-alpha-019-k1/lib/emx11.c
--- mgl2-alpha-019/lib/emx11.c Tue Sep 5 15:51:37 2000
+++ mgl2-alpha-019-k1/lib/emx11.c Sun Oct 15 20:13:23 2000
@@ -682,6 +682,27 @@
while (XCheckMaskEvent(display, GET_EVENT,&event)) {
int x = event.xbutton.x;
int y = event.xbutton.y;
+ int tmp;
+ switch (x_rotated) {
+ default:
+ case DIR_NORTH:
+ break;
+ case DIR_EAST:
+ tmp = y;
+ y = physical_screen->height - 1 - x;
+ x = tmp;
+ break;
+ case DIR_SOUTH:
+ x = physical_screen->width - 1 - x;
+ y = physical_screen->height- 1 - y;
+ break;
+ case DIR_WEST:
+ tmp = physical_screen->width - 1 - y;
+ y = x;
+ x = tmp;
+ break;
+ }
+
switch(event.type) {
case Expose:
if (r_rect == 1) {
diff -uNr mgl2-alpha-019/lib/event_man.c mgl2-alpha-019-k1/lib/event_man.c
--- mgl2-alpha-019/lib/event_man.c Tue Sep 5 17:06:15 2000
+++ mgl2-alpha-019-k1/lib/event_man.c Sun Oct 15 20:14:42 2000
@@ -218,7 +218,7 @@
if (vk_search(v,x - p->x,y - p->y)) return 1;
v = v->link;
}
- if ((p->down == MK_V0) && (p->up == MK_V0)) return 0;
+ if ((p->down == MK_V0) && (p->up == MK_V0) && (p->move == MK_V0)) return 0;
if ( (p->x <= x)&&(x <p->x+p->xs)&&(p->y <= y)&&(y < p->y+p->ys)) {
vkp = p;
return 1;
@@ -280,7 +280,19 @@
void vk_mouse_down(int x,int y);
void vk_mouse_move(int x,int y) {
- if (!vk_cur) return;
+
+ if (!vk_cur){
+ if (mgl_key_mode & MGL_SK_EXMOUSE_EVENT){
+ if (vk_search(vk_root,x,y)) {
+ if (vkp->move != MK_V0) {
+ vk_cur = vkp;
+ put_key_xy(vkp,vkp->move,x,y);
+ }
+ }
+ }
+ return;
+ }
+
if (vk_cur && !vk_pressed) {
if ( (mgl_key_mode & MGL_SK_EXMOUSE_EVENT) &&
(vk_cur->move != MK_V0) && vk_match(vk_cur,x,y)) {
---- ここまで