1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#ifndef GrRect_DEFINED
9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#define GrRect_DEFINED
10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
11fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org#include "SkTypes.h"
1220efde71b4fd28691b10c8f1cfe15cb2aafddaeareed@google.com#include "SkRect.h"
13ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
14ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comstruct GrIRect16 {
15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    int16_t fLeft, fTop, fRight, fBottom;
16fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
172f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org    static GrIRect16 SK_WARN_UNUSED_RESULT MakeEmpty() {
182f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org        GrIRect16 r;
192f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org        r.setEmpty();
202f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org        return r;
212f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org    }
222f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org
23952841bf41a81228c23d16c7204b458abe0d7136robertphillips    static GrIRect16 SK_WARN_UNUSED_RESULT MakeWH(int16_t w, int16_t h) {
24952841bf41a81228c23d16c7204b458abe0d7136robertphillips        GrIRect16 r;
25952841bf41a81228c23d16c7204b458abe0d7136robertphillips        r.set(0, 0, w, h);
26952841bf41a81228c23d16c7204b458abe0d7136robertphillips        return r;
27952841bf41a81228c23d16c7204b458abe0d7136robertphillips    }
28952841bf41a81228c23d16c7204b458abe0d7136robertphillips
29952841bf41a81228c23d16c7204b458abe0d7136robertphillips    static GrIRect16 SK_WARN_UNUSED_RESULT MakeXYWH(int16_t x, int16_t y, int16_t w, int16_t h) {
30952841bf41a81228c23d16c7204b458abe0d7136robertphillips        GrIRect16 r;
31952841bf41a81228c23d16c7204b458abe0d7136robertphillips        r.set(x, y, x + w, y + h);
32952841bf41a81228c23d16c7204b458abe0d7136robertphillips        return r;
33952841bf41a81228c23d16c7204b458abe0d7136robertphillips    }
34952841bf41a81228c23d16c7204b458abe0d7136robertphillips
35ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    int width() const { return fRight - fLeft; }
36ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    int height() const { return fBottom - fTop; }
37ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    int area() const { return this->width() * this->height(); }
38ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    bool isEmpty() const { return fLeft >= fRight || fTop >= fBottom; }
39fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
402f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org    void setEmpty() { memset(this, 0, sizeof(*this)); }
412f569980c949a9bbc4a4ab54e356264240306159commit-bot@chromium.org
42952841bf41a81228c23d16c7204b458abe0d7136robertphillips    void set(int16_t left, int16_t top, int16_t right, int16_t bottom) {
43952841bf41a81228c23d16c7204b458abe0d7136robertphillips        fLeft = left;
44952841bf41a81228c23d16c7204b458abe0d7136robertphillips        fTop = top;
45952841bf41a81228c23d16c7204b458abe0d7136robertphillips        fRight = right;
46952841bf41a81228c23d16c7204b458abe0d7136robertphillips        fBottom = bottom;
47952841bf41a81228c23d16c7204b458abe0d7136robertphillips    }
48952841bf41a81228c23d16c7204b458abe0d7136robertphillips
49fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org    void set(const SkIRect& r) {
5020efde71b4fd28691b10c8f1cfe15cb2aafddaeareed@google.com        fLeft   = SkToS16(r.fLeft);
5120efde71b4fd28691b10c8f1cfe15cb2aafddaeareed@google.com        fTop    = SkToS16(r.fTop);
5220efde71b4fd28691b10c8f1cfe15cb2aafddaeareed@google.com        fRight  = SkToS16(r.fRight);
5320efde71b4fd28691b10c8f1cfe15cb2aafddaeareed@google.com        fBottom = SkToS16(r.fBottom);
54d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    }
55ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com};
56ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#endif
58