Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "ash/shelf/voice_interaction_overlay.h" | 5 #include "ash/shelf/voice_interaction_overlay.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 32 #include "ui/compositor/layer_animator.h" | 32 #include "ui/compositor/layer_animator.h" |
| 33 #include "ui/compositor/paint_context.h" | 33 #include "ui/compositor/paint_context.h" |
| 34 #include "ui/compositor/paint_recorder.h" | 34 #include "ui/compositor/paint_recorder.h" |
| 35 #include "ui/compositor/scoped_layer_animation_settings.h" | 35 #include "ui/compositor/scoped_layer_animation_settings.h" |
| 36 #include "ui/gfx/canvas.h" | 36 #include "ui/gfx/canvas.h" |
| 37 #include "ui/gfx/image/canvas_image_source.h" | 37 #include "ui/gfx/image/canvas_image_source.h" |
| 38 #include "ui/gfx/image/image_skia.h" | 38 #include "ui/gfx/image/image_skia.h" |
| 39 #include "ui/gfx/image/image_skia_operations.h" | 39 #include "ui/gfx/image/image_skia_operations.h" |
| 40 #include "ui/gfx/paint_vector_icon.h" | 40 #include "ui/gfx/paint_vector_icon.h" |
| 41 #include "ui/gfx/scoped_canvas.h" | 41 #include "ui/gfx/scoped_canvas.h" |
| 42 #include "ui/gfx/skia_paint_util.h" | |
| 42 #include "ui/views/animation/flood_fill_ink_drop_ripple.h" | 43 #include "ui/views/animation/flood_fill_ink_drop_ripple.h" |
| 43 #include "ui/views/animation/ink_drop_impl.h" | 44 #include "ui/views/animation/ink_drop_impl.h" |
| 44 #include "ui/views/animation/ink_drop_mask.h" | 45 #include "ui/views/animation/ink_drop_mask.h" |
| 45 #include "ui/views/painter.h" | 46 #include "ui/views/painter.h" |
| 46 #include "ui/views/widget/widget.h" | 47 #include "ui/views/widget/widget.h" |
| 47 | 48 |
| 48 namespace ash { | 49 namespace ash { |
| 49 namespace { | 50 namespace { |
| 50 constexpr int kFullExpandDurationMs = 650; | 51 constexpr int kFullExpandDurationMs = 650; |
| 51 constexpr int kFullRetractDurationMs = 300; | 52 constexpr int kFullRetractDurationMs = 300; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 66 constexpr float kIconSizeDip = 24.f; | 67 constexpr float kIconSizeDip = 24.f; |
| 67 constexpr float kIconOffsetDip = 56.f; | 68 constexpr float kIconOffsetDip = 56.f; |
| 68 constexpr float kIconOpacity = 1.f; | 69 constexpr float kIconOpacity = 1.f; |
| 69 constexpr int kIconBurstDurationMs = 100; | 70 constexpr int kIconBurstDurationMs = 100; |
| 70 | 71 |
| 71 constexpr float kBackgroundInitSizeDip = 48.f; | 72 constexpr float kBackgroundInitSizeDip = 48.f; |
| 72 constexpr float kBackgroundStartSizeDip = 10.f; | 73 constexpr float kBackgroundStartSizeDip = 10.f; |
| 73 constexpr float kBackgroundSizeDip = 48.f; | 74 constexpr float kBackgroundSizeDip = 48.f; |
| 74 constexpr int kBackgroundStartDelayMs = 100; | 75 constexpr int kBackgroundStartDelayMs = 100; |
| 75 constexpr int kBackgroundOpacityDurationMs = 200; | 76 constexpr int kBackgroundOpacityDurationMs = 200; |
| 76 constexpr float kBackgroundShadowSizeDip = 12; | 77 constexpr float kBackgroundShadowElevationDip = 24.f; |
| 77 | |
| 78 class CircleImageSource : public gfx::CanvasImageSource { | |
| 79 public: | |
| 80 CircleImageSource(float radius, float padding) | |
| 81 : CanvasImageSource( | |
| 82 gfx::Size((radius + padding) * 2, (radius + padding) * 2), | |
| 83 false), | |
| 84 radius_(radius), | |
| 85 padding_(padding) {} | |
| 86 ~CircleImageSource() override {} | |
| 87 | |
| 88 private: | |
| 89 void Draw(gfx::Canvas* canvas) override { | |
| 90 cc::PaintFlags flags; | |
| 91 flags.setColor(SK_ColorWHITE); | |
| 92 flags.setAntiAlias(true); | |
| 93 flags.setStyle(cc::PaintFlags::kFill_Style); | |
| 94 canvas->DrawCircle(gfx::PointF(radius_ + padding_, radius_ + padding_), | |
| 95 radius_, flags); | |
| 96 } | |
| 97 | |
| 98 float radius_; | |
| 99 float padding_; | |
| 100 | |
| 101 DISALLOW_COPY_AND_ASSIGN(CircleImageSource); | |
| 102 }; | |
| 103 | 78 |
| 104 class VoiceInteractionIconBackground : public ui::Layer, | 79 class VoiceInteractionIconBackground : public ui::Layer, |
| 105 public ui::LayerDelegate { | 80 public ui::LayerDelegate { |
| 106 public: | 81 public: |
| 107 VoiceInteractionIconBackground() | 82 VoiceInteractionIconBackground() : Layer(ui::LAYER_NOT_DRAWN) { |
| 108 : Layer(ui::LAYER_NOT_DRAWN), | |
| 109 shadow_values_(1, | |
| 110 gfx::ShadowValue(gfx::Vector2d(0, 0), | |
| 111 kBackgroundShadowSizeDip, | |
| 112 SkColorSetARGB(0x54, 0, 0, 0))) { | |
| 113 set_name("VoiceInteractionOverlay:BACKGROUND_LAYER"); | 83 set_name("VoiceInteractionOverlay:BACKGROUND_LAYER"); |
| 114 SetBounds(gfx::Rect(0, 0, kBackgroundInitSizeDip, kBackgroundInitSizeDip)); | 84 SetBounds(gfx::Rect(0, 0, kBackgroundInitSizeDip, kBackgroundInitSizeDip)); |
| 115 SetFillsBoundsOpaquely(false); | 85 SetFillsBoundsOpaquely(false); |
| 116 SetMasksToBounds(false); | 86 SetMasksToBounds(false); |
| 117 | 87 |
| 88 shadow_values_ = | |
| 89 gfx::ShadowValue::MakeMdShadowValues(kBackgroundShadowElevationDip); | |
| 90 gfx::Insets shadow_margin = gfx::ShadowValue::GetMargin(shadow_values_); | |
|
oshima
2017/06/21 18:14:52
nit: const
xc
2017/06/21 18:50:59
Done.
| |
| 91 | |
| 118 shadow_layer_.reset(new ui::Layer()); | 92 shadow_layer_.reset(new ui::Layer()); |
| 119 shadow_layer_->set_delegate(this); | 93 shadow_layer_->set_delegate(this); |
| 120 shadow_layer_->SetFillsBoundsOpaquely(false); | 94 shadow_layer_->SetFillsBoundsOpaquely(false); |
| 121 shadow_layer_->SetBounds( | 95 shadow_layer_->SetBounds({shadow_margin.left(), shadow_margin.top(), |
| 122 gfx::Rect(-kBackgroundShadowSizeDip, -kBackgroundShadowSizeDip, | 96 kBackgroundInitSizeDip - shadow_margin.width(), |
| 123 kBackgroundInitSizeDip + kBackgroundShadowSizeDip * 2, | 97 kBackgroundInitSizeDip - shadow_margin.height()}); |
| 124 kBackgroundInitSizeDip + kBackgroundShadowSizeDip * 2)); | |
| 125 Add(shadow_layer_.get()); | 98 Add(shadow_layer_.get()); |
| 126 } | 99 } |
| 127 ~VoiceInteractionIconBackground() override{}; | 100 ~VoiceInteractionIconBackground() override{}; |
| 128 | 101 |
| 129 private: | 102 private: |
| 130 void OnPaintLayer(const ui::PaintContext& context) override { | 103 void OnPaintLayer(const ui::PaintContext& context) override { |
| 131 // Radius is based on the parent layer size, the shadow layer is expanded | 104 // Radius is based on the parent layer size, the shadow layer is expanded |
| 132 // to make room for the shadow. | 105 // to make room for the shadow. |
| 133 float radius = size().width() / 2.f; | 106 float radius = size().width() / 2.f; |
| 134 CircleImageSource* circle_image = | |
| 135 new CircleImageSource(radius, kBackgroundShadowSizeDip); | |
| 136 gfx::ImageSkia background_with_shadow = | |
| 137 gfx::ImageSkiaOperations::CreateImageWithDropShadow( | |
| 138 gfx::ImageSkia(circle_image, circle_image->size()), shadow_values_); | |
| 139 | 107 |
| 140 ui::PaintRecorder recorder(context, background_with_shadow.size()); | 108 ui::PaintRecorder recorder(context, shadow_layer_->size()); |
| 141 gfx::Canvas* canvas = recorder.canvas(); | 109 gfx::Canvas* canvas = recorder.canvas(); |
| 142 float shadow_offset = | 110 |
| 143 (shadow_layer_->size().width() - background_with_shadow.width()) / 2.f; | 111 cc::PaintFlags flags; |
| 144 canvas->DrawImageInt(background_with_shadow, shadow_offset, shadow_offset); | 112 flags.setColor(SK_ColorWHITE); |
| 113 flags.setAntiAlias(true); | |
| 114 flags.setStyle(cc::PaintFlags::kFill_Style); | |
| 115 flags.setLooper(gfx::CreateShadowDrawLooper(shadow_values_)); | |
| 116 gfx::Rect shadow_bounds = shadow_layer_->bounds(); | |
| 117 canvas->DrawCircle({radius - shadow_bounds.x(), radius - shadow_bounds.y()}, | |
| 118 radius, flags); | |
| 145 } | 119 } |
| 146 | 120 |
| 147 void OnDelegatedFrameDamage(const gfx::Rect& damage_rect_in_dip) override {} | 121 void OnDelegatedFrameDamage(const gfx::Rect& damage_rect_in_dip) override {} |
| 148 | 122 |
| 149 void OnDeviceScaleFactorChanged(float device_scale_factor) override {} | 123 void OnDeviceScaleFactorChanged(float device_scale_factor) override {} |
| 150 | 124 |
| 151 gfx::ShadowValues shadow_values_; | 125 gfx::ShadowValues shadow_values_; |
| 152 | 126 |
| 153 std::unique_ptr<ui::Layer> shadow_layer_; | 127 std::unique_ptr<ui::Layer> shadow_layer_; |
| 154 | 128 |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 settings.SetTransitionDuration( | 425 settings.SetTransitionDuration( |
| 452 base::TimeDelta::FromMilliseconds(kFullRetractDurationMs)); | 426 base::TimeDelta::FromMilliseconds(kFullRetractDurationMs)); |
| 453 settings.SetTweenType(gfx::Tween::LINEAR_OUT_SLOW_IN); | 427 settings.SetTweenType(gfx::Tween::LINEAR_OUT_SLOW_IN); |
| 454 | 428 |
| 455 background_layer_->SetTransform(transform); | 429 background_layer_->SetTransform(transform); |
| 456 background_layer_->SetOpacity(0); | 430 background_layer_->SetOpacity(0); |
| 457 } | 431 } |
| 458 } | 432 } |
| 459 | 433 |
| 460 } // namespace ash | 434 } // namespace ash |
| OLD | NEW |