[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)) {
---- ここまで