// Copyright 2015 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 EXAMPLES_UI_SPINNING_CUBE_SPINNING_CUBE_VIEW_H_
#define EXAMPLES_UI_SPINNING_CUBE_SPINNING_CUBE_VIEW_H_

#include <memory>

#include "examples/spinning_cube/spinning_cube.h"
#include "mojo/ui/choreographer.h"
#include "mojo/ui/gl_view.h"
#include "mojo/ui/input_handler.h"

namespace examples {

class SpinningCubeView : public mojo::ui::GLView,
                         public mojo::ui::ChoreographerDelegate,
                         public mojo::ui::InputListener {
 public:
  SpinningCubeView(
      mojo::ApplicationImpl* app_impl,
      mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request);

  ~SpinningCubeView() override;

 private:
  // |GLView|:
  void OnPropertiesChanged(uint32_t old_scene_version,
                           mojo::ui::ViewPropertiesPtr old_properties) override;

  // |ChoreographerDelegate|:
  void OnDraw(const mojo::gfx::composition::FrameInfo& frame_info,
              const base::TimeDelta& time_delta) override;

  // |InputListener|:
  void OnEvent(mojo::EventPtr event, const OnEventCallback& callback) override;

  void DrawCubeWithGL(const mojo::Size& size);

  mojo::ui::Choreographer choreographer_;
  mojo::ui::InputHandler input_handler_;

  SpinningCube cube_;

  mojo::PointF capture_point_;
  mojo::PointF last_drag_point_;
  MojoTimeTicks drag_start_time_ = 0u;

  base::WeakPtrFactory<SpinningCubeView> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(SpinningCubeView);
};

}  // namespace examples

#endif  // EXAMPLES_UI_SPINNING_CUBE_SPINNING_CUBE_VIEW_H_
