text: // Copyright (c) 2013 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/events_ozone.h"
  
  #include "ui/events/event.h"
  #include "ui/events/event_constants.h"
  #include "ui/events/event_utils.h"
  
  namespace ui {
  
  void UpdateDeviceList() { NOTIMPLEMENTED(); }
  
  base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
    const ui::Event* event = static_cast<const ui::Event*>(native_event);
    return event->time_stamp();
  }
  
  int EventFlagsFromNative(const base::NativeEvent& native_event) {
    const ui::Event* event = static_cast<const ui::Event*>(native_event);
    return event->flags();
  }
  
  EventType EventTypeFromNative(const base::NativeEvent& native_event) {
    const ui::Event* event = static_cast<const ui::Event*>(native_event);
    return event->type();
  }
  
  gfx::Point EventSystemLocationFromNative(
      const base::NativeEvent& native_event) {
    const ui::LocatedEvent* e =
        static_cast<const ui::LocatedEvent*>(native_event);
    DCHECK(e->IsMouseEvent() || e->IsTouchEvent() || e->IsGestureEvent() ||
           e->IsScrollEvent());
    return e->location();
  }
  
  gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) {
    return EventSystemLocationFromNative(native_event);
  }
  
  int GetChangedMouseButtonFlagsFromNative(
      const base::NativeEvent& native_event) {
    const ui::MouseEvent* event =
        static_cast<const ui::MouseEvent*>(native_event);
    DCHECK(event->IsMouseEvent() || event->IsScrollEvent());
    return event->changed_button_flags();
  }
  
  KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
    const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event);
    DCHECK(event->IsKeyEvent());
    return event->key_code();
  }
  
  DomCode CodeFromNative(const base::NativeEvent& native_event) {
    const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event);
    DCHECK(event->IsKeyEvent());
    return event->code();
  }
  
  uint32 PlatformKeycodeFromNative(const base::NativeEvent& native_event) {
    const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event);
    DCHECK(event->IsKeyEvent());
    return event->platform_keycode();
  }
  
  bool IsCharFromNative(const base::NativeEvent& native_event) {
    const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event);
    DCHECK(event->IsKeyEvent());
    return event->is_char();
  }
  
  gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) {
    const ui::MouseWheelEvent* event =
        static_cast<const ui::MouseWheelEvent*>(native_event);
    DCHECK(event->type() == ET_MOUSEWHEEL);
    return event->offset();
  }
  
  base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
    return NULL;
  }
  
  void ReleaseCopiedNativeEvent(const base::NativeEvent& event) {
  }
  
  void ClearTouchIdIfReleased(const base::NativeEvent& xev) {
  }
  
  int GetTouchId(const base::NativeEvent& native_event) {
    const ui::TouchEvent* event =
        static_cast<const ui::TouchEvent*>(native_event);
    DCHECK(event->IsTouchEvent());
    return event->touch_id();
  }
  
  float GetTouchRadiusX(const base::NativeEvent& native_event) {
    const ui::TouchEvent* event =
        static_cast<const ui::TouchEvent*>(native_event);
    DCHECK(event->IsTouchEvent());
    return event->radius_x();
  }
  
  float GetTouchRadiusY(const base::NativeEvent& native_event) {
    const ui::TouchEvent* event =
        static_cast<const ui::TouchEvent*>(native_event);
    DCHECK(event->IsTouchEvent());
    return event->radius_y();
  }
  
  float GetTouchAngle(const base::NativeEvent& native_event) {
    const ui::TouchEvent* event =
        static_cast<const ui::TouchEvent*>(native_event);
    DCHECK(event->IsTouchEvent());
    return event->rotation_angle();
  }
  
  float GetTouchForce(const base::NativeEvent& native_event) {
    const ui::TouchEvent* event =
        static_cast<const ui::TouchEvent*>(native_event);
    DCHECK(event->IsTouchEvent());
    return event->force();
  }
  
  bool GetScrollOffsets(const base::NativeEvent& native_event,
                        float* x_offset,
                        float* y_offset,
                        float* x_offset_ordinal,
                        float* y_offset_ordinal,
                        int* finger_count) {
    const ui::ScrollEvent* event =
        static_cast<const ui::ScrollEvent*>(native_event);
    DCHECK(event->IsScrollEvent());
    if (x_offset)
      *x_offset = event->x_offset();
    if (y_offset)
      *y_offset = event->y_offset();
    if (x_offset_ordinal)
      *x_offset_ordinal = event->x_offset_ordinal();
    if (y_offset_ordinal)
      *y_offset_ordinal = event->y_offset_ordinal();
    if (finger_count)
      *finger_count = event->finger_count();
  
    return true;
  }
  
  bool GetFlingData(const base::NativeEvent& native_event,
                    float* vx,
                    float* vy,
                    float* vx_ordinal,
                    float* vy_ordinal,
                    bool* is_cancel) {
    const ui::ScrollEvent* event =
        static_cast<const ui::ScrollEvent*>(native_event);
    DCHECK(event->IsScrollEvent());
    if (vx)
      *vx = event->x_offset();
    if (vy)
      *vy = event->y_offset();
    if (vx_ordinal)
      *vx_ordinal = event->x_offset_ordinal();
    if (vy_ordinal)
      *vy_ordinal = event->y_offset_ordinal();
    if (is_cancel)
      *is_cancel = event->type() == ET_SCROLL_FLING_CANCEL;
  
    return true;
  }
  
  int GetModifiersFromKeyState() {
    NOTIMPLEMENTED();
    return 0;
  }
  
  void DispatchEventFromNativeUiEvent(const base::NativeEvent& native_event,
                                      base::Callback<void(ui::Event*)> callback) {
    const ui::Event* native_ui_event = static_cast<ui::Event*>(native_event);
    if (native_ui_event->IsKeyEvent()) {
      ui::KeyEvent key_event(native_event);
      callback.Run(&key_event);
    } else if (native_ui_event->IsMouseWheelEvent()) {
      ui::MouseWheelEvent wheel_event(native_event);
      callback.Run(&wheel_event);
    } else if (native_ui_event->IsMouseEvent()) {
      ui::MouseEvent mouse_event(native_event);
      callback.Run(&mouse_event);
    } else if (native_ui_event->IsTouchEvent()) {
      ui::TouchEvent touch_event(native_event);
      callback.Run(&touch_event);
    } else if (native_ui_event->IsScrollEvent()) {
      ui::ScrollEvent scroll_event(native_event);
      callback.Run(&scroll_event);
    } else {
      NOTREACHED();
    }
  }
  
  }  // namespace ui
  