Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: cc/base/scale_translate2d.h

Issue 2563743004: [3/5] Add translated rasterization support for RasterBuffer & below (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/base/scale_translate2d.h
diff --git a/cc/base/scale_translate2d.h b/cc/base/scale_translate2d.h
new file mode 100644
index 0000000000000000000000000000000000000000..8d9efe79d457887920ca41a3cc9a1a585e835130
--- /dev/null
+++ b/cc/base/scale_translate2d.h
@@ -0,0 +1,108 @@
+// Copyright (c) 2016 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 CC_BASE_SCALE_TRANSLATE2D_H_
+#define CC_BASE_SCALE_TRANSLATE2D_H_
+
+#include "ui/gfx/geometry/rect_f.h"
+#include "ui/gfx/geometry/vector2d_f.h"
+
+class SkCanvas;
+
+namespace cc {
+
+class ScaleTranslate2d {
+ public:
+ constexpr ScaleTranslate2d() : scale_(1.f) { }
+ constexpr ScaleTranslate2d(float scale, const gfx::Vector2dF& translation)
+ : scale_(scale), translation_(translation) {}
+
+ bool operator==(const ScaleTranslate2d& other) const {
+ return scale_ == other.scale_ && translation_ == other.translation_;
+ }
+ bool operator!=(const ScaleTranslate2d& other) const {
+ return !(*this == other);
+ }
+
+ static ScaleTranslate2d PreScale(const ScaleTranslate2d& t, float scale) {
+ return ScaleTranslate2d(t.scale_ * scale, t.translation_);
+ }
+ void PreScale(float scale) { *this = PreScale(*this, scale); }
+
+ static ScaleTranslate2d PostScale(const ScaleTranslate2d& t, float scale) {
+ return ScaleTranslate2d(t.scale_ * scale,
+ gfx::ScaleVector2d(t.translation_, scale));
+ }
+ void PostScale(float scale) { *this = PostScale(*this, scale); }
+
+ static ScaleTranslate2d PreTranslate(const ScaleTranslate2d& t,
+ const gfx::Vector2dF& translation) {
+ return ScaleTranslate2d(
+ t.scale_,
+ gfx::ScaleVector2d(translation, t.scale_) + t.translation_);
+ }
+ void PreTranslate(const gfx::Vector2dF& translation) {
+ *this = PreTranslate(*this, translation);
+ }
+
+ static ScaleTranslate2d PostTranslate(const ScaleTranslate2d& t,
+ const gfx::Vector2dF& translation) {
+ return ScaleTranslate2d(t.scale_, t.translation_ + translation);
+ }
+ void PostTranslate(const gfx::Vector2dF& translation) {
+ *this = PostTranslate(*this, translation);
+ }
+
+ static ScaleTranslate2d Concat(const ScaleTranslate2d& post,
+ const ScaleTranslate2d& pre) {
+ return ScaleTranslate2d(
+ pre.scale_ * post.scale_,
+ gfx::ScaleVector2d(pre.translation_, post.scale_) +
+ post.translation_);
+ }
+ void PreConcat(const ScaleTranslate2d& other) {
+ *this = Concat(*this, other);
+ }
+ void PostConcat(const ScaleTranslate2d& other) {
+ *this = Concat(other, *this);
+ }
+
+ static ScaleTranslate2d Inverse(const ScaleTranslate2d& t) {
+ return ScaleTranslate2d(
+ 1 / t.scale_,
+ gfx::ScaleVector2d(-t.translation_, 1 / t.scale_));
+ }
+ void Invert() { *this = Inverse(*this); }
+
+ gfx::PointF TransformPoint(const gfx::PointF& p) const {
+ return gfx::ScalePoint(p, scale_) + translation_;
+ }
+ gfx::PointF TransformPointReverse(const gfx::PointF& p) const {
+ return gfx::ScalePoint(p - translation_, 1.f / scale_);
+ }
+
+ gfx::RectF TransformRect(const gfx::RectF& r) const {
+ return gfx::ScaleRect(r, scale_) + translation_;
+ }
+ gfx::RectF TransformRectReverse(const gfx::RectF& r) const {
+ return gfx::ScaleRect(r - translation_, 1.f / scale_);
+ }
+
+ void ApplyToCanvas(SkCanvas* canvas) const;
+
+ float scale() const { return scale_; }
+ gfx::Vector2dF translation() const { return translation_; }
+
+ std::string ToString() const { return "todo"; }
+
+ private:
+ // Scale is applied before translation, i.e.
+ // this->Transform(p) == scale_ * p + translation_
+ float scale_;
+ gfx::Vector2dF translation_;
+};
+
+} // namespace cc
+
+#endif // CC_BASE_SCALE_TRANSLATE2D_H_

Powered by Google App Engine
This is Rietveld 408576698