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

Unified Diff: components/mus/ws/event_dispatcher.h

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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/ws/display_unittest.cc ('k') | components/mus/ws/event_dispatcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/event_dispatcher.h
diff --git a/components/mus/ws/event_dispatcher.h b/components/mus/ws/event_dispatcher.h
deleted file mode 100644
index a617807398187ae367220ed1d17f95af883ff12e..0000000000000000000000000000000000000000
--- a/components/mus/ws/event_dispatcher.h
+++ /dev/null
@@ -1,236 +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.
-
-#ifndef COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_
-#define COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <utility>
-
-#include "base/macros.h"
-#include "components/mus/common/types.h"
-#include "components/mus/public/interfaces/event_matcher.mojom.h"
-#include "components/mus/ws/modal_window_controller.h"
-#include "components/mus/ws/server_window_observer.h"
-#include "ui/gfx/geometry/rect_f.h"
-
-namespace ui {
-class Event;
-class KeyEvent;
-class LocatedEvent;
-}
-
-namespace mus {
-namespace ws {
-
-class Accelerator;
-class EventDispatcherDelegate;
-class ServerWindow;
-
-namespace test {
-class EventDispatcherTestApi;
-}
-
-// Handles dispatching events to the right location as well as updating focus.
-class EventDispatcher : public ServerWindowObserver {
- public:
- explicit EventDispatcher(EventDispatcherDelegate* delegate);
- ~EventDispatcher() override;
-
- // Cancels capture and stops tracking any pointer events. This does not send
- // any events to the delegate.
- void Reset();
-
- void SetMousePointerScreenLocation(const gfx::Point& screen_location);
- const gfx::Point& mouse_pointer_last_location() const {
- return mouse_pointer_last_location_;
- }
-
- // If we still have the window of the last mouse move, returns true and sets
- // the current cursor to use to |cursor_out|.
- bool GetCurrentMouseCursor(int32_t* cursor_out);
-
- // |capture_window_| will receive all input. See window_tree.mojom for
- // details.
- ServerWindow* capture_window() { return capture_window_; }
- const ServerWindow* capture_window() const { return capture_window_; }
- // Setting capture can fail if the window is blocked by a modal window
- // (indicated by returning |false|).
- bool SetCaptureWindow(ServerWindow* capture_window,
- ClientSpecificId client_id);
-
- // Id of the client that capture events are sent to.
- ClientSpecificId capture_window_client_id() const {
- return capture_window_client_id_;
- }
-
- // Adds a system modal window. The window remains modal to system until it is
- // destroyed. There can exist multiple system modal windows, in which case the
- // one that is visible and added most recently or shown most recently would be
- // the active one.
- void AddSystemModalWindow(ServerWindow* window);
-
- // Checks if |modal_window| is a visible modal window that blocks current
- // capture window and if that's the case, releases the capture.
- void ReleaseCaptureBlockedByModalWindow(const ServerWindow* modal_window);
-
- // Checks if the current capture window is blocked by any visible modal window
- // and if that's the case, releases the capture.
- void ReleaseCaptureBlockedByAnyModalWindow();
-
- // Retrieves the ServerWindow of the last mouse move.
- ServerWindow* mouse_cursor_source_window() const {
- return mouse_cursor_source_window_;
- }
-
- // If the mouse cursor is still over |mouse_cursor_source_window_|, updates
- // whether we are in the non-client area. Used when
- // |mouse_cursor_source_window_| has changed its properties.
- void UpdateNonClientAreaForCurrentWindow();
-
- // Possibly updates the cursor. If we aren't in an implicit capture, we take
- // the last known location of the mouse pointer, and look for the
- // ServerWindow* under it.
- void UpdateCursorProviderByLastKnownLocation();
-
- // Adds an accelerator with the given id and event-matcher. If an accelerator
- // already exists with the same id or the same matcher, then the accelerator
- // is not added. Returns whether adding the accelerator was successful or not.
- bool AddAccelerator(uint32_t id, mojom::EventMatcherPtr event_matcher);
- void RemoveAccelerator(uint32_t id);
-
- // Processes the supplied event, informing the delegate as approriate. This
- // may result in generating any number of events.
- void ProcessEvent(const ui::Event& event);
-
- private:
- friend class test::EventDispatcherTestApi;
-
- // Keeps track of state associated with an active pointer.
- struct PointerTarget {
- PointerTarget()
- : window(nullptr),
- is_mouse_event(false),
- in_nonclient_area(false),
- is_pointer_down(false) {}
-
- // NOTE: this is set to null if the window is destroyed before a
- // corresponding release/cancel.
- ServerWindow* window;
-
- bool is_mouse_event;
-
- // Did the pointer event start in the non-client area.
- bool in_nonclient_area;
-
- bool is_pointer_down;
- };
-
- void ProcessKeyEvent(const ui::KeyEvent& event);
-
- bool IsTrackingPointer(int32_t pointer_id) const {
- return pointer_targets_.count(pointer_id) > 0;
- }
-
- // EventDispatcher provides the following logic for pointer events:
- // . wheel events go to the current target of the associated pointer. If
- // there is no target, they go to the deepest window.
- // . move (not drag) events go to the deepest window.
- // . when a pointer goes down all events until the corresponding up or
- // cancel go to the deepest target. For mouse events the up only occurs
- // when no buttons on the mouse are down.
- // This also generates exit events as appropriate. For example, if the mouse
- // moves between one window to another an exit is generated on the first.
- void ProcessLocatedEvent(const ui::LocatedEvent& event);
-
- // Adds |pointer_target| to |pointer_targets_|.
- void StartTrackingPointer(int32_t pointer_id,
- const PointerTarget& pointer_target);
-
- // Removes a PointerTarget from |pointer_targets_|.
- void StopTrackingPointer(int32_t pointer_id);
-
- // Starts tracking the pointer for |event|, or if already tracking the
- // pointer sends the appropriate event to the delegate and updates the
- // currently tracked PointerTarget appropriately.
- void UpdateTargetForPointer(int32_t pointer_id,
- const ui::LocatedEvent& event);
-
- // Returns a PointerTarget from the supplied event.
- PointerTarget PointerTargetForEvent(const ui::LocatedEvent& event);
-
- // Returns true if any pointers are in the pressed/down state.
- bool AreAnyPointersDown() const;
-
- // If |target->window| is valid, then passes the event to the delegate.
- void DispatchToPointerTarget(const PointerTarget& target,
- const ui::LocatedEvent& event);
-
- // Dispatch |event| to the delegate.
- void DispatchToClient(ServerWindow* window,
- ClientSpecificId client_id,
- const ui::LocatedEvent& event);
-
- // Stops sending pointer events to |window|. This does not remove the entry
- // for |window| from |pointer_targets_|, rather it nulls out the window. This
- // way we continue to eat events until the up/cancel is received.
- void CancelPointerEventsToTarget(ServerWindow* window);
-
- // Used to observe a window. Can be called multiple times on a window. To
- // unobserve a window, UnobserveWindow() should be called the same number of
- // times.
- void ObserveWindow(ServerWindow* winodw);
- void UnobserveWindow(ServerWindow* winodw);
-
- // Returns an Accelerator bound to the specified code/flags, and of the
- // matching |phase|. Otherwise returns null.
- Accelerator* FindAccelerator(const ui::KeyEvent& event,
- const ui::mojom::AcceleratorPhase phase);
-
- ServerWindow* FindDeepestVisibleWindowForEvents(gfx::Point* location);
-
- // ServerWindowObserver:
- void OnWillChangeWindowHierarchy(ServerWindow* window,
- ServerWindow* new_parent,
- ServerWindow* old_parent) override;
- void OnWindowVisibilityChanged(ServerWindow* window) override;
- void OnWindowDestroyed(ServerWindow* window) override;
-
- EventDispatcherDelegate* delegate_;
-
- ServerWindow* capture_window_;
- ClientSpecificId capture_window_client_id_;
-
- ModalWindowController modal_window_controller_;
-
- bool mouse_button_down_;
- ServerWindow* mouse_cursor_source_window_;
- bool mouse_cursor_in_non_client_area_;
-
- // The on screen location of the mouse pointer. This can be outside the
- // bounds of |mouse_cursor_source_window_|, which can capture the cursor.
- gfx::Point mouse_pointer_last_location_;
-
- std::map<uint32_t, std::unique_ptr<Accelerator>> accelerators_;
-
- using PointerIdToTargetMap = std::map<int32_t, PointerTarget>;
- // |pointer_targets_| contains the active pointers. For a mouse based pointer
- // a PointerTarget is always active (and present in |pointer_targets_|). For
- // touch based pointers the pointer is active while down and removed on
- // cancel or up.
- PointerIdToTargetMap pointer_targets_;
-
- // Keeps track of number of observe requests for each observed window.
- std::map<const ServerWindow*, uint8_t> observed_windows_;
-
- DISALLOW_COPY_AND_ASSIGN(EventDispatcher);
-};
-
-} // namespace ws
-} // namespace mus
-
-#endif // COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_
« no previous file with comments | « components/mus/ws/display_unittest.cc ('k') | components/mus/ws/event_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698