| Index: remoting/client/gl_cursor_feedback.cc
|
| diff --git a/remoting/client/gl_cursor_feedback.cc b/remoting/client/gl_cursor_feedback.cc
|
| index 8306933013e18f2919a50b45db7ba4c878fe731a..c3fcbb49805bcdcd450b2acb02c78e7b644059e9 100644
|
| --- a/remoting/client/gl_cursor_feedback.cc
|
| +++ b/remoting/client/gl_cursor_feedback.cc
|
| @@ -5,6 +5,7 @@
|
| #include "remoting/client/gl_cursor_feedback.h"
|
|
|
| #include <math.h>
|
| +
|
| #include <array>
|
|
|
| #include "base/logging.h"
|
| @@ -15,7 +16,29 @@
|
| #include "remoting/client/gl_texture_ids.h"
|
|
|
| namespace {
|
| -const float kAnimationDurationMs = 220.f;
|
| +
|
| +const float kAnimationDurationMs = 300.f;
|
| +
|
| +// This function is for calculating the size of the feedback animation circle at
|
| +// the moment when the animation progress is |progress|.
|
| +// |progress|: [0, 1], indicating the progress of the animation.
|
| +// Returns a coefficient in [0, 1]. It will be multiplied with the maximum
|
| +// diameter of the feedback circle to get the current diameter of the feedback
|
| +// circle.
|
| +float GetExpansionCoefficient(float progress) {
|
| + DCHECK(progress >= 0 && progress <= 1);
|
| +
|
| + // Decelerating expansion. This is conforming to the material design spec.
|
| + // More time will be spent showing the larger circle and the animation will
|
| + // look more rapid given the same time duration.
|
| + auto get_unnormalized_coeff = [](float progress) {
|
| + static const float kExpansionBase = 400.f;
|
| + return 1.f - pow(kExpansionBase, -progress);
|
| + };
|
| + static const float kExpansionNormalization = get_unnormalized_coeff(1);
|
| + return get_unnormalized_coeff(progress) / kExpansionNormalization;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace remoting {
|
| @@ -54,12 +77,14 @@ bool GlCursorFeedback::Draw() {
|
| animation_start_time_ = base::TimeTicks();
|
| return false;
|
| }
|
| - float diameter = progress * max_diameter_;
|
| + float diameter = GetExpansionCoefficient(progress) * max_diameter_;
|
| std::array<float, 8> positions;
|
| FillRectangleVertexPositions(cursor_x_ - diameter / 2,
|
| cursor_y_ - diameter / 2,
|
| diameter, diameter, &positions);
|
| layer_->SetVertexPositions(positions);
|
| +
|
| + // Linear fade-out.
|
| layer_->Draw(1.f - progress);
|
| return true;
|
| }
|
|
|