1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/rounded_rect_painter.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/helper.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/effects/SkBlurMaskFilter.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/skia/include/effects/SkGradientShader.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas_skia.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/border.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/painter.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kScreenTopColor = SkColorSetRGB(250, 251, 251); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kScreenBottomColor = SkColorSetRGB(204, 209, 212); 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kScreenShadowColor = SkColorSetARGB(64, 34, 54, 115); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kShadowStrokeColor = 0; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kScreenShadow = 10; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void DrawRoundedRect( 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Canvas* canvas, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int x, int y, 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int w, int h, 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int corner_radius, 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor top_color, SkColor bottom_color, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor stroke_color) { 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkRect rect; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect.set( 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x), SkIntToScalar(y), 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x + w), SkIntToScalar(y + h)); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkPath path; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch path.addRoundRect( 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect, SkIntToScalar(corner_radius), SkIntToScalar(corner_radius)); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkPaint paint; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setStyle(SkPaint::kFill_Style); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setFlags(SkPaint::kAntiAlias_Flag); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (top_color != bottom_color) { 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkPoint p[2]; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p[0].set(SkIntToScalar(x), SkIntToScalar(y)); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p[1].set(SkIntToScalar(x), SkIntToScalar(y + h)); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor colors[2] = { top_color, bottom_color }; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkShader* s = 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkGradientShader::CreateLinear(p, colors, NULL, 2, 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkShader::kClamp_TileMode, NULL); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setShader(s); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Need to unref shader, otherwise never deleted. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch s->unref(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setColor(top_color); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas->AsCanvasSkia()->drawPath(path, paint); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (stroke_color != 0) { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Expand rect by 0.5px so resulting stroke will take the whole pixel. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect.set( 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x) - SK_ScalarHalf, 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(y) - SK_ScalarHalf, 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x + w) + SK_ScalarHalf, 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(y + h) + SK_ScalarHalf); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setShader(NULL); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setStyle(SkPaint::kStroke_Style); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setStrokeWidth(SkIntToScalar(SK_Scalar1)); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setColor(stroke_color); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas->AsCanvasSkia()->drawRoundRect( 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect, 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(corner_radius), SkIntToScalar(corner_radius), 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void DrawRoundedRectShadow( 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Canvas* canvas, 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int x, int y, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int w, int h, 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int corner_radius, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int shadow, 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color) { 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkPaint paint; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setFlags(SkPaint::kAntiAlias_Flag); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setStyle(SkPaint::kFill_Style); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setColor(color); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkMaskFilter* filter = SkBlurMaskFilter::Create( 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch shadow / 2, SkBlurMaskFilter::kNormal_BlurStyle); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setMaskFilter(filter)->unref(); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkRect rect; 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect.set( 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x + shadow / 2), SkIntToScalar(y + shadow / 2), 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(x + w - shadow / 2), SkIntToScalar(y + h - shadow / 2)); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas->AsCanvasSkia()->drawRoundRect( 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rect, 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(corner_radius), SkIntToScalar(corner_radius), 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setMaskFilter(NULL); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void DrawRectWithBorder(int w, 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int h, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BorderDefinition* const border, 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Canvas* canvas) { 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int padding = border->padding; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor padding_color = border->padding_color; 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int shadow = border->shadow; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor shadow_color = border->shadow_color; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int corner_radius = border->corner_radius; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor top_color = border->top_color; 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor bottom_color = border->bottom_color; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (padding > 0) { 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkPaint paint; 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint.setColor(padding_color); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas->AsCanvasSkia()->drawRectCoords( 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(w), SkIntToScalar(h), 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch paint); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (border->shadow > 0) { 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DrawRoundedRectShadow( 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas, 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch padding, padding, 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch w - 2 * padding, h - 2 * padding, 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch corner_radius, 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch shadow, shadow_color); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DrawRoundedRect( 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch canvas, 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch padding + shadow, 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch padding + shadow - shadow / 3, 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch w - 2 * padding - 2 * shadow, 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch h - 2 * padding - 2 * shadow, 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch corner_radius, 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch top_color, bottom_color, 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch shadow ? kShadowStrokeColor : 0); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This Painter can be used to draw a background consistent cross all login 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// screens. It draws a rect with padding, shadow and rounded corners. 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RoundedRectPainter : public views::Painter { 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit RoundedRectPainter(const BorderDefinition* const border) 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : border_(border) { 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Paint(int w, int h, gfx::Canvas* canvas) { 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DrawRectWithBorder(w, h, border_, canvas); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BorderDefinition* const border_; 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(RoundedRectPainter); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This border can be used to draw shadow and rounded corners across all 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// login screens. 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RoundedRectBorder : public views::Border { 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit RoundedRectBorder(const BorderDefinition* const border) 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : border_(border) { 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Paint(const views::View& view, gfx::Canvas* canvas) const; 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GetInsets(gfx::Insets* insets) const; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BorderDefinition* const border_; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(RoundedRectBorder); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RoundedRectBorder::Paint(const views::View& view, 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Canvas* canvas) const { 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Don't paint anything. RoundedRectBorder is used to provide insets only. 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RoundedRectBorder::GetInsets(gfx::Insets* insets) const { 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(insets); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int shadow = border_->shadow; 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int inset = border_->corner_radius / 2 + border_->padding + shadow; 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch insets->Set(inset - shadow / 3, inset, inset + shadow / 3, inset); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Simple solid round background. 1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass RoundedBackground : public views::Background { 1873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick explicit RoundedBackground(int corner_radius, 1893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int stroke_width, 1903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const SkColor& background_color, 1913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const SkColor& stroke_color) 1923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : corner_radius_(corner_radius), 1933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick stroke_width_(stroke_width), 1943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick stroke_color_(stroke_color) { 1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetNativeControlColor(background_color); 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Paint(gfx::Canvas* canvas, views::View* view) const { 1993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkRect rect; 2003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick rect.iset(0, 0, view->width(), view->height()); 2013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkPath path; 2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick path.addRoundRect(rect, 2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkIntToScalar(corner_radius_), 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkIntToScalar(corner_radius_)); 2053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Draw interior. 2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkPaint paint; 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setStyle(SkPaint::kFill_Style); 2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setFlags(SkPaint::kAntiAlias_Flag); 2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setColor(get_color()); 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick canvas->AsCanvasSkia()->drawPath(path, paint); 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Redraw boundary region with correspoinding color. 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setStyle(SkPaint::kStroke_Style); 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setStrokeWidth(SkIntToScalar(stroke_width_)); 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick paint.setColor(stroke_color_); 2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick canvas->AsCanvasSkia()->drawPath(path, paint); 2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int corner_radius_; 2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int stroke_width_; 2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor stroke_color_; 2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(RoundedBackground); 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst BorderDefinition BorderDefinition::kScreenBorder = { 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SK_ColorBLACK, 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kScreenShadow, 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kScreenShadowColor, 2343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick login::kScreenCornerRadius, 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kScreenTopColor, 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kScreenBottomColor 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst BorderDefinition BorderDefinition::kUserBorder = { 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 0, 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SK_ColorBLACK, 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 0, 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kScreenShadowColor, 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick login::kUserCornerRadius, 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kScreenTopColor, 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kScreenBottomColor 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Painter* CreateWizardPainter(const BorderDefinition* const border) { 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new RoundedRectPainter(border); 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Border* CreateWizardBorder(const BorderDefinition* const border) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new RoundedRectBorder(border); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickviews::Background* CreateRoundedBackground(int corner_radius, 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int stroke_width, 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor background_color, 2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor stroke_color) { 2613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return new RoundedBackground( 2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick corner_radius, stroke_width, background_color, stroke_color); 2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 266