現在の実装では RubberBand は表示領域を超えて移動できてしまう。
想定しているアプリでは、これは無意味なので表示領域を超えた移動をさせないように制約を加える事にする。
RubberBandView#mouseDown: へ下記コードを加える。
// constrain rules
_rect.origin.x = fmax(_rect.origin.x, 0.0);
_rect.origin.y = fmax(_rect.origin.y, 0.1);
NSRect bounds = [self bounds];
if (_rect.origin.x + _rect.size.width > bounds.size.width) {
_rect.origin.x = bounds.size.width - _rect.size.width - 0.1;
}
if (_rect.origin.y + _rect.size.height > bounds.size.height) {
_rect.origin.y = bounds.size.height - _rect.size.height;
}
上下、左右の領域ではみ出すケースを検出して、強制的にサイズと位置を補正する。
すると領域をはみ出す移動はできなくなる。
なお補正値で 0.0 ではなく一部 0.1 を使っている。これは 0.0のままだと上と右の領域一杯へ移動した場合に線が消えてしまう為。
0.0 を 0.1 に変えると表示される。ちょっと場当たり的だが十分役に立つ。
ソース:RubberBand-14.zip