That's not all, many methods return new rectangles via Point's API, namely Point>>{#corner: #extent: #rectangle:}
I don't know if I can perform static analysis of the code (are there tools for that in Pharo?) to see which methods exactly return Rectangle
rectMethods := #(#corner: #extent: #rectangle:).
(Point methods select: [ :m | rectMethods includes: m selector ] thenCollect: [ :m | m senders ]) flattened select: [ :s | s className = #Rectangle ]. "an Array(
Rectangle>>#areasOutside:
Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
Rectangle>>#withBottom:
Rectangle>>#bottom:
Rectangle>>#areasOverlapingOutside:
Rectangle>>#floor
Rectangle>>#allAreasOutsideList:startingAt:do:
Rectangle>>#scaledAndCenteredIn:
Rectangle>>#squishedWithin:
Rectangle>>#ceiling
Rectangle>>#withHeight:
Rectangle>>#rectanglesAt:height:
Rectangle>>#scaleFrom:to:
Rectangle>>#withLeft:
Rectangle>>#left:
Rectangle>>#withTop:
Rectangle>>#right:
Rectangle>>#top:
Rectangle>>#innerCorners
Rectangle>>#interpolateTo:at:
Rectangle>>#withWidth:
Rectangle>>#quickMergePoint:
Rectangle>>#withRight:
Rectangle>>#rotateBy:centerAt:
Rectangle>>#withSideOrCorner:setToPoint:minExtent:limit:
Rectangle>>#flipBy:centerAt:)
"
This list is maybe a bit excessive (sometimes it returns self, sometimes new rectangle -- e.g. floor).