Loading include/ui/Region.h +14 −0 Original line number Original line Diff line number Diff line Loading @@ -55,43 +55,51 @@ public: void set(uint32_t w, uint32_t h); void set(uint32_t w, uint32_t h); Region& orSelf(const Rect& rhs); Region& orSelf(const Rect& rhs); Region& xorSelf(const Rect& rhs); Region& andSelf(const Rect& rhs); Region& andSelf(const Rect& rhs); Region& subtractSelf(const Rect& rhs); Region& subtractSelf(const Rect& rhs); // boolean operators, applied on this // boolean operators, applied on this Region& orSelf(const Region& rhs); Region& orSelf(const Region& rhs); Region& xorSelf(const Region& rhs); Region& andSelf(const Region& rhs); Region& andSelf(const Region& rhs); Region& subtractSelf(const Region& rhs); Region& subtractSelf(const Region& rhs); // boolean operators // boolean operators const Region merge(const Rect& rhs) const; const Region merge(const Rect& rhs) const; const Region mergeExclusive(const Rect& rhs) const; const Region intersect(const Rect& rhs) const; const Region intersect(const Rect& rhs) const; const Region subtract(const Rect& rhs) const; const Region subtract(const Rect& rhs) const; // boolean operators // boolean operators const Region merge(const Region& rhs) const; const Region merge(const Region& rhs) const; const Region mergeExclusive(const Region& rhs) const; const Region intersect(const Region& rhs) const; const Region intersect(const Region& rhs) const; const Region subtract(const Region& rhs) const; const Region subtract(const Region& rhs) const; // these translate rhs first // these translate rhs first Region& translateSelf(int dx, int dy); Region& translateSelf(int dx, int dy); Region& orSelf(const Region& rhs, int dx, int dy); Region& orSelf(const Region& rhs, int dx, int dy); Region& xorSelf(const Region& rhs, int dx, int dy); Region& andSelf(const Region& rhs, int dx, int dy); Region& andSelf(const Region& rhs, int dx, int dy); Region& subtractSelf(const Region& rhs, int dx, int dy); Region& subtractSelf(const Region& rhs, int dx, int dy); // these translate rhs first // these translate rhs first const Region translate(int dx, int dy) const; const Region translate(int dx, int dy) const; const Region merge(const Region& rhs, int dx, int dy) const; const Region merge(const Region& rhs, int dx, int dy) const; const Region mergeExclusive(const Region& rhs, int dx, int dy) const; const Region intersect(const Region& rhs, int dx, int dy) const; const Region intersect(const Region& rhs, int dx, int dy) const; const Region subtract(const Region& rhs, int dx, int dy) const; const Region subtract(const Region& rhs, int dx, int dy) const; // convenience operators overloads // convenience operators overloads inline const Region operator | (const Region& rhs) const; inline const Region operator | (const Region& rhs) const; inline const Region operator ^ (const Region& rhs) const; inline const Region operator & (const Region& rhs) const; inline const Region operator & (const Region& rhs) const; inline const Region operator - (const Region& rhs) const; inline const Region operator - (const Region& rhs) const; inline const Region operator + (const Point& pt) const; inline const Region operator + (const Point& pt) const; inline Region& operator |= (const Region& rhs); inline Region& operator |= (const Region& rhs); inline Region& operator ^= (const Region& rhs); inline Region& operator &= (const Region& rhs); inline Region& operator &= (const Region& rhs); inline Region& operator -= (const Region& rhs); inline Region& operator -= (const Region& rhs); inline Region& operator += (const Point& pt); inline Region& operator += (const Point& pt); Loading Loading @@ -158,6 +166,9 @@ private: const Region Region::operator | (const Region& rhs) const { const Region Region::operator | (const Region& rhs) const { return merge(rhs); return merge(rhs); } } const Region Region::operator ^ (const Region& rhs) const { return mergeExclusive(rhs); } const Region Region::operator & (const Region& rhs) const { const Region Region::operator & (const Region& rhs) const { return intersect(rhs); return intersect(rhs); } } Loading @@ -172,6 +183,9 @@ const Region Region::operator + (const Point& pt) const { Region& Region::operator |= (const Region& rhs) { Region& Region::operator |= (const Region& rhs) { return orSelf(rhs); return orSelf(rhs); } } Region& Region::operator ^= (const Region& rhs) { return xorSelf(rhs); } Region& Region::operator &= (const Region& rhs) { Region& Region::operator &= (const Region& rhs) { return andSelf(rhs); return andSelf(rhs); } } Loading libs/ui/Region.cpp +19 −0 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,9 @@ void Region::addRectUnchecked(int l, int t, int r, int b) Region& Region::orSelf(const Rect& r) { Region& Region::orSelf(const Rect& r) { return operationSelf(r, op_or); return operationSelf(r, op_or); } } Region& Region::xorSelf(const Rect& r) { return operationSelf(r, op_xor); } Region& Region::andSelf(const Rect& r) { Region& Region::andSelf(const Rect& r) { return operationSelf(r, op_and); return operationSelf(r, op_and); } } Loading @@ -143,6 +146,9 @@ Region& Region::operationSelf(const Rect& r, int op) { Region& Region::orSelf(const Region& rhs) { Region& Region::orSelf(const Region& rhs) { return operationSelf(rhs, op_or); return operationSelf(rhs, op_or); } } Region& Region::xorSelf(const Region& rhs) { return operationSelf(rhs, op_xor); } Region& Region::andSelf(const Region& rhs) { Region& Region::andSelf(const Region& rhs) { return operationSelf(rhs, op_and); return operationSelf(rhs, op_and); } } Loading @@ -165,6 +171,9 @@ Region& Region::translateSelf(int x, int y) { const Region Region::merge(const Rect& rhs) const { const Region Region::merge(const Rect& rhs) const { return operation(rhs, op_or); return operation(rhs, op_or); } } const Region Region::mergeExclusive(const Rect& rhs) const { return operation(rhs, op_xor); } const Region Region::intersect(const Rect& rhs) const { const Region Region::intersect(const Rect& rhs) const { return operation(rhs, op_and); return operation(rhs, op_and); } } Loading @@ -182,6 +191,9 @@ const Region Region::operation(const Rect& rhs, int op) const { const Region Region::merge(const Region& rhs) const { const Region Region::merge(const Region& rhs) const { return operation(rhs, op_or); return operation(rhs, op_or); } } const Region Region::mergeExclusive(const Region& rhs) const { return operation(rhs, op_xor); } const Region Region::intersect(const Region& rhs) const { const Region Region::intersect(const Region& rhs) const { return operation(rhs, op_and); return operation(rhs, op_and); } } Loading @@ -205,6 +217,9 @@ const Region Region::translate(int x, int y) const { Region& Region::orSelf(const Region& rhs, int dx, int dy) { Region& Region::orSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_or); return operationSelf(rhs, dx, dy, op_or); } } Region& Region::xorSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_xor); } Region& Region::andSelf(const Region& rhs, int dx, int dy) { Region& Region::andSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_and); return operationSelf(rhs, dx, dy, op_and); } } Loading @@ -222,6 +237,9 @@ Region& Region::operationSelf(const Region& rhs, int dx, int dy, int op) { const Region Region::merge(const Region& rhs, int dx, int dy) const { const Region Region::merge(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_or); return operation(rhs, dx, dy, op_or); } } const Region Region::mergeExclusive(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_xor); } const Region Region::intersect(const Region& rhs, int dx, int dy) const { const Region Region::intersect(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_and); return operation(rhs, dx, dy, op_and); } } Loading Loading @@ -421,6 +439,7 @@ void Region::boolean_operation(int op, Region& dst, SkRegion::Op sk_op; SkRegion::Op sk_op; switch (op) { switch (op) { case op_or: sk_op = SkRegion::kUnion_Op; name="OR"; break; case op_or: sk_op = SkRegion::kUnion_Op; name="OR"; break; case op_xor: sk_op = SkRegion::kUnion_XOR; name="XOR"; break; case op_and: sk_op = SkRegion::kIntersect_Op; name="AND"; break; case op_and: sk_op = SkRegion::kIntersect_Op; name="AND"; break; case op_nand: sk_op = SkRegion::kDifference_Op; name="NAND"; break; case op_nand: sk_op = SkRegion::kDifference_Op; name="NAND"; break; } } Loading Loading
include/ui/Region.h +14 −0 Original line number Original line Diff line number Diff line Loading @@ -55,43 +55,51 @@ public: void set(uint32_t w, uint32_t h); void set(uint32_t w, uint32_t h); Region& orSelf(const Rect& rhs); Region& orSelf(const Rect& rhs); Region& xorSelf(const Rect& rhs); Region& andSelf(const Rect& rhs); Region& andSelf(const Rect& rhs); Region& subtractSelf(const Rect& rhs); Region& subtractSelf(const Rect& rhs); // boolean operators, applied on this // boolean operators, applied on this Region& orSelf(const Region& rhs); Region& orSelf(const Region& rhs); Region& xorSelf(const Region& rhs); Region& andSelf(const Region& rhs); Region& andSelf(const Region& rhs); Region& subtractSelf(const Region& rhs); Region& subtractSelf(const Region& rhs); // boolean operators // boolean operators const Region merge(const Rect& rhs) const; const Region merge(const Rect& rhs) const; const Region mergeExclusive(const Rect& rhs) const; const Region intersect(const Rect& rhs) const; const Region intersect(const Rect& rhs) const; const Region subtract(const Rect& rhs) const; const Region subtract(const Rect& rhs) const; // boolean operators // boolean operators const Region merge(const Region& rhs) const; const Region merge(const Region& rhs) const; const Region mergeExclusive(const Region& rhs) const; const Region intersect(const Region& rhs) const; const Region intersect(const Region& rhs) const; const Region subtract(const Region& rhs) const; const Region subtract(const Region& rhs) const; // these translate rhs first // these translate rhs first Region& translateSelf(int dx, int dy); Region& translateSelf(int dx, int dy); Region& orSelf(const Region& rhs, int dx, int dy); Region& orSelf(const Region& rhs, int dx, int dy); Region& xorSelf(const Region& rhs, int dx, int dy); Region& andSelf(const Region& rhs, int dx, int dy); Region& andSelf(const Region& rhs, int dx, int dy); Region& subtractSelf(const Region& rhs, int dx, int dy); Region& subtractSelf(const Region& rhs, int dx, int dy); // these translate rhs first // these translate rhs first const Region translate(int dx, int dy) const; const Region translate(int dx, int dy) const; const Region merge(const Region& rhs, int dx, int dy) const; const Region merge(const Region& rhs, int dx, int dy) const; const Region mergeExclusive(const Region& rhs, int dx, int dy) const; const Region intersect(const Region& rhs, int dx, int dy) const; const Region intersect(const Region& rhs, int dx, int dy) const; const Region subtract(const Region& rhs, int dx, int dy) const; const Region subtract(const Region& rhs, int dx, int dy) const; // convenience operators overloads // convenience operators overloads inline const Region operator | (const Region& rhs) const; inline const Region operator | (const Region& rhs) const; inline const Region operator ^ (const Region& rhs) const; inline const Region operator & (const Region& rhs) const; inline const Region operator & (const Region& rhs) const; inline const Region operator - (const Region& rhs) const; inline const Region operator - (const Region& rhs) const; inline const Region operator + (const Point& pt) const; inline const Region operator + (const Point& pt) const; inline Region& operator |= (const Region& rhs); inline Region& operator |= (const Region& rhs); inline Region& operator ^= (const Region& rhs); inline Region& operator &= (const Region& rhs); inline Region& operator &= (const Region& rhs); inline Region& operator -= (const Region& rhs); inline Region& operator -= (const Region& rhs); inline Region& operator += (const Point& pt); inline Region& operator += (const Point& pt); Loading Loading @@ -158,6 +166,9 @@ private: const Region Region::operator | (const Region& rhs) const { const Region Region::operator | (const Region& rhs) const { return merge(rhs); return merge(rhs); } } const Region Region::operator ^ (const Region& rhs) const { return mergeExclusive(rhs); } const Region Region::operator & (const Region& rhs) const { const Region Region::operator & (const Region& rhs) const { return intersect(rhs); return intersect(rhs); } } Loading @@ -172,6 +183,9 @@ const Region Region::operator + (const Point& pt) const { Region& Region::operator |= (const Region& rhs) { Region& Region::operator |= (const Region& rhs) { return orSelf(rhs); return orSelf(rhs); } } Region& Region::operator ^= (const Region& rhs) { return xorSelf(rhs); } Region& Region::operator &= (const Region& rhs) { Region& Region::operator &= (const Region& rhs) { return andSelf(rhs); return andSelf(rhs); } } Loading
libs/ui/Region.cpp +19 −0 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,9 @@ void Region::addRectUnchecked(int l, int t, int r, int b) Region& Region::orSelf(const Rect& r) { Region& Region::orSelf(const Rect& r) { return operationSelf(r, op_or); return operationSelf(r, op_or); } } Region& Region::xorSelf(const Rect& r) { return operationSelf(r, op_xor); } Region& Region::andSelf(const Rect& r) { Region& Region::andSelf(const Rect& r) { return operationSelf(r, op_and); return operationSelf(r, op_and); } } Loading @@ -143,6 +146,9 @@ Region& Region::operationSelf(const Rect& r, int op) { Region& Region::orSelf(const Region& rhs) { Region& Region::orSelf(const Region& rhs) { return operationSelf(rhs, op_or); return operationSelf(rhs, op_or); } } Region& Region::xorSelf(const Region& rhs) { return operationSelf(rhs, op_xor); } Region& Region::andSelf(const Region& rhs) { Region& Region::andSelf(const Region& rhs) { return operationSelf(rhs, op_and); return operationSelf(rhs, op_and); } } Loading @@ -165,6 +171,9 @@ Region& Region::translateSelf(int x, int y) { const Region Region::merge(const Rect& rhs) const { const Region Region::merge(const Rect& rhs) const { return operation(rhs, op_or); return operation(rhs, op_or); } } const Region Region::mergeExclusive(const Rect& rhs) const { return operation(rhs, op_xor); } const Region Region::intersect(const Rect& rhs) const { const Region Region::intersect(const Rect& rhs) const { return operation(rhs, op_and); return operation(rhs, op_and); } } Loading @@ -182,6 +191,9 @@ const Region Region::operation(const Rect& rhs, int op) const { const Region Region::merge(const Region& rhs) const { const Region Region::merge(const Region& rhs) const { return operation(rhs, op_or); return operation(rhs, op_or); } } const Region Region::mergeExclusive(const Region& rhs) const { return operation(rhs, op_xor); } const Region Region::intersect(const Region& rhs) const { const Region Region::intersect(const Region& rhs) const { return operation(rhs, op_and); return operation(rhs, op_and); } } Loading @@ -205,6 +217,9 @@ const Region Region::translate(int x, int y) const { Region& Region::orSelf(const Region& rhs, int dx, int dy) { Region& Region::orSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_or); return operationSelf(rhs, dx, dy, op_or); } } Region& Region::xorSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_xor); } Region& Region::andSelf(const Region& rhs, int dx, int dy) { Region& Region::andSelf(const Region& rhs, int dx, int dy) { return operationSelf(rhs, dx, dy, op_and); return operationSelf(rhs, dx, dy, op_and); } } Loading @@ -222,6 +237,9 @@ Region& Region::operationSelf(const Region& rhs, int dx, int dy, int op) { const Region Region::merge(const Region& rhs, int dx, int dy) const { const Region Region::merge(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_or); return operation(rhs, dx, dy, op_or); } } const Region Region::mergeExclusive(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_xor); } const Region Region::intersect(const Region& rhs, int dx, int dy) const { const Region Region::intersect(const Region& rhs, int dx, int dy) const { return operation(rhs, dx, dy, op_and); return operation(rhs, dx, dy, op_and); } } Loading Loading @@ -421,6 +439,7 @@ void Region::boolean_operation(int op, Region& dst, SkRegion::Op sk_op; SkRegion::Op sk_op; switch (op) { switch (op) { case op_or: sk_op = SkRegion::kUnion_Op; name="OR"; break; case op_or: sk_op = SkRegion::kUnion_Op; name="OR"; break; case op_xor: sk_op = SkRegion::kUnion_XOR; name="XOR"; break; case op_and: sk_op = SkRegion::kIntersect_Op; name="AND"; break; case op_and: sk_op = SkRegion::kIntersect_Op; name="AND"; break; case op_nand: sk_op = SkRegion::kDifference_Op; name="NAND"; break; case op_nand: sk_op = SkRegion::kDifference_Op; name="NAND"; break; } } Loading