ページ

2009年3月22日日曜日

β版バグ修正 - マルチスクリーン(ウィンドウ-2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

ウィンドウキャプチャ時のボタンの位置がおかしい。
これも座標系の不一致の問題。ボタン位置を指定している箇所に前回用意した #convertFromCGWindowPointToLocal: をかます。

- (void)adjustButtonBar
{
if ([_selected_window_list count]) {
Window* wn = [_selected_window_list objectAtIndex:0];
NSRect rect = [wn rect];
rect.origin = [self convertFromCGWindowPointToLocal:rect.origin];
[_button_bar setButtonBarWithFrame:rect];
[_button_bar2 setButtonBarWithFrame:rect];

[_button_bar startFlasher];

}
}



その他にもウィンドウキャプチャ時にウィンドウを選択しようとしてクリックしても反応が無い。これもマウスクリック時の座標系(ローカル座標系)と内部管理しているウィンドウの座標系(CGWindow座標系)の違いによる。前回作った #convertFromCGWindowPointToLocal: をヒット判定処理に加える。

 // (1) search a window on mouse down (already selected)
for (Window* swn in _selected_window_list) {
rect = [swn rect];
rect.origin = [self convertFromCGWindowPointToLocal:rect.origin];
if (NSPointInRect(cp, rect)) {
hit_flag = YES;
selected_window = swn;
break;
}
}



これで直った。


- - - -
内部管理しているウィンドウの座標を使うたびにいちいち変換するのではなく、管理上の座標系自体を CGWindowをやめて ローカル座標系に直した方が良さそうだ(続く)。