| Index: site/user/api/skrect.md
|
| diff --git a/site/user/api/skrect.md b/site/user/api/skrect.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c2ebef1d0fea76be9bb263f522fa3d64970a0d8e
|
| --- /dev/null
|
| +++ b/site/user/api/skrect.md
|
| @@ -0,0 +1,73 @@
|
| +SkRect
|
| +======
|
| +
|
| +*Rectangles*
|
| +
|
| +<!--Updated Mar 4, 2011-->
|
| +
|
| +SkRect is basic to many drawing and measuring operations. It can be
|
| +drawn using canvas.drawRect(), but it is also used to return the
|
| +bounds of objects like paths and text characters. It is specified
|
| +using SkScalar values.
|
| +
|
| +SkIRect is the integer counter part to SkRect, but is specified using
|
| +32bit integers.
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + struct SkRect {
|
| + SkScalar fLeft;
|
| + SkScalar fTop;
|
| + SkScalar fRight;
|
| + SkScalar fBottom;
|
| + // methods
|
| + };
|
| +
|
| + SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
|
| +
|
| +SkRect has the usual getters, to return width(), height(), centerX(),
|
| +etc. It also has methods to compute unions and intersections between
|
| +rectangles.
|
| +
|
| +Converting between SkRect and SkIRect is asymetric. Short of overflow
|
| +issues when SkScalar is an int, converting from SkIRect to SkRect is
|
| +straight forward:
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkRect::set(const SkIRect&);
|
| +
|
| +However, convert from SkRect to SkIRect needs to know how to go from
|
| +fractional values to integers.
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkRect::round(SkIRect*) const; // Round each coordinate.
|
| + SkRect::roundOut(SkIRect*) const; // Apply floor to left/top,
|
| + // and ceil to right/bottom.
|
| +
|
| +In Skia, rectangle coordinates describe the boundary of what is drawn,
|
| +such that an empty rectangle encloses zero pixels:
|
| +
|
| +bool SkRect::isEmpty() const { return fLeft >= fRight || fTop >= fBottom; }
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkScalar SkRect::width() const { return fRight - fLeft; }
|
| +
|
| + SkScalar SkRect::height() const { return fBottom - fTop; }
|
| +
|
| + bool SkRect::contains(SkScalar x, SkScalar y) const {
|
| + return fLeft <= x && x < fRight && fTop <= y && y < fBottom;
|
| + }
|
| +
|
| +Thus, to draw a single pixel (assuming no matrix on the canvas), the
|
| +rectangle should be initialized as follows:
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkRect r = SkRect::MakeXYWH(x, y, SkIntToScalar(1), SkIntToScalar(1));
|
| +
|
| +The same conventions hold for the integer counterpart: SkIRect. This
|
| +also dovetails with SkRegion, which has the same model for set
|
| +membership, and which uses SkIRect.
|
|
|