Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1347)

Unified Diff: services/ui/view_manager/view_registry.cc

Issue 1774393002: Mozart: Add ViewInspector contracts for hit testing. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-5
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/view_manager/view_registry.h ('k') | services/ui/view_manager/view_tree_state.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/view_manager/view_registry.cc
diff --git a/services/ui/view_manager/view_registry.cc b/services/ui/view_manager/view_registry.cc
index 578869a8df9a906b644bb8f0e352744cc0d3758d..d0fb966829c5cb08137a7668b4f2b2db52771679 100644
--- a/services/ui/view_manager/view_registry.cc
+++ b/services/ui/view_manager/view_registry.cc
@@ -67,7 +67,7 @@ void ViewRegistry::CreateView(
view_state->BindOwner(view_owner_request.Pass());
// Add to registry and return token.
- views_by_token_.insert({view_state->view_token()->value, view_state});
+ views_by_token_.emplace(view_state->view_token()->value, view_state);
DVLOG(1) << "CreateView: view=" << view_state;
}
@@ -93,6 +93,8 @@ void ViewRegistry::UnregisterView(ViewState* view_state) {
UnregisterViewStub(std::move(child));
// Remove from registry.
+ if (view_state->scene_token())
+ views_by_scene_token_.erase(view_state->scene_token()->value);
views_by_token_.erase(view_state->view_token()->value);
delete view_state;
}
@@ -117,8 +119,8 @@ void ViewRegistry::CreateViewTree(
view_tree_listener.Pass(), sanitized_label);
// Add to registry.
- view_trees_by_token_.insert(
- {tree_state->view_tree_token()->value, tree_state});
+ view_trees_by_token_.emplace(tree_state->view_tree_token()->value,
+ tree_state);
DVLOG(1) << "CreateViewTree: tree=" << tree_state;
}
@@ -164,6 +166,10 @@ void ViewRegistry::OnSceneCreated(
if (view_state) {
DVLOG(1) << "OnSceneCreated: scene_token=" << scene_token;
+ if (view_state->scene_token())
+ views_by_scene_token_.erase(view_state->scene_token()->value);
+ views_by_scene_token_.emplace(scene_token->value, view_state);
+
view_state->set_scene_token(scene_token.Pass());
view_state->set_scene_changed_since_last_report(true);
InvalidateLayout(view_state);
@@ -289,7 +295,7 @@ void ViewRegistry::SetRenderer(ViewTreeState* tree_state,
base::Unretained(tree_state)));
}
- tree_state->set_renderer(renderer.Pass());
+ tree_state->SetRenderer(renderer.Pass());
UpdateViewTreeRootScene(tree_state);
}
@@ -397,6 +403,46 @@ void ViewRegistry::ConnectToViewTreeService(
client_handle.Pass());
}
+void ViewRegistry::GetHitTester(
+ mojo::ui::ViewTreeTokenPtr view_tree_token,
+ mojo::InterfaceRequest<mojo::gfx::composition::HitTester>
+ hit_tester_request,
+ const GetHitTesterCallback& callback) {
+ DCHECK(view_tree_token);
+ DCHECK(hit_tester_request.is_pending());
+ DVLOG(1) << "GetHitTester: tree=" << view_tree_token;
+
+ ViewTreeState* view_tree = FindViewTree(view_tree_token->value);
+ if (!view_tree) {
+ callback.Run(false);
+ return;
+ }
+
+ view_tree->RequestHitTester(hit_tester_request.Pass(), callback);
+}
+
+void ViewRegistry::ResolveScenes(
+ mojo::Array<mojo::gfx::composition::SceneTokenPtr> scene_tokens,
+ const ResolveScenesCallback& callback) {
+ DCHECK(scene_tokens);
+
+ mojo::Array<mojo::ui::ViewTokenPtr> result;
+ result.resize(scene_tokens.size());
+
+ size_t index = 0;
+ for (const auto& scene_token : scene_tokens.storage()) {
+ DCHECK(scene_token);
+ auto it = views_by_scene_token_.find(scene_token->value);
+ if (it != views_by_scene_token_.end())
+ result[index] = it->second->view_token()->Clone();
+ index++;
+ }
+
+ DVLOG(1) << "ResolveScenes: scene_tokens=" << scene_tokens
+ << ", result=" << result;
+ callback.Run(result.Pass());
+}
+
ViewState* ViewRegistry::FindView(uint32_t view_token_value) {
auto it = views_by_token_.find(view_token_value);
return it != views_by_token_.end() ? it->second : nullptr;
@@ -734,7 +780,7 @@ void ViewRegistry::OnRendererDied(ViewTreeState* tree_state) {
DCHECK(IsViewTreeStateRegisteredDebug(tree_state));
DVLOG(1) << "UpdateViewTreeRootScene: tree_state=" << tree_state;
- tree_state->set_renderer(nullptr);
+ tree_state->SetRenderer(nullptr);
SendRendererDied(tree_state);
}
« no previous file with comments | « services/ui/view_manager/view_registry.h ('k') | services/ui/view_manager/view_tree_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698