[PR #4912] til::rectangle #26038

Closed
opened 2026-01-31 09:13:32 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/4912

State: closed
Merged: Yes


Summary of the Pull Request

Introduces convenience type til::rectangle which automatically implements our best practices for rectangle-related types and provides automatic conversions in/out of the relevant types.

PR Checklist

  • In support of Differential Rendering #778
  • I work here.
  • Tests added/passed
  • I'm a core contributor.

Detailed Description of the Pull Request / Additional comments

  • Automatically converts in from anything with a Left/Top/Right/Bottom or left/top/right/bottom (Win32 RECT)
  • Automatically converts Console type SMALL_RECT and shifts it from inclusive to exclusive on instantiation
  • Automatically converts out to SMALL_RECT (converting back to inclusive), RECT, or D2D1_RECT_F.
  • Constructs from bare integers written into source file
  • Constructs from a single til::point as a 1x1 size rectangle with top-left corner (origin) at that point
  • Constructs from a single til::size as a WxH size rectangle with top-left corner (origin) at 0,0
  • Constructs from a til::point and a til::size representing the top-left corner and the width by height.
  • Constructs from a til::point and another til::point representing the top-left corner and the exclusive bottom-right corner.
  • Default constructs to empty
  • Uses Chromium numerics for all basic math operations (+, -, *, /)
  • Provides equality tests
  • Provides operator bool to know when it's valid (has an area > 0) and empty() to know the contrary
  • Accessors for left/top/right/bottom
  • Type converting accessors (that use safe conversions and throw) for left/top/right/bottom
  • Convenience methods for finding width/height (with Chromium numerics operations) and type-converting templates (with Chromium numerics conversions).
  • Accessors for origin (top-left point) and the size/dimensions (as a til::size).
  • Intersect operation on operator & to find where two til::rectangles overlap, returned as a til::rectangle.
  • Union operation on operator | to find the total area covered by two til::rectangles, returned as a til::rectangle.
  • Subtract operation on operator - to find the area remaining after one til::rectangle is removed from another, returned as a til::some<til::rectangle, 4>.
  • TAEF/WEX Output and Comparators so they will print very nicely with VERIFY and Log macros in our testing suite.
  • Additional comparators, TAEF/WEX output, and tests written on til::some to support the Subtract operation.
  • A natvis

Validation Steps Performed

  • See automated tests of functionality.
**Original Pull Request:** https://github.com/microsoft/terminal/pull/4912 **State:** closed **Merged:** Yes --- ## Summary of the Pull Request Introduces convenience type `til::rectangle` which automatically implements our best practices for rectangle-related types and provides automatic conversions in/out of the relevant types. ## PR Checklist * [x] In support of Differential Rendering #778 * [X] I work here. * [x] Tests added/passed * [x] I'm a core contributor. ## Detailed Description of the Pull Request / Additional comments - Automatically converts in from anything with a Left/Top/Right/Bottom or left/top/right/bottom (Win32 `RECT`) - Automatically converts Console type `SMALL_RECT` and shifts it from **inclusive** to **exclusive** on instantiation - Automatically converts out to `SMALL_RECT` (converting back to **inclusive**), `RECT`, or `D2D1_RECT_F`. - Constructs from bare integers written into source file - Constructs from a single `til::point` as a 1x1 size rectangle with top-left corner (origin) at that point - Constructs from a single `til::size` as a WxH size rectangle with top-left corner (origin) at 0,0 - Constructs from a `til::point` and a `til::size` representing the top-left corner and the width by height. - Constructs from a `til::point` and another `til::point` representing the top-left corner and the **exclusive** bottom-right corner. - Default constructs to empty - Uses Chromium numerics for all basic math operations (+, -, *, /) - Provides equality tests - Provides `operator bool` to know when it's valid (has an area > 0) and `empty()` to know the contrary - Accessors for left/top/right/bottom - Type converting accessors (that use safe conversions and throw) for left/top/right/bottom - Convenience methods for finding width/height (with Chromium numerics operations) and type-converting templates (with Chromium numerics conversions). - Accessors for origin (top-left point) and the size/dimensions (as a `til::size`). - Intersect operation on `operator &` to find where two `til::rectangle`s overlap, returned as a `til::rectangle`. - Union operation on `operator |` to find the total area covered by two `til::rectangles`, returned as a `til::rectangle`. - Subtract operation on `operator -` to find the area remaining after one `til::rectangle` is removed from another, returned as a `til::some<til::rectangle, 4>`. - TAEF/WEX Output and Comparators so they will print very nicely with `VERIFY` and `Log` macros in our testing suite. - Additional comparators, TAEF/WEX output, and tests written on `til::some` to support the Subtract operation. - A natvis ## Validation Steps Performed - See automated tests of functionality.
claunia added the pull-request label 2026-01-31 09:13:32 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#26038