// 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.

#include "ui/events/ozone/layout/layout_util.h"

#include "ui/events/event_constants.h"
#include "ui/events/keycodes/dom/dom_key.h"

namespace ui {

int ModifierDomKeyToEventFlag(DomKey key) {
  switch (key) {
    case DomKey::ALT:
      return EF_ALT_DOWN;
    case DomKey::ALT_GRAPH:
      return EF_ALTGR_DOWN;
    // ChromeOS uses F16 to represent CapsLock before the rewriting stage,
    // based on the historical X11 implementation.
    // TODO post-X11: Switch to use CapsLock uniformly.
    case DomKey::F16:
    case DomKey::CAPS_LOCK:
      return EF_CAPS_LOCK_DOWN;
    case DomKey::CONTROL:
      return EF_CONTROL_DOWN;
    case DomKey::META:
      return EF_ALT_DOWN;
    case DomKey::OS:
      return EF_COMMAND_DOWN;
    case DomKey::SHIFT:
      return EF_SHIFT_DOWN;
    case DomKey::SHIFT_LEVEL5:
      return EF_MOD3_DOWN;
    default:
      return EF_NONE;
  }
  // Not represented:
  //   DomKey::ACCEL
  //   DomKey::FN
  //   DomKey::FN_LOCK
  //   DomKey::HYPER
  //   DomKey::NUM_LOCK
  //   DomKey::SCROLL_LOCK
  //   DomKey::SUPER
  //   DomKey::SYMBOL_LOCK
}

}  // namespace ui
