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

Side by Side Diff: ui/views/controls/glow_hover_controller.cc

Issue 10704113: Make tab/tabstrip high density compatible (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « ui/ui.gyp ('k') | no next file » | 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/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/skbitmap_operations.h" 10 #include "ui/gfx/image/image_skia_operations.h"
11 #include "ui/views/view.h" 11 #include "ui/views/view.h"
12 12
13 namespace views { 13 namespace views {
14 14
15 // Amount to scale the opacity. 15 // Amount to scale the opacity.
16 static const double kOpacityScale = 0.5; 16 static const double kOpacityScale = 0.5;
17 17
18 // How long the hover state takes. 18 // How long the hover state takes.
19 static const int kHoverDurationMs = 400; 19 static const int kHoverDurationMs = 400;
20 20
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 return animation_.IsShowing() || animation_.is_animating(); 63 return animation_.IsShowing() || animation_.is_animating();
64 } 64 }
65 65
66 void GlowHoverController::Draw(gfx::Canvas* canvas, 66 void GlowHoverController::Draw(gfx::Canvas* canvas,
67 const gfx::ImageSkia& mask_image) const { 67 const gfx::ImageSkia& mask_image) const {
68 if (!ShouldDraw()) 68 if (!ShouldDraw())
69 return; 69 return;
70 70
71 // Draw a radial gradient to hover_canvas. 71 // Draw a radial gradient to hover_canvas.
72 gfx::Canvas hover_canvas(gfx::Size(mask_image.width(), mask_image.height()), 72 gfx::Canvas hover_canvas(gfx::Size(mask_image.width(), mask_image.height()),
73 canvas->scale_factor(),
73 false); 74 false);
74 75
75 // Draw a radial gradient to hover_canvas. 76 // Draw a radial gradient to hover_canvas.
76 int radius = view_->width() / 3; 77 int radius = view_->width() / 3;
77 78
78 SkPoint center_point; 79 SkPoint center_point;
79 center_point.iset(location_.x(), location_.y()); 80 center_point.iset(location_.x(), location_.y());
80 SkColor colors[2]; 81 SkColor colors[2];
81 int hover_alpha = 82 int hover_alpha =
82 static_cast<int>(255 * kOpacityScale * animation_.GetCurrentValue()); 83 static_cast<int>(255 * kOpacityScale * animation_.GetCurrentValue());
83 colors[0] = SkColorSetARGB(hover_alpha, 255, 255, 255); 84 colors[0] = SkColorSetARGB(hover_alpha, 255, 255, 255);
84 colors[1] = SkColorSetARGB(0, 255, 255, 255); 85 colors[1] = SkColorSetARGB(0, 255, 255, 255);
85 SkShader* shader = SkGradientShader::CreateRadial(center_point, 86 SkShader* shader = SkGradientShader::CreateRadial(center_point,
86 SkIntToScalar(radius), colors, NULL, 2, SkShader::kClamp_TileMode); 87 SkIntToScalar(radius), colors, NULL, 2, SkShader::kClamp_TileMode);
87 // Shader can end up null when radius = 0. 88 // Shader can end up null when radius = 0.
88 // If so, this results in default full tab glow behavior. 89 // If so, this results in default full tab glow behavior.
89 if (shader) { 90 if (shader) {
90 SkPaint paint; 91 SkPaint paint;
91 paint.setStyle(SkPaint::kFill_Style); 92 paint.setStyle(SkPaint::kFill_Style);
92 paint.setAntiAlias(true); 93 paint.setAntiAlias(true);
93 paint.setShader(shader); 94 paint.setShader(shader);
94 shader->unref(); 95 shader->unref();
95 hover_canvas.DrawRect(gfx::Rect(location_.x() - radius, 96 hover_canvas.DrawRect(gfx::Rect(location_.x() - radius,
96 location_.y() - radius, 97 location_.y() - radius,
97 radius * 2, radius * 2), paint); 98 radius * 2, radius * 2), paint);
98 } 99 }
99 gfx::ImageSkia result = SkBitmapOperations::CreateMaskedBitmap( 100 gfx::ImageSkia result = gfx::ImageSkiaOperations::CreateMaskedImage(
100 hover_canvas.ExtractBitmap(), mask_image); 101 gfx::ImageSkia(hover_canvas.ExtractImageSkiaRep()), mask_image);
101 canvas->DrawImageInt(result, (view_->width() - mask_image.width()) / 2, 102 canvas->DrawImageInt(result, (view_->width() - mask_image.width()) / 2,
102 (view_->height() - mask_image.height()) / 2); 103 (view_->height() - mask_image.height()) / 2);
103 } 104 }
104 105
105 void GlowHoverController::AnimationEnded(const ui::Animation* animation) { 106 void GlowHoverController::AnimationEnded(const ui::Animation* animation) {
106 view_->SchedulePaint(); 107 view_->SchedulePaint();
107 } 108 }
108 109
109 void GlowHoverController::AnimationProgressed(const ui::Animation* animation) { 110 void GlowHoverController::AnimationProgressed(const ui::Animation* animation) {
110 view_->SchedulePaint(); 111 view_->SchedulePaint();
111 } 112 }
112 113
113 } // namespace views 114 } // namespace views
OLDNEW
« no previous file with comments | « ui/ui.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698