A BRect
object represents a rectangle.
BRect
s are used throughout the
Interface Kit to define the frames of windows, views, bitmaps—even
the screen itself. A BRect
is defined by its four sides, expressed as the
public data members left
, top
,
right
, and bottom
.
When used in the screen coordinate system(as a window or view's frame,
for example) a
BRect
's
sides are aligned with the x and y axes (as shown
here), and its coordinate values, which are stored as floats, are floored.
You would expect a BRect
defined thus…:
BRect
rect
(0, 0, 3, 3);
…to have a width of 3.0 and a height of 3.0. These, indeed, are the
values returned by the
Width()
and
Height()
functions. However, the
coordinate system considers integer coordinates to fall in the center of
pixels, so the rectangle "touches" a 4x4 pixel grid when it's applied to
the screen—it appears one pixel wider and one higher than
Width()
and
Height()
would have you believe. The mapping of rectangle coordinates
to pixels is explained in greater detail in
"The Coordinate Space".
A rectangle's area includes the points that lie along its sides, but it
doesn't necessarily contain the entire area of the pixels that it "lights
up." For example, consider the point at (3.1, 3.1). This point falls
outside the (0,0,3,3) BRect
defined above (i.e the point doesn't
Intersect() with the BRect
), even though it corresponds to one of the
pixels that the BRect
touches (as shown here).
To represent a valid rectangle, a
BRect
's
top value must be less than or equal to bottom, and its left must be less than or equal to right.
Invalid rectangles are meaningless and can't be used (to define a window
or view's area, etc.) Note that the BRect
constructor and Set…()
function don't prevent you from creating an invalid rectangle. Use the
IsValid()
boolean function to test a BRect
object's validity.