0

cc: Expose clear and swap on Region

R=danakj@chromium.org
BUG=none


Review URL: https://chromiumcodereview.appspot.com/11368156

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166866 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
enne@chromium.org
2012-11-09 06:45:06 +00:00
parent 59ee69540f
commit cd94acd119
5 changed files with 59 additions and 16 deletions

@ -1632,7 +1632,7 @@ public:
virtual bool drawsContent() const OVERRIDE { return true; }
const Region& occludedScreenSpace() const { return m_occludedScreenSpace; }
void clearOccludedScreenSpace() { m_occludedScreenSpace = Region(); }
void clearOccludedScreenSpace() { m_occludedScreenSpace.Clear(); }
private:
TestLayer() : Layer() { }

@ -111,13 +111,13 @@ void OcclusionTrackerBase<LayerType, RenderSurfaceType>::finishedRenderTarget(co
// TODO(senorblanco): Make this smarter for SkImageFilter case: once
// SkImageFilters can report affectsOpacity(), call that.
if (finishedTarget->maskLayer() || !surfaceOpacityKnown(surface) || surface->drawOpacity() < 1 || finishedTarget->filters().hasFilterThatAffectsOpacity() || finishedTarget->filter()) {
m_stack.back().occlusionInScreen = Region();
m_stack.back().occlusionInTarget = Region();
m_stack.back().occlusionInScreen.Clear();
m_stack.back().occlusionInTarget.Clear();
} else {
if (!surfaceTransformsToTargetKnown(surface))
m_stack.back().occlusionInTarget = Region();
m_stack.back().occlusionInTarget.Clear();
if (!surfaceTransformsToScreenKnown(surface))
m_stack.back().occlusionInScreen = Region();
m_stack.back().occlusionInScreen.Clear();
}
}

@ -38,6 +38,14 @@ const Region& Region::operator=(const Region& region) {
return *this;
}
void Region::Swap(Region& region) {
region.skregion_.swap(skregion_);
}
void Region::Clear() {
skregion_.setEmpty();
}
bool Region::IsEmpty() const {
return skregion_.isEmpty();
}

@ -24,6 +24,8 @@ class CC_EXPORT Region {
const Region& operator=(gfx::Rect rect);
const Region& operator=(const Region& region);
void Swap(Region& region);
void Clear();
bool IsEmpty() const;
bool Contains(gfx::Point point) const;

@ -297,54 +297,54 @@ TEST(RegionTest, ContainsRegion) {
container.Union(gfx::Rect(0, 20, 41, 20));
TEST_CONTAINS(container, gfx::Rect(5, 5, 30, 30));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 10, 10));
container.Union(gfx::Rect(0, 30, 10, 10));
container.Union(gfx::Rect(30, 30, 10, 10));
container.Union(gfx::Rect(30, 0, 10, 10));
TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 10, 10));
container.Union(gfx::Rect(0, 30, 10, 10));
container.Union(gfx::Rect(30, 0, 10, 40));
TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30));
container = Region();
container.Clear();
container.Union(gfx::Rect(30, 0, 10, 10));
container.Union(gfx::Rect(30, 30, 10, 10));
container.Union(gfx::Rect(0, 0, 10, 40));
TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 10, 40));
container.Union(gfx::Rect(30, 0, 10, 40));
TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 40, 40));
TEST_NO_CONTAINS(container, gfx::Rect(10, -1, 20, 10));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 40, 40));
TEST_NO_CONTAINS(container, gfx::Rect(10, 31, 20, 10));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 40, 20));
container.Union(gfx::Rect(0, 20, 41, 20));
TEST_NO_CONTAINS(container, gfx::Rect(-1, 10, 10, 20));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 40, 20));
container.Union(gfx::Rect(0, 20, 41, 20));
TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 40, 40));
container.Subtract(gfx::Rect(0, 20, 60, 0));
TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20));
container = Region();
container.Clear();
container.Union(gfx::Rect(0, 0, 60, 20));
container.Union(gfx::Rect(30, 20, 10, 20));
TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39));
@ -357,7 +357,7 @@ TEST(RegionTest, ContainsRegion) {
TEST_NO_CONTAINS(container, gfx::Rect(50, 0, 10, 40));
TEST_NO_CONTAINS(container, gfx::Rect(51, 0, 10, 41));
container = Region();
container.Clear();
container.Union(gfx::Rect(30, 0, 10, 20));
container.Union(gfx::Rect(0, 20, 60, 20));
TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39));
@ -420,4 +420,37 @@ TEST(RegionTest, IsEmpty) {
EXPECT_FALSE(SkIRect::MakeXYWH(0, 0, 2, 2).isEmpty());
}
TEST(RegionTest, Clear) {
Region r;
r = gfx::Rect(0, 0, 50, 50);
EXPECT_FALSE(r.IsEmpty());
r.Clear();
EXPECT_TRUE(r.IsEmpty());
r = gfx::Rect(0, 0, 50, 50);
r.Union(gfx::Rect(100, 0, 50, 50));
r.Union(gfx::Rect(0, 0, 500, 500));
EXPECT_FALSE(r.IsEmpty());
r.Clear();
EXPECT_TRUE(r.IsEmpty());
}
TEST(RegionSwap, Swap) {
Region r1, r2, r3;
r1 = gfx::Rect(0, 0, 50, 50);
r1.Swap(r2);
EXPECT_TRUE(r1.IsEmpty());
EXPECT_EQ(r2.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString());
r1 = gfx::Rect(0, 0, 50, 50);
r1.Union(gfx::Rect(100, 0, 50, 50));
r1.Union(gfx::Rect(0, 0, 500, 500));
r3 = r1;
r1.Swap(r2);
EXPECT_EQ(r1.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString());
EXPECT_EQ(r2.ToString(), r3.ToString());
}
} // namespace