// 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 "base/macros.h"
#include "ui/events/gestures/gesture_recognizer.h"

namespace ui {

namespace {

// Stub implementation of GestureRecognizer for Mac. Currently only serves to
// provide a no-op implementation of TransferEventsTo().
class GestureRecognizerImplMac : public GestureRecognizer {
 public:
  GestureRecognizerImplMac() {}
  virtual ~GestureRecognizerImplMac() {}

 private:
  virtual bool ProcessTouchEventPreDispatch(
      const TouchEvent& event,
      GestureConsumer* consumer) OVERRIDE {
    return false;
  }

  virtual Gestures* ProcessTouchEventPostDispatch(
      const TouchEvent& event,
      ui::EventResult result,
      GestureConsumer* consumer) OVERRIDE {
    return NULL;
  }
  virtual Gestures* ProcessTouchEventOnAsyncAck(
      const TouchEvent& event,
      ui::EventResult result,
      GestureConsumer* consumer) OVERRIDE {
    return NULL;
  };
  virtual bool CleanupStateForConsumer(GestureConsumer* consumer) OVERRIDE {
    return false;
  }
  virtual GestureConsumer* GetTouchLockedTarget(
      const TouchEvent& event) OVERRIDE {
    return NULL;
  }
  virtual GestureConsumer* GetTargetForGestureEvent(
      const GestureEvent& event) OVERRIDE {
    return NULL;
  }
  virtual GestureConsumer* GetTargetForLocation(const gfx::PointF& location,
                                                int source_device_id) OVERRIDE {
    return NULL;
  }
  virtual void TransferEventsTo(GestureConsumer* current_consumer,
                                GestureConsumer* new_consumer) OVERRIDE {}
  virtual bool GetLastTouchPointForTarget(GestureConsumer* consumer,
                                          gfx::PointF* point) OVERRIDE {
    return false;
  }
  virtual bool CancelActiveTouches(GestureConsumer* consumer) OVERRIDE {
    return false;
  }
  virtual void AddGestureEventHelper(GestureEventHelper* helper) OVERRIDE {}
  virtual void RemoveGestureEventHelper(GestureEventHelper* helper) OVERRIDE {}

  DISALLOW_COPY_AND_ASSIGN(GestureRecognizerImplMac);
};

}  // namespace

// static
GestureRecognizer* GestureRecognizer::Get() {
  CR_DEFINE_STATIC_LOCAL(GestureRecognizerImplMac, instance, ());
  return &instance;
}

}  // namespace ui
