protected virtual void _RebuildCoordinates()
{
// bool isFlipped = this._IsFlipped();
// bool lastFlipped = Convert.ToBoolean(_rFlags.flipped_view);
// if ((_coordinates_valid == false) || (isFlipped != lastFlipped))
// {
// _coordinates_valid = true;
// _rFlags.flipped_view = isFlipped;
// if (_window == null)
// {
// _visibleRect = NSRect.Zero;
// _matrixToWindow.MakeIdentityMatrix();
// _matrixFromWindow.MakeIdentityMatrix();
// }
// else
// {
// NSRect superviewsVisibleRect;
// bool superFlipped;
// NSAffineTransform pMatrix;
// NSAffineTransformStruct ts;
//if (_super_view != null)
// {
// superFlipped = _super_view.IsFlipped();
// pMatrix = _super_view._MatrixToWindow();
// }
//else
// {
// superFlipped = false;
// pMatrix = NSAffineTransform.Transform();
//}
//ts = pMatrix.GetTransformStruct();
// /* prepend translation */
// ts.tX = NS.MinX(_frame) * ts.m11 + NS.MinY(_frame) * ts.m21 + ts.tX;
// ts.tY = NS.MinX(_frame) * ts.m12 + NS.MinY(_frame) * ts.m22 + ts.tY;
// _matrixToWindow.SetTransformStruct(ts);
// /* prepend rotation */
// if (_frameMatrix != null)
// {
// //(*preImp)(_matrixToWindow, preSel, _frameMatrix);
// }
// if (isFlipped != superFlipped)
// {
// /*
// * The flipping process must result in a coordinate system that
// * exactly overlays the original. To do that, we must translate
// * the origin by the height of the view.
// */
// ts = [flip transformStruct];
// ts.tY = _frame.Size.Height;
// [flip setTransformStruct: ts];
// (*preImp)(_matrixToWindow, preSel, flip);
// }
// if (_boundsMatrix != nil)
// {
// (*preImp)(_matrixToWindow, preSel, _boundsMatrix);
// }
// ts = [_matrixToWindow transformStruct];
// [_matrixFromWindow setTransformStruct: ts];
// [_matrixFromWindow invert];
//if (_super_view != null)
// {
// superviewsVisibleRect = [self convertRect: [_super_view visibleRect]
// fromView: _super_view];
// _visibleRect = NSIntersectionRect(superviewsVisibleRect, _bounds);
// }
//else
// {
// _visibleRect = _bounds;
// }
// }
// }
}