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

Unified Diff: components/mus/event_dispatcher.cc

Issue 1377493002: mus: move View Manager to components/mus/vm (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 3 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 | « components/mus/event_dispatcher.h ('k') | components/mus/focus_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/event_dispatcher.cc
diff --git a/components/mus/event_dispatcher.cc b/components/mus/event_dispatcher.cc
deleted file mode 100644
index 44917718ac61879393859b74bb12c15c2b93c3ab..0000000000000000000000000000000000000000
--- a/components/mus/event_dispatcher.cc
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2015 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 "components/mus/event_dispatcher.h"
-
-#include "cc/surfaces/surface_id.h"
-#include "components/mus/connection_manager.h"
-#include "components/mus/server_view.h"
-#include "components/mus/server_view_delegate.h"
-#include "components/mus/surfaces/surfaces_state.h"
-#include "components/mus/view_coordinate_conversions.h"
-#include "components/mus/view_tree_host_impl.h"
-#include "ui/gfx/geometry/point.h"
-#include "ui/gfx/geometry/point_f.h"
-
-namespace mus {
-
-EventDispatcher::EventDispatcher(ViewTreeHostImpl* view_tree_host)
- : view_tree_host_(view_tree_host) {}
-
-EventDispatcher::~EventDispatcher() {}
-
-void EventDispatcher::AddAccelerator(uint32_t id,
- mojo::KeyboardCode keyboard_code,
- mojo::EventFlags flags) {
-#if !defined(NDEBUG)
- for (const auto& pair : accelerators_) {
- DCHECK(pair.first != id);
- DCHECK(pair.second.keyboard_code != keyboard_code ||
- pair.second.flags != flags);
- }
-#endif
- accelerators_.insert(Entry(id, Accelerator(keyboard_code, flags)));
-}
-
-void EventDispatcher::RemoveAccelerator(uint32_t id) {
- auto it = accelerators_.find(id);
- DCHECK(it != accelerators_.end());
- accelerators_.erase(it);
-}
-
-void EventDispatcher::OnEvent(mojo::EventPtr event) {
- if (event->action == mojo::EVENT_TYPE_KEY_PRESSED &&
- !event->key_data->is_char) {
- uint32_t accelerator = 0u;
- if (FindAccelerator(*event, &accelerator)) {
- view_tree_host_->OnAccelerator(accelerator, event.Pass());
- return;
- }
- }
-
- ServerView* target = FindEventTarget(event.get());
- if (target) {
- // Update focus on pointer-down.
- if (event->action == mojo::EVENT_TYPE_POINTER_DOWN)
- view_tree_host_->SetFocusedView(target);
- view_tree_host_->DispatchInputEventToView(target, event.Pass());
- }
-}
-
-bool EventDispatcher::FindAccelerator(const mojo::Event& event,
- uint32_t* accelerator_id) {
- DCHECK(event.key_data);
- for (const auto& pair : accelerators_) {
- if (pair.second.keyboard_code == event.key_data->windows_key_code &&
- pair.second.flags == event.flags) {
- *accelerator_id = pair.first;
- return true;
- }
- }
- return false;
-}
-
-ServerView* EventDispatcher::FindEventTarget(mojo::Event* event) {
- ServerView* focused_view = view_tree_host_->GetFocusedView();
- if (event->key_data)
- return focused_view;
-
- DCHECK(event->pointer_data || event->wheel_data) << "Unknown event type: "
- << event->action;
-
- mojo::LocationData* event_location = nullptr;
- if (event->pointer_data)
- event_location = event->pointer_data->location.get();
- else if (event->wheel_data)
- event_location = event->wheel_data->location.get();
- DCHECK(event_location);
- gfx::Point location(static_cast<int>(event_location->x),
- static_cast<int>(event_location->y));
- ServerView* target = focused_view;
- ServerView* root = view_tree_host_->root_view();
- if (event->action == mojo::EVENT_TYPE_POINTER_DOWN || !target ||
- !root->Contains(target)) {
- target = FindDeepestVisibleViewFromSurface(&location);
- // Surface-based hit-testing will not return a valid target if no
- // compositor-frame have been submitted (e.g. in unit-tests).
- if (!target)
- target = FindDeepestVisibleView(root, &location);
- CHECK(target);
- } else {
- gfx::Point old_point = location;
- location = ConvertPointBetweenViews(root, target, location);
- }
-
- event_location->x = location.x();
- event_location->y = location.y();
- return target;
-}
-
-ServerView* EventDispatcher::FindDeepestVisibleView(ServerView* view,
- gfx::Point* location) {
- for (ServerView* child : view->GetChildren()) {
- if (!child->visible())
- continue;
-
- // TODO(sky): support transform.
- gfx::Point child_location(location->x() - child->bounds().x(),
- location->y() - child->bounds().y());
- if (child_location.x() >= 0 && child_location.y() >= 0 &&
- child_location.x() < child->bounds().width() &&
- child_location.y() < child->bounds().height()) {
- *location = child_location;
- return FindDeepestVisibleView(child, location);
- }
- }
- return view;
-}
-
-ServerView* EventDispatcher::FindDeepestVisibleViewFromSurface(
- gfx::Point* location) {
- if (view_tree_host_->surface_id().is_null())
- return nullptr;
-
- gfx::Transform transform_to_target_surface;
- cc::SurfaceId target_surface =
- view_tree_host_->root_view()->delegate()
- ->GetSurfacesState()
- ->hit_tester()
- ->GetTargetSurfaceAtPoint(view_tree_host_->surface_id(), *location,
- &transform_to_target_surface);
- ViewId id = ViewIdFromTransportId(
- cc::SurfaceIdAllocator::NamespaceForId(target_surface));
- ServerView* target = view_tree_host_->connection_manager()->GetView(id);
- // TODO(fsamuel): This should be a DCHECK but currently we use stale
- // information to decide where to route input events. This should be fixed
- // once we implement a UI scheduler.
- if (target) {
- transform_to_target_surface.TransformPoint(location);
- return target;
- }
- return nullptr;
-}
-
-} // namespace mus
« no previous file with comments | « components/mus/event_dispatcher.h ('k') | components/mus/focus_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698