// 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.

#include "ash/utility/transformer_util.h"

#include <cmath>

#include "third_party/skia/include/core/SkMatrix44.h"
#include "ui/gfx/geometry/size_f.h"
#include "ui/gfx/transform.h"

namespace ash {
namespace {

// Round near zero value to zero.
void RoundNearZero(gfx::Transform* transform) {
  const float kEpsilon = 0.001f;
  SkMatrix44& matrix = transform->matrix();
  for (int x = 0; x < 4; ++x) {
    for (int y = 0; y < 4; ++y) {
      if (std::abs(SkMScalarToFloat(matrix.get(x, y))) < kEpsilon)
        matrix.set(x, y, SkFloatToMScalar(0.0f));
    }
  }
}

}  // namespace

gfx::Transform CreateRotationTransform(display::Display::Rotation old_rotation,
                                       display::Display::Rotation new_rotation,
                                       const gfx::SizeF& size_to_rotate) {
  const int rotation_angle = 90 * (((new_rotation - old_rotation) + 4) % 4);
  gfx::Transform rotate;
  switch (rotation_angle) {
    case 0:
      break;
    case 90:
      rotate.Translate(size_to_rotate.height(), 0);
      rotate.Rotate(90);
      break;
    case 180:
      rotate.Translate(size_to_rotate.width(), size_to_rotate.height());
      rotate.Rotate(180);
      break;
    case 270:
      rotate.Translate(0, size_to_rotate.width());
      rotate.Rotate(270);
      break;
  }
  RoundNearZero(&rotate);
  return rotate;
}

}  // namespace ash
