// 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 SERVICES_GFX_COMPOSITOR_RENDERER_IMPL_H_
#define SERVICES_GFX_COMPOSITOR_RENDERER_IMPL_H_

#include "base/callback.h"
#include "base/macros.h"
#include "mojo/common/binding_set.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/services/gfx/composition/interfaces/renderers.mojom.h"
#include "services/gfx/compositor/compositor_engine.h"
#include "services/gfx/compositor/renderer_state.h"

namespace compositor {

// Renderer interface implementation.
// This object is owned by its associated RendererState.
class RendererImpl : public mojo::gfx::composition::Renderer,
                     public mojo::gfx::composition::HitTester {
 public:
  RendererImpl(CompositorEngine* engine,
               RendererState* state,
               mojo::InterfaceRequest<mojo::gfx::composition::Renderer>
                   renderer_request);
  ~RendererImpl() override;

  void set_connection_error_handler(const base::Closure& handler) {
    renderer_binding_.set_connection_error_handler(handler);
  }

 private:
  // |Renderer|:
  void SetRootScene(mojo::gfx::composition::SceneTokenPtr scene_token,
                    uint32 scene_version,
                    mojo::RectPtr viewport) override;
  void GetHitTester(mojo::InterfaceRequest<mojo::gfx::composition::HitTester>
                        hit_tester_request) override;

  // |HitTester|:
  void HitTest(mojo::PointPtr point, const HitTestCallback& callback) override;

  CompositorEngine* const engine_;
  RendererState* const state_;
  mojo::Binding<mojo::gfx::composition::Renderer> renderer_binding_;
  mojo::BindingSet<mojo::gfx::composition::HitTester> hit_tester_bindings;

  DISALLOW_COPY_AND_ASSIGN(RendererImpl);
};

}  // namespace compositor

#endif  // SERVICES_GFX_COMPOSITOR_RENDERER_IMPL_H_
