Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/overlay_candidate.h" | 5 #include "cc/output/overlay_candidate.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "ui/gfx/geometry/point3_f.h" | |
| 9 #include "ui/gfx/geometry/rect_conversions.h" | 10 #include "ui/gfx/geometry/rect_conversions.h" |
| 10 | 11 |
| 11 namespace cc { | 12 namespace cc { |
| 12 | 13 |
| 14 namespace { | |
| 15 // Taken from SkMatrix44. | |
|
danakj
2015/05/11 16:58:04
can you TODO pointing to a bug to make this consta
Ian Vollick
2015/05/12 01:24:15
I believe that this from transform.cc (which also
halliwell
2015/05/12 01:57:09
Correct, I just copied this comment from Transform
hendrikw
2015/05/12 02:12:29
Perhaps even replace it with std::numeric_limits<f
halliwell
2015/05/12 15:11:31
Definitely not that :) numeric_limits::epsilon is
hendrikw
2015/05/12 16:12:39
If accuracy isn't important for your use case, the
halliwell
2015/05/12 22:22:19
Well ... this number is actually smaller than std:
| |
| 16 const SkMScalar kEpsilon = 1e-8f; | |
| 17 | |
| 18 enum Axis { | |
| 19 AXIS_POS_X, | |
| 20 AXIS_NEG_X, | |
| 21 AXIS_POS_Y, | |
| 22 AXIS_NEG_Y, | |
| 23 NONE, | |
|
danakj
2015/05/11 16:58:04
usually NONE would go first so it's 0
halliwell
2015/05/12 15:11:31
Done.
| |
| 24 }; | |
| 25 | |
| 26 Axis PointToAxis(const gfx::Point3F& point) { | |
| 27 if (std::abs(point.z()) > kEpsilon) | |
| 28 return NONE; | |
| 29 const bool x_zero = (std::abs(point.x()) <= kEpsilon); | |
| 30 const bool y_zero = (std::abs(point.y()) <= kEpsilon); | |
| 31 if (x_zero && !y_zero) | |
| 32 return (point.y() > 0) ? AXIS_POS_Y : AXIS_NEG_Y; | |
| 33 else if (y_zero && !x_zero) | |
| 34 return (point.x() > 0) ? AXIS_POS_X : AXIS_NEG_X; | |
| 35 else | |
| 36 return NONE; | |
| 37 } | |
| 38 } // namespace | |
| 39 | |
| 13 OverlayCandidate::OverlayCandidate() | 40 OverlayCandidate::OverlayCandidate() |
| 14 : transform(gfx::OVERLAY_TRANSFORM_NONE), | 41 : transform(gfx::OVERLAY_TRANSFORM_NONE), |
| 15 format(RGBA_8888), | 42 format(RGBA_8888), |
| 16 uv_rect(0.f, 0.f, 1.f, 1.f), | 43 uv_rect(0.f, 0.f, 1.f, 1.f), |
| 17 resource_id(0), | 44 resource_id(0), |
| 18 plane_z_order(0), | 45 plane_z_order(0), |
| 19 overlay_handled(false) {} | 46 overlay_handled(false) {} |
| 20 | 47 |
| 21 OverlayCandidate::~OverlayCandidate() {} | 48 OverlayCandidate::~OverlayCandidate() {} |
| 22 | 49 |
| 23 // static | 50 // static |
| 24 gfx::OverlayTransform OverlayCandidate::GetOverlayTransform( | 51 gfx::OverlayTransform OverlayCandidate::GetOverlayTransform( |
| 25 const gfx::Transform& quad_transform, | 52 const gfx::Transform& quad_transform, |
| 26 bool flipped) { | 53 bool flipped) { |
|
hendrikw
2015/05/12 02:12:29
rename to flipped_over_y_axis?
halliwell
2015/05/12 15:11:31
I agree this isn't super clear, especially when "F
hendrikw
2015/05/12 16:12:39
I don't know, I would probably start the rename he
danakj
2015/05/12 16:54:32
+1 Feel free to improve the name elsewhere
halliwell
2015/05/12 22:22:20
Ok, renamed here and in TextureDrawQuad.
| |
| 27 if (!quad_transform.IsPositiveScaleOrTranslation()) | 54 if (!quad_transform.Preserves2dAxisAlignment()) { |
| 28 return gfx::OVERLAY_TRANSFORM_INVALID; | 55 return gfx::OVERLAY_TRANSFORM_INVALID; |
| 56 } | |
| 29 | 57 |
| 30 return flipped ? gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL | 58 gfx::Transform transform = quad_transform; |
| 31 : gfx::OVERLAY_TRANSFORM_NONE; | 59 transform.matrix().set(0, 3, 0); |
| 60 transform.matrix().set(1, 3, 0); | |
| 61 transform.matrix().set(2, 3, 0); | |
| 62 if (flipped) { | |
| 63 transform.Scale(0, -1); | |
| 64 } | |
|
hendrikw
2015/05/12 02:12:29
Should probably have GetXAxis() and GetYAxis() fun
halliwell
2015/05/12 15:11:31
Yep, GetXAxis/GetYAxis seem like a clear way to ex
danakj
2015/05/12 16:54:32
You could put it in cc/base/math_util if cc is the
halliwell
2015/05/12 22:22:19
Moved to cc::MathUtil.
| |
| 65 | |
| 66 gfx::Point3F x_axis(1, 0, 0); | |
| 67 gfx::Point3F y_axis(0, 1, 0); | |
| 68 transform.TransformPoint(&x_axis); | |
| 69 transform.TransformPoint(&y_axis); | |
|
Ian Vollick
2015/05/12 01:24:15
Regarding Dana's question about whether we could d
halliwell
2015/05/12 15:11:31
Indeed, not a huge perf hit, but seems silly to be
| |
| 70 | |
| 71 Axis x_to = PointToAxis(x_axis); | |
| 72 Axis y_to = PointToAxis(y_axis); | |
|
hendrikw
2015/05/12 02:12:29
your PointToAxis functions ignores scale, is that
halliwell
2015/05/12 15:11:31
Correct. TRANSFORM_NONE doesn't mean 'no transfor
| |
| 73 | |
| 74 if (x_to == AXIS_POS_X && y_to == AXIS_POS_Y) | |
| 75 return gfx::OVERLAY_TRANSFORM_NONE; | |
| 76 else if (x_to == AXIS_NEG_X && y_to == AXIS_POS_Y) | |
| 77 return gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL; | |
| 78 else if (x_to == AXIS_POS_X && y_to == AXIS_NEG_Y) | |
| 79 return gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL; | |
| 80 else if (x_to == AXIS_NEG_Y && y_to == AXIS_POS_X) | |
| 81 return gfx::OVERLAY_TRANSFORM_ROTATE_270; | |
| 82 else if (x_to == AXIS_NEG_X && y_to == AXIS_NEG_Y) | |
| 83 return gfx::OVERLAY_TRANSFORM_ROTATE_180; | |
| 84 else if (x_to == AXIS_POS_Y && y_to == AXIS_NEG_X) | |
| 85 return gfx::OVERLAY_TRANSFORM_ROTATE_90; | |
| 86 else | |
| 87 return gfx::OVERLAY_TRANSFORM_INVALID; | |
| 32 } | 88 } |
| 33 | 89 |
| 34 // static | 90 // static |
| 35 gfx::OverlayTransform OverlayCandidate::ModifyTransform( | 91 gfx::OverlayTransform OverlayCandidate::ModifyTransform( |
| 36 gfx::OverlayTransform in, | 92 gfx::OverlayTransform in, |
| 37 gfx::OverlayTransform delta) { | 93 gfx::OverlayTransform delta) { |
| 38 // There are 8 different possible transforms. We can characterize these | 94 // There are 8 different possible transforms. We can characterize these |
| 39 // by looking at where the origin moves and the direction the horizontal goes. | 95 // by looking at where the origin moves and the direction the horizontal goes. |
| 40 // (TL=top-left, BR=bottom-right, H=horizontal, V=vertical). | 96 // (TL=top-left, BR=bottom-right, H=horizontal, V=vertical). |
| 41 // NONE: TL, H | 97 // NONE: TL, H |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 break; | 180 break; |
| 125 default: | 181 default: |
| 126 return gfx::OVERLAY_TRANSFORM_INVALID; | 182 return gfx::OVERLAY_TRANSFORM_INVALID; |
| 127 } | 183 } |
| 128 } | 184 } |
| 129 | 185 |
| 130 // static | 186 // static |
| 131 gfx::RectF OverlayCandidate::GetOverlayRect( | 187 gfx::RectF OverlayCandidate::GetOverlayRect( |
| 132 const gfx::Transform& quad_transform, | 188 const gfx::Transform& quad_transform, |
| 133 const gfx::Rect& rect) { | 189 const gfx::Rect& rect) { |
| 134 DCHECK(quad_transform.IsPositiveScaleOrTranslation()); | 190 DCHECK(quad_transform.Preserves2dAxisAlignment()); |
| 135 | 191 |
| 136 gfx::RectF float_rect(rect); | 192 gfx::RectF float_rect(rect); |
| 137 quad_transform.TransformRect(&float_rect); | 193 quad_transform.TransformRect(&float_rect); |
| 138 return float_rect; | 194 return float_rect; |
| 139 } | 195 } |
| 140 | 196 |
| 141 } // namespace cc | 197 } // namespace cc |
| OLD | NEW |