// Copyright 2014 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 UI_EVENTS_OZONE_EVDEV_MOUSE_BUTTON_MAP_EVDEV_H_
#define UI_EVENTS_OZONE_EVDEV_MOUSE_BUTTON_MAP_EVDEV_H_

#include <map>

#include "base/basictypes.h"
#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"

namespace ui {

// Mouse button map for Evdev.
//
// Chrome relies on the underlying OS to interpret mouse buttons. The Linux
// input subsystem does not assign any special meaning to these keys, so
// this work must happen at a higher layer (normally X11 or the console driver).
// When using evdev directly, we must do it ourselves.
//
// The mouse button map is shared between all input devices connected to the
// system.
class EVENTS_OZONE_EVDEV_EXPORT MouseButtonMapEvdev {
 public:
  typedef uint32_t Button;
  typedef std::map<uint32_t, uint32_t> ButtonMap;

  MouseButtonMapEvdev();
  ~MouseButtonMapEvdev();

  // Set mapping for one button.
  void UpdateButtonMap(Button button_from, Button button_to);

  // Reset the button map to the system default.
  void ResetButtonMap();

  // Return the mapped button.
  int GetMappedButton(const Button button) const;

  // Return current button map to use for incoming events.
  const ButtonMap& button_map() { return button_map_; }

 private:
  // Mouse button map.
  ButtonMap button_map_;

  DISALLOW_COPY_AND_ASSIGN(MouseButtonMapEvdev);
};

}  // namspace ui

#endif  // UI_EVENTS_OZONE_EVDEV_MOUSE_BUTTON_MAP_EVDEV_H_
