OLD | NEW |
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/views/controls/glow_hover_controller.h" | 5 #include "ui/views/controls/glow_hover_controller.h" |
6 | 6 |
7 #include "third_party/skia/include/effects/SkGradientShader.h" | 7 #include "third_party/skia/include/effects/SkGradientShader.h" |
8 #include "ui/gfx/canvas.h" | 8 #include "ui/gfx/canvas.h" |
9 #include "ui/gfx/image/image_skia.h" | 9 #include "ui/gfx/image/image_skia.h" |
10 #include "ui/gfx/image/image_skia_operations.h" | 10 #include "ui/gfx/image/image_skia_operations.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 // Draw a radial gradient to hover_canvas. | 76 // Draw a radial gradient to hover_canvas. |
77 int radius = view_->width() / 3; | 77 int radius = view_->width() / 3; |
78 | 78 |
79 SkPoint center_point; | 79 SkPoint center_point; |
80 center_point.iset(location_.x(), location_.y()); | 80 center_point.iset(location_.x(), location_.y()); |
81 SkColor colors[2]; | 81 SkColor colors[2]; |
82 int hover_alpha = | 82 int hover_alpha = |
83 static_cast<int>(255 * kOpacityScale * animation_.GetCurrentValue()); | 83 static_cast<int>(255 * kOpacityScale * animation_.GetCurrentValue()); |
84 colors[0] = SkColorSetARGB(hover_alpha, 255, 255, 255); | 84 colors[0] = SkColorSetARGB(hover_alpha, 255, 255, 255); |
85 colors[1] = SkColorSetARGB(0, 255, 255, 255); | 85 colors[1] = SkColorSetARGB(0, 255, 255, 255); |
86 SkShader* shader = SkGradientShader::CreateRadial(center_point, | 86 skia::RefPtr<SkShader> shader = SkGradientShader::CreateRadial(center_point, |
87 SkIntToScalar(radius), colors, NULL, 2, SkShader::kClamp_TileMode); | 87 SkIntToScalar(radius), colors, NULL, 2, SkShader::kClamp_TileMode); |
88 // Shader can end up null when radius = 0. | 88 // Shader can end up null when radius = 0. |
89 // If so, this results in default full tab glow behavior. | 89 // If so, this results in default full tab glow behavior. |
90 if (shader) { | 90 if (shader) { |
91 SkPaint paint; | 91 SkPaint paint; |
92 paint.setStyle(SkPaint::kFill_Style); | 92 paint.setStyle(SkPaint::kFill_Style); |
93 paint.setAntiAlias(true); | 93 paint.setAntiAlias(true); |
94 paint.setShader(shader); | 94 paint.setShader(shader.get()); |
95 shader->unref(); | |
96 hover_canvas.DrawRect(gfx::Rect(location_.x() - radius, | 95 hover_canvas.DrawRect(gfx::Rect(location_.x() - radius, |
97 location_.y() - radius, | 96 location_.y() - radius, |
98 radius * 2, radius * 2), paint); | 97 radius * 2, radius * 2), paint); |
99 } | 98 } |
100 gfx::ImageSkia result = gfx::ImageSkiaOperations::CreateMaskedImage( | 99 gfx::ImageSkia result = gfx::ImageSkiaOperations::CreateMaskedImage( |
101 gfx::ImageSkia(hover_canvas.ExtractImageRep()), mask_image); | 100 gfx::ImageSkia(hover_canvas.ExtractImageRep()), mask_image); |
102 canvas->DrawImageInt(result, (view_->width() - mask_image.width()) / 2, | 101 canvas->DrawImageInt(result, (view_->width() - mask_image.width()) / 2, |
103 (view_->height() - mask_image.height()) / 2); | 102 (view_->height() - mask_image.height()) / 2); |
104 } | 103 } |
105 | 104 |
106 void GlowHoverController::AnimationEnded(const ui::Animation* animation) { | 105 void GlowHoverController::AnimationEnded(const ui::Animation* animation) { |
107 view_->SchedulePaint(); | 106 view_->SchedulePaint(); |
108 } | 107 } |
109 | 108 |
110 void GlowHoverController::AnimationProgressed(const ui::Animation* animation) { | 109 void GlowHoverController::AnimationProgressed(const ui::Animation* animation) { |
111 view_->SchedulePaint(); | 110 view_->SchedulePaint(); |
112 } | 111 } |
113 | 112 |
114 } // namespace views | 113 } // namespace views |
OLD | NEW |