Add Rectangle.With() extension methods
Need to flesh out the with-pattern methods for `Rectangle` to account for the various points: Left Top, Left Center, Left Bottom; Center Top, Center Center, Center Bottom; Right Top, Right Center, Right Bottom. * WithLeftTop(int, int) * WithLeftTop(Point) * WithLeftCenter(int, int) * WithLeftCenter(Point) * WithLeftBottom(int, int) * WithLeftBottom(Point) * WithCenterTop(int, int) * WithCenterTop(Point) * WithCenter(int, int) * WithCenter(Point) * WithCenterBottom(int, int) * WithCenterBottom(Point) * WithRightTop(int, int) * WithRightTop(Point) * WithRightCenter(int, int) * WithRightCenter(Point) * WithRightBottom(int, int) * WithRightBottom(Point) Also should expand the conversions to add methods to get the points. * Point ToLeftTop() * Point ToLeftCenter() * Point ToLeftBottom() * Point ToCenterTop() * Point ToCenterBottom() * Point ToRightTop() * Point ToRightCenter() * Point ToRightBottom() **Note:** *`ToCenter()` is already part of the API.* To support the above methods, need to add methods that get the correct `RightX` and `BottomY`. To keep consistency, should also add the range. The reason these two methods are needed is that `Rectangle` incorrectly handles `Right` and `Bottom` by naively adding the respective size to its coordinate. This means that `Rectangle(0, 0, 10, 10)` has a `Right` of `10` when it should be `9`. The reason is normal zero-based indexing math logic, the same reason the last index of an array is `count - 1` and not `count` itself. * int ToLeftX() * int ToRightX() * int ToTopY() * int ToBottomY() Of course all the similar methods and overloads for `RectangleF`.
issue