blob: e418dd56b6ab6f7cc8a3aa7eeaf0ca4f8bc57bc7 [file] [log] [blame]
// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_INPUT_KEY_EVENT_HANDLER_H_
#define COBALT_INPUT_KEY_EVENT_HANDLER_H_
#include "base/callback.h"
#include "cobalt/base/token.h"
#include "cobalt/dom/keyboard_event_init.h"
namespace cobalt {
namespace input {
typedef base::Callback<void(base::Token type, const dom::KeyboardEventInit&)>
KeyboardEventCallback;
// Base class for objects that can process keyboard events.
// This includes input device manangers and key event filters.
// Objects of this class can either handle the key event directly using the
// callback provided at construction, or pass the event on to a filter.
// This allows filters to be chained together to implement the combined
// functionality of multiple filters.
class KeyEventHandler {
public:
// Called to handle a key event. The base class implementation just calls
// DispatchKeyboardEvent. Overridden versions of this function may modify the
// incoming event and/or generate new events. Overriden versions should call
// DispatchKeyboardEvent for each event filtered/produced.
virtual void HandleKeyboardEvent(base::Token type,
const dom::KeyboardEventInit& event);
protected:
explicit KeyEventHandler(const KeyboardEventCallback& callback);
explicit KeyEventHandler(KeyEventHandler* filter);
virtual ~KeyEventHandler() {}
// Called to dispatch a key event. The event will either be sent to the key
// event filter attached to this object or passed directly to the stored
// callback function if there is no attached filter.
void DispatchKeyboardEvent(base::Token type,
const dom::KeyboardEventInit& event) const;
private:
// The event callback should not be called directly by subclasses.
// Instead, use the HandleKeyboardEvent function, which may do further
// processing, and/or pass the event on to the attached filter.
KeyboardEventCallback keyboard_event_callback_;
// Another KeyEventHandler object to filter the key events processed by
// this object. If not defined (NULL), then the keyboard event callback is
// called directly. The pointer is used as a NULLable reference - this class
// has no ownership of the filter object.
KeyEventHandler* keyboard_event_filter_;
};
} // namespace input
} // namespace cobalt
#endif // COBALT_INPUT_KEY_EVENT_HANDLER_H_