// Copyright 2017 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 CHROME_BROWSER_VR_ELEMENTS_SCALED_DEPTH_ADJUSTER_H_
#define CHROME_BROWSER_VR_ELEMENTS_SCALED_DEPTH_ADJUSTER_H_

#include <sstream>

#include "base/macros.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/vr_ui_export.h"
#include "ui/gfx/transform.h"

namespace vr {

// A Scaler adjusts the depth of its descendents by applying a scale. This
// permits dimensions in the subtree to be expressed in DM directly. Its main
// contribution is a tailored local transform that accounts for adjustments made
// by other ScaledDepthAdjuster elements on its ancestor chain.
class VR_UI_EXPORT ScaledDepthAdjuster : public UiElement {
 public:
  explicit ScaledDepthAdjuster(float delta_z);
  ~ScaledDepthAdjuster() override;

 private:
  gfx::Transform LocalTransform() const override;
  gfx::Transform GetTargetLocalTransform() const override;
  bool OnBeginFrame(const gfx::Transform& head_pose) override;
  void OnSetType() override;

#ifndef NDEBUG
  void DumpGeometry(std::ostringstream* os) const override;
#endif

  gfx::Transform transform_;

  // This is relative to its ancestor ScaledDepthAdjuster. For example, if we
  // have a single ScaledDepthAdjuster ancestor and it translates to depth 2.5,
  // if we use a delta_z_ of -0.1, this will cause our descendants to be
  // positioned at depth 2.4.
  float delta_z_;

  DISALLOW_COPY_AND_ASSIGN(ScaledDepthAdjuster);
};

}  // namespace vr

#endif  // CHROME_BROWSER_VR_ELEMENTS_SCALED_DEPTH_ADJUSTER_H_
