Index: ui/android/view_android.cc |
diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eba043b354f1ade2cd633f7e2bc9d396dbbdde9e |
--- /dev/null |
+++ b/ui/android/view_android.cc |
@@ -0,0 +1,84 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/android/view_android.h" |
+ |
+#include <algorithm> |
+ |
+#include "base/android/jni_android.h" |
+#include "cc/layers/layer.h" |
+ |
+namespace ui { |
+ |
+using base::android::AttachCurrentThread; |
+using base::android::JavaRef; |
+using base::android::ScopedJavaLocalRef; |
+ |
+ViewAndroid::ViewAndroid(const JavaRef<jobject>& delegate, |
Yusuf
2016/07/08 16:35:05
I feel like we need a comment paragraph somewhere
no sievers
2016/07/08 18:29:04
I'm guessing it needs to evolve a bit but I can pu
no sievers
2016/07/08 19:22:10
Done.
|
+ WindowAndroid* root_window) |
+ : parent_(nullptr), window_(root_window), delegate_(delegate) {} |
+ |
+ViewAndroid::ViewAndroid() : parent_(nullptr), window_(nullptr) {} |
+ |
+ViewAndroid::~ViewAndroid() { |
+ if (parent_) |
+ parent_->RemoveChild(this); |
+ |
+ for (std::list<ViewAndroid*>::iterator it = children_.begin(); |
+ it != children_.end(); it++) { |
+ DCHECK_EQ((*it)->parent_, this); |
+ (*it)->parent_ = nullptr; |
+ } |
+} |
+ |
+void ViewAndroid::AddChild(ViewAndroid* child) { |
Yusuf
2016/07/08 16:35:05
these(parent_ being accessible this much) worry me
no sievers
2016/07/08 18:29:04
Good point. We could check that a child being adde
no sievers
2016/07/08 19:22:10
Done.
Yusuf
2016/07/08 23:06:00
I would say yes it would make sense for WindowAndr
|
+ DCHECK(child); |
+ DCHECK(std::find(children_.begin(), children_.end(), child) == |
+ children_.end()); |
+ |
+ children_.push_back(child); |
+ if (child->parent_) |
+ parent_->RemoveChild(child); |
+ child->parent_ = this; |
+} |
+ |
+void ViewAndroid::RemoveChild(ViewAndroid* child) { |
+ DCHECK(child); |
+ DCHECK_EQ(child->parent_, this); |
+ |
+ std::list<ViewAndroid*>::iterator it = |
+ std::find(children_.begin(), children_.end(), child); |
+ DCHECK(it != children_.end()); |
+ children_.erase(it); |
+ child->parent_ = nullptr; |
+} |
+ |
+WindowAndroid* ViewAndroid::GetWindowAndroid() const { |
+ if (window_) |
+ return window_; |
+ |
+ return parent_ ? parent_->GetWindowAndroid() : nullptr; |
+} |
+ |
+void ViewAndroid::SetWindowAndroid(WindowAndroid* root_window) { |
+ window_ = root_window; |
+} |
+ |
+const JavaRef<jobject>& ViewAndroid::GetViewAndroidDelegate() |
+ const { |
+ if (!delegate_.is_null()) |
+ return delegate_; |
+ |
+ return parent_ ? parent_->GetViewAndroidDelegate() : delegate_; |
+} |
+ |
+cc::Layer* ViewAndroid::GetLayer() const { |
+ return layer_.get(); |
+} |
+ |
+void ViewAndroid::SetLayer(scoped_refptr<cc::Layer> layer) { |
+ layer_ = layer; |
+} |
+ |
+} // namespace ui |