blob: b510e33607b0da56fa0f4713010c9a2b191d8992 [file] [log] [blame]
// 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 "remoting/client/ui/view_matrix.h"
namespace remoting {
ViewMatrix::ViewMatrix() : ViewMatrix(0.f, {0.f, 0.f}) {}
ViewMatrix::ViewMatrix(float scale, const Vector2D& offset)
: scale_(scale), offset_(offset) {}
ViewMatrix::~ViewMatrix() = default;
ViewMatrix::Point ViewMatrix::MapPoint(const Point& point) const {
float x = scale_ * point.x + offset_.x;
float y = scale_ * point.y + offset_.y;
return {x, y};
}
ViewMatrix::Vector2D ViewMatrix::MapVector(const Vector2D& vector) const {
float x = scale_ * vector.x;
float y = scale_ * vector.y;
return {x, y};
}
void ViewMatrix::SetScale(float scale) {
scale_ = scale;
}
float ViewMatrix::GetScale() const {
return scale_;
}
void ViewMatrix::SetOffset(const Point& offset) {
offset_ = offset;
}
const ViewMatrix::Vector2D& ViewMatrix::GetOffset() const {
return offset_;
}
void ViewMatrix::PostScale(const Point& pivot, float scale) {
scale_ *= scale;
offset_.x *= scale;
offset_.x += (1.f - scale) * pivot.x;
offset_.y *= scale;
offset_.y += (1.f - scale) * pivot.y;
}
void ViewMatrix::PostTranslate(const Vector2D& delta) {
offset_.x += delta.x;
offset_.y += delta.y;
}
ViewMatrix ViewMatrix::Invert() const {
return ViewMatrix(1.f / scale_, {-offset_.x / scale_, -offset_.y / scale_});
}
std::array<float, 9> ViewMatrix::ToMatrixArray() const {
return {{scale_, 0, offset_.x, // Row 1
0, scale_, offset_.y, // Row 2
0, 0, 1}};
}
bool ViewMatrix::IsEmpty() const {
return scale_ == 0.f && offset_.x == 0.f && offset_.y == 0.f;
}
} // namespace remoting