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

Side by Side Diff: ui/gfx/interpolated_transform.cc

Issue 11087093: Migrate ui::Transform to gfx::Transform (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Should pass trybots this time Created 8 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « ui/gfx/interpolated_transform.h ('k') | ui/gfx/interpolated_transform_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/gfx/interpolated_transform.h" 5 #include "ui/gfx/interpolated_transform.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #ifndef M_PI 9 #ifndef M_PI
10 #define M_PI 3.14159265358979323846 10 #define M_PI 3.14159265358979323846
(...skipping 10 matching lines...) Expand all
21 { 21 {
22 float remainder = fabs(fmod(degrees, 90.0f)); 22 float remainder = fabs(fmod(degrees, 90.0f));
23 return remainder < EPSILON || 90.0f - remainder < EPSILON; 23 return remainder < EPSILON || 90.0f - remainder < EPSILON;
24 } 24 }
25 25
26 // Returns false if |degrees| is not a multiple of ninety degrees or if 26 // Returns false if |degrees| is not a multiple of ninety degrees or if
27 // |rotation| is NULL. It does not affect |rotation| in this case. Otherwise 27 // |rotation| is NULL. It does not affect |rotation| in this case. Otherwise
28 // *rotation is set to be the appropriate sanitized rotation matrix. That is, 28 // *rotation is set to be the appropriate sanitized rotation matrix. That is,
29 // the rotation matrix corresponding to |degrees| which has entries that are all 29 // the rotation matrix corresponding to |degrees| which has entries that are all
30 // either 0, 1 or -1. 30 // either 0, 1 or -1.
31 bool MassageRotationIfMultipleOfNinetyDegrees(ui::Transform* rotation, 31 bool MassageRotationIfMultipleOfNinetyDegrees(gfx::Transform* rotation,
32 float degrees) 32 float degrees)
33 { 33 {
34 if (!IsMultipleOfNinetyDegrees(degrees) || !rotation) 34 if (!IsMultipleOfNinetyDegrees(degrees) || !rotation)
35 return false; 35 return false;
36 36
37 ui::Transform transform; 37 gfx::Transform transform;
38 SkMatrix44& m = transform.matrix(); 38 SkMatrix44& m = transform.matrix();
39 float degrees_by_ninety = degrees / 90.0f; 39 float degrees_by_ninety = degrees / 90.0f;
40 40
41 int n = static_cast<int>(degrees_by_ninety > 0 41 int n = static_cast<int>(degrees_by_ninety > 0
42 ? floor(degrees_by_ninety + 0.5f) 42 ? floor(degrees_by_ninety + 0.5f)
43 : ceil(degrees_by_ninety - 0.5f)); 43 : ceil(degrees_by_ninety - 0.5f));
44 44
45 n %= 4; 45 n %= 4;
46 if (n < 0) 46 if (n < 0)
47 n += 4; 47 n += 4;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 InterpolatedTransform::InterpolatedTransform(float start_time, 82 InterpolatedTransform::InterpolatedTransform(float start_time,
83 float end_time) 83 float end_time)
84 : start_time_(start_time), 84 : start_time_(start_time),
85 end_time_(end_time), 85 end_time_(end_time),
86 reversed_(false) { 86 reversed_(false) {
87 } 87 }
88 88
89 InterpolatedTransform::~InterpolatedTransform() {} 89 InterpolatedTransform::~InterpolatedTransform() {}
90 90
91 ui::Transform InterpolatedTransform::Interpolate(float t) const { 91 gfx::Transform InterpolatedTransform::Interpolate(float t) const {
92 if (reversed_) 92 if (reversed_)
93 t = 1.0f - t; 93 t = 1.0f - t;
94 ui::Transform result = InterpolateButDoNotCompose(t); 94 gfx::Transform result = InterpolateButDoNotCompose(t);
95 if (child_.get()) { 95 if (child_.get()) {
96 result.ConcatTransform(child_->Interpolate(t)); 96 result.ConcatTransform(child_->Interpolate(t));
97 } 97 }
98 return result; 98 return result;
99 } 99 }
100 100
101 void InterpolatedTransform::SetChild(InterpolatedTransform* child) { 101 void InterpolatedTransform::SetChild(InterpolatedTransform* child) {
102 child_.reset(child); 102 child_.reset(child);
103 } 103 }
104 104
105 bool InterpolatedTransform::FactorTRS(const ui::Transform& transform, 105 bool InterpolatedTransform::FactorTRS(const gfx::Transform& transform,
106 gfx::Point* translation, 106 gfx::Point* translation,
107 float* rotation, 107 float* rotation,
108 gfx::Point3f* scale) { 108 gfx::Point3f* scale) {
109 const SkMatrix44& m = transform.matrix(); 109 const SkMatrix44& m = transform.matrix();
110 float m00 = m.get(0, 0); 110 float m00 = m.get(0, 0);
111 float m01 = m.get(0, 1); 111 float m01 = m.get(0, 1);
112 float m10 = m.get(1, 0); 112 float m10 = m.get(1, 0);
113 float m11 = m.get(1, 1); 113 float m11 = m.get(1, 1);
114 114
115 // A factorable 2D TRS matrix must be of the form: 115 // A factorable 2D TRS matrix must be of the form:
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 float end_degrees, 196 float end_degrees,
197 float start_time, 197 float start_time,
198 float end_time) 198 float end_time)
199 : InterpolatedTransform(start_time, end_time), 199 : InterpolatedTransform(start_time, end_time),
200 start_degrees_(start_degrees), 200 start_degrees_(start_degrees),
201 end_degrees_(end_degrees) { 201 end_degrees_(end_degrees) {
202 } 202 }
203 203
204 InterpolatedRotation::~InterpolatedRotation() {} 204 InterpolatedRotation::~InterpolatedRotation() {}
205 205
206 ui::Transform InterpolatedRotation::InterpolateButDoNotCompose(float t) const { 206 gfx::Transform InterpolatedRotation::InterpolateButDoNotCompose(float t) const {
207 ui::Transform result; 207 gfx::Transform result;
208 float interpolated_degrees = ValueBetween(t, start_degrees_, end_degrees_); 208 float interpolated_degrees = ValueBetween(t, start_degrees_, end_degrees_);
209 result.SetRotate(interpolated_degrees); 209 result.SetRotate(interpolated_degrees);
210 if (t == 0.0f || t == 1.0f) 210 if (t == 0.0f || t == 1.0f)
211 MassageRotationIfMultipleOfNinetyDegrees(&result, interpolated_degrees); 211 MassageRotationIfMultipleOfNinetyDegrees(&result, interpolated_degrees);
212 return result; 212 return result;
213 } 213 }
214 214
215 /////////////////////////////////////////////////////////////////////////////// 215 ///////////////////////////////////////////////////////////////////////////////
216 // InterpolatedAxisAngleRotation 216 // InterpolatedAxisAngleRotation
217 // 217 //
(...skipping 15 matching lines...) Expand all
233 float start_time, 233 float start_time,
234 float end_time) 234 float end_time)
235 : InterpolatedTransform(start_time, end_time), 235 : InterpolatedTransform(start_time, end_time),
236 axis_(axis), 236 axis_(axis),
237 start_degrees_(start_degrees), 237 start_degrees_(start_degrees),
238 end_degrees_(end_degrees) { 238 end_degrees_(end_degrees) {
239 } 239 }
240 240
241 InterpolatedAxisAngleRotation::~InterpolatedAxisAngleRotation() {} 241 InterpolatedAxisAngleRotation::~InterpolatedAxisAngleRotation() {}
242 242
243 ui::Transform 243 gfx::Transform
244 InterpolatedAxisAngleRotation::InterpolateButDoNotCompose(float t) const { 244 InterpolatedAxisAngleRotation::InterpolateButDoNotCompose(float t) const {
245 ui::Transform result; 245 gfx::Transform result;
246 result.SetRotateAbout(axis_, ValueBetween(t, start_degrees_, end_degrees_)); 246 result.SetRotateAbout(axis_, ValueBetween(t, start_degrees_, end_degrees_));
247 return result; 247 return result;
248 } 248 }
249 249
250 /////////////////////////////////////////////////////////////////////////////// 250 ///////////////////////////////////////////////////////////////////////////////
251 // InterpolatedScale 251 // InterpolatedScale
252 // 252 //
253 253
254 InterpolatedScale::InterpolatedScale(float start_scale, float end_scale) 254 InterpolatedScale::InterpolatedScale(float start_scale, float end_scale)
255 : InterpolatedTransform(), 255 : InterpolatedTransform(),
(...skipping 19 matching lines...) Expand all
275 const gfx::Point3f& end_scale, 275 const gfx::Point3f& end_scale,
276 float start_time, 276 float start_time,
277 float end_time) 277 float end_time)
278 : InterpolatedTransform(start_time, end_time), 278 : InterpolatedTransform(start_time, end_time),
279 start_scale_(start_scale), 279 start_scale_(start_scale),
280 end_scale_(end_scale) { 280 end_scale_(end_scale) {
281 } 281 }
282 282
283 InterpolatedScale::~InterpolatedScale() {} 283 InterpolatedScale::~InterpolatedScale() {}
284 284
285 ui::Transform InterpolatedScale::InterpolateButDoNotCompose(float t) const { 285 gfx::Transform InterpolatedScale::InterpolateButDoNotCompose(float t) const {
286 ui::Transform result; 286 gfx::Transform result;
287 float scale_x = ValueBetween(t, start_scale_.x(), end_scale_.x()); 287 float scale_x = ValueBetween(t, start_scale_.x(), end_scale_.x());
288 float scale_y = ValueBetween(t, start_scale_.y(), end_scale_.y()); 288 float scale_y = ValueBetween(t, start_scale_.y(), end_scale_.y());
289 // TODO(vollick) 3d xforms. 289 // TODO(vollick) 3d xforms.
290 result.SetScale(scale_x, scale_y); 290 result.SetScale(scale_x, scale_y);
291 return result; 291 return result;
292 } 292 }
293 293
294 /////////////////////////////////////////////////////////////////////////////// 294 ///////////////////////////////////////////////////////////////////////////////
295 // InterpolatedTranslation 295 // InterpolatedTranslation
296 // 296 //
297 297
298 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos, 298 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos,
299 const gfx::Point& end_pos) 299 const gfx::Point& end_pos)
300 : InterpolatedTransform(), 300 : InterpolatedTransform(),
301 start_pos_(start_pos), 301 start_pos_(start_pos),
302 end_pos_(end_pos) { 302 end_pos_(end_pos) {
303 } 303 }
304 304
305 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos, 305 InterpolatedTranslation::InterpolatedTranslation(const gfx::Point& start_pos,
306 const gfx::Point& end_pos, 306 const gfx::Point& end_pos,
307 float start_time, 307 float start_time,
308 float end_time) 308 float end_time)
309 : InterpolatedTransform(start_time, end_time), 309 : InterpolatedTransform(start_time, end_time),
310 start_pos_(start_pos), 310 start_pos_(start_pos),
311 end_pos_(end_pos) { 311 end_pos_(end_pos) {
312 } 312 }
313 313
314 InterpolatedTranslation::~InterpolatedTranslation() {} 314 InterpolatedTranslation::~InterpolatedTranslation() {}
315 315
316 ui::Transform 316 gfx::Transform
317 InterpolatedTranslation::InterpolateButDoNotCompose(float t) const { 317 InterpolatedTranslation::InterpolateButDoNotCompose(float t) const {
318 ui::Transform result; 318 gfx::Transform result;
319 // TODO(vollick) 3d xforms. 319 // TODO(vollick) 3d xforms.
320 result.SetTranslate(ValueBetween(t, start_pos_.x(), end_pos_.x()), 320 result.SetTranslate(ValueBetween(t, start_pos_.x(), end_pos_.x()),
321 ValueBetween(t, start_pos_.y(), end_pos_.y())); 321 ValueBetween(t, start_pos_.y(), end_pos_.y()));
322 return result; 322 return result;
323 } 323 }
324 324
325 /////////////////////////////////////////////////////////////////////////////// 325 ///////////////////////////////////////////////////////////////////////////////
326 // InterpolatedConstantTransform 326 // InterpolatedConstantTransform
327 // 327 //
328 328
329 InterpolatedConstantTransform::InterpolatedConstantTransform( 329 InterpolatedConstantTransform::InterpolatedConstantTransform(
330 const ui::Transform& transform) 330 const gfx::Transform& transform)
331 : InterpolatedTransform(), 331 : InterpolatedTransform(),
332 transform_(transform) { 332 transform_(transform) {
333 } 333 }
334 334
335 ui::Transform 335 gfx::Transform
336 InterpolatedConstantTransform::InterpolateButDoNotCompose(float t) const { 336 InterpolatedConstantTransform::InterpolateButDoNotCompose(float t) const {
337 return transform_; 337 return transform_;
338 } 338 }
339 339
340 InterpolatedConstantTransform::~InterpolatedConstantTransform() {} 340 InterpolatedConstantTransform::~InterpolatedConstantTransform() {}
341 341
342 /////////////////////////////////////////////////////////////////////////////// 342 ///////////////////////////////////////////////////////////////////////////////
343 // InterpolatedTransformAboutPivot 343 // InterpolatedTransformAboutPivot
344 // 344 //
345 345
346 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( 346 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot(
347 const gfx::Point& pivot, 347 const gfx::Point& pivot,
348 InterpolatedTransform* transform) 348 InterpolatedTransform* transform)
349 : InterpolatedTransform() { 349 : InterpolatedTransform() {
350 Init(pivot, transform); 350 Init(pivot, transform);
351 } 351 }
352 352
353 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( 353 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot(
354 const gfx::Point& pivot, 354 const gfx::Point& pivot,
355 InterpolatedTransform* transform, 355 InterpolatedTransform* transform,
356 float start_time, 356 float start_time,
357 float end_time) 357 float end_time)
358 : InterpolatedTransform() { 358 : InterpolatedTransform() {
359 Init(pivot, transform); 359 Init(pivot, transform);
360 } 360 }
361 361
362 InterpolatedTransformAboutPivot::~InterpolatedTransformAboutPivot() {} 362 InterpolatedTransformAboutPivot::~InterpolatedTransformAboutPivot() {}
363 363
364 ui::Transform 364 gfx::Transform
365 InterpolatedTransformAboutPivot::InterpolateButDoNotCompose(float t) const { 365 InterpolatedTransformAboutPivot::InterpolateButDoNotCompose(float t) const {
366 if (transform_.get()) { 366 if (transform_.get()) {
367 return transform_->Interpolate(t); 367 return transform_->Interpolate(t);
368 } 368 }
369 return Transform(); 369 return gfx::Transform();
370 } 370 }
371 371
372 void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot, 372 void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot,
373 InterpolatedTransform* xform) { 373 InterpolatedTransform* xform) {
374 ui::Transform to_pivot; 374 gfx::Transform to_pivot;
375 ui::Transform from_pivot; 375 gfx::Transform from_pivot;
376 to_pivot.SetTranslate(-pivot.x(), -pivot.y()); 376 to_pivot.SetTranslate(-pivot.x(), -pivot.y());
377 from_pivot.SetTranslate(pivot.x(), pivot.y()); 377 from_pivot.SetTranslate(pivot.x(), pivot.y());
378 378
379 scoped_ptr<InterpolatedTransform> pre_transform( 379 scoped_ptr<InterpolatedTransform> pre_transform(
380 new InterpolatedConstantTransform(to_pivot)); 380 new InterpolatedConstantTransform(to_pivot));
381 scoped_ptr<InterpolatedTransform> post_transform( 381 scoped_ptr<InterpolatedTransform> post_transform(
382 new InterpolatedConstantTransform(from_pivot)); 382 new InterpolatedConstantTransform(from_pivot));
383 383
384 pre_transform->SetChild(xform); 384 pre_transform->SetChild(xform);
385 xform->SetChild(post_transform.release()); 385 xform->SetChild(post_transform.release());
386 transform_.reset(pre_transform.release()); 386 transform_.reset(pre_transform.release());
387 } 387 }
388 388
389 InterpolatedTRSTransform::InterpolatedTRSTransform( 389 InterpolatedTRSTransform::InterpolatedTRSTransform(
390 const ui::Transform& start_transform, 390 const gfx::Transform& start_transform,
391 const ui::Transform& end_transform) 391 const gfx::Transform& end_transform)
392 : InterpolatedTransform() { 392 : InterpolatedTransform() {
393 Init(start_transform, end_transform); 393 Init(start_transform, end_transform);
394 } 394 }
395 395
396 InterpolatedTRSTransform::InterpolatedTRSTransform( 396 InterpolatedTRSTransform::InterpolatedTRSTransform(
397 const ui::Transform& start_transform, 397 const gfx::Transform& start_transform,
398 const ui::Transform& end_transform, 398 const gfx::Transform& end_transform,
399 float start_time, 399 float start_time,
400 float end_time) 400 float end_time)
401 : InterpolatedTransform() { 401 : InterpolatedTransform() {
402 Init(start_transform, end_transform); 402 Init(start_transform, end_transform);
403 } 403 }
404 404
405 InterpolatedTRSTransform::~InterpolatedTRSTransform() {} 405 InterpolatedTRSTransform::~InterpolatedTRSTransform() {}
406 406
407 ui::Transform 407 gfx::Transform
408 InterpolatedTRSTransform::InterpolateButDoNotCompose(float t) const { 408 InterpolatedTRSTransform::InterpolateButDoNotCompose(float t) const {
409 if (transform_.get()) { 409 if (transform_.get()) {
410 return transform_->Interpolate(t); 410 return transform_->Interpolate(t);
411 } 411 }
412 return Transform(); 412 return gfx::Transform();
413 } 413 }
414 414
415 void InterpolatedTRSTransform::Init(const Transform& start_transform, 415 void InterpolatedTRSTransform::Init(const gfx::Transform& start_transform,
416 const Transform& end_transform) { 416 const gfx::Transform& end_transform) {
417 gfx::Point start_translation, end_translation; 417 gfx::Point start_translation, end_translation;
418 gfx::Point3f start_scale, end_scale; 418 gfx::Point3f start_scale, end_scale;
419 float start_degrees, end_degrees; 419 float start_degrees, end_degrees;
420 if (FactorTRS(start_transform, 420 if (FactorTRS(start_transform,
421 &start_translation, 421 &start_translation,
422 &start_degrees, 422 &start_degrees,
423 &start_scale) && 423 &start_scale) &&
424 FactorTRS(end_transform, 424 FactorTRS(end_transform,
425 &end_translation, 425 &end_translation,
426 &end_degrees, 426 &end_degrees,
(...skipping 12 matching lines...) Expand all
439 439
440 rotation->SetChild(translation.release()); 440 rotation->SetChild(translation.release());
441 scale->SetChild(rotation.release()); 441 scale->SetChild(rotation.release());
442 transform_.reset(scale.release()); 442 transform_.reset(scale.release());
443 } else { 443 } else {
444 transform_.reset(new InterpolatedConstantTransform(end_transform)); 444 transform_.reset(new InterpolatedConstantTransform(end_transform));
445 } 445 }
446 } 446 }
447 447
448 } // namespace ui 448 } // namespace ui
OLDNEW
« no previous file with comments | « ui/gfx/interpolated_transform.h ('k') | ui/gfx/interpolated_transform_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698