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

Unified Diff: ui/views/controls/progress_bar.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/progress_bar.h ('k') | ui/views/controls/progress_bar_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/progress_bar.cc
diff --git a/ui/views/controls/progress_bar.cc b/ui/views/controls/progress_bar.cc
deleted file mode 100644
index 0d6ed17f5e0dbc304b97794c31ed32abd8669abd..0000000000000000000000000000000000000000
--- a/ui/views/controls/progress_bar.cc
+++ /dev/null
@@ -1,323 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/controls/progress_bar.h"
-
-#include <algorithm>
-#include <string>
-
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkPaint.h"
-#include "third_party/skia/include/core/SkXfermode.h"
-#include "third_party/skia/include/effects/SkGradientShader.h"
-#include "ui/accessibility/ax_view_state.h"
-#include "ui/gfx/canvas.h"
-
-namespace {
-
-// Progress bar's border width.
-const int kBorderWidth = 1;
-
-// Corner radius for the progress bar's border.
-const int kCornerRadius = 2;
-
-// The width of the highlight at the right of the progress bar.
-const int kHighlightWidth = 18;
-
-const SkColor kBackgroundColor = SkColorSetRGB(230, 230, 230);
-const SkColor kBackgroundBorderColor = SkColorSetRGB(208, 208, 208);
-const SkColor kBarBorderColor = SkColorSetRGB(65, 137, 237);
-const SkColor kBarTopColor = SkColorSetRGB(110, 188, 249);
-const SkColor kBarColorStart = SkColorSetRGB(86, 167, 247);
-const SkColor kBarColorEnd = SkColorSetRGB(76, 148, 245);
-const SkColor kBarHighlightEnd = SkColorSetRGB(114, 206, 251);
-const SkColor kDisabledBarBorderColor = SkColorSetRGB(191, 191, 191);
-const SkColor kDisabledBarColorStart = SkColorSetRGB(224, 224, 224);
-const SkColor kDisabledBarColorEnd = SkColorSetRGB(212, 212, 212);
-
-void AddRoundRectPathWithPadding(int x, int y,
- int w, int h,
- int corner_radius,
- SkScalar padding,
- SkPath* path) {
- DCHECK(path);
- SkRect rect;
- rect.set(
- SkIntToScalar(x) + padding, SkIntToScalar(y) + padding,
- SkIntToScalar(x + w) - padding, SkIntToScalar(y + h) - padding);
- path->addRoundRect(
- rect,
- SkIntToScalar(corner_radius) - padding,
- SkIntToScalar(corner_radius) - padding);
-}
-
-void AddRoundRectPath(int x, int y,
- int w, int h,
- int corner_radius,
- SkPath* path) {
- AddRoundRectPathWithPadding(x, y, w, h, corner_radius, SK_ScalarHalf, path);
-}
-
-void FillRoundRect(gfx::Canvas* canvas,
- int x, int y,
- int w, int h,
- int corner_radius,
- const SkColor colors[],
- const SkScalar points[],
- int count,
- bool gradient_horizontal) {
- SkPath path;
- AddRoundRectPath(x, y, w, h, corner_radius, &path);
- SkPaint paint;
- paint.setStyle(SkPaint::kFill_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
-
- SkPoint p[2];
- p[0].iset(x, y);
- if (gradient_horizontal) {
- p[1].iset(x + w, y);
- } else {
- p[1].iset(x, y + h);
- }
- skia::RefPtr<SkShader> s = skia::AdoptRef(SkGradientShader::CreateLinear(
- p, colors, points, count, SkShader::kClamp_TileMode));
- paint.setShader(s.get());
-
- canvas->DrawPath(path, paint);
-}
-
-void FillRoundRect(gfx::Canvas* canvas,
- int x, int y,
- int w, int h,
- int corner_radius,
- SkColor gradient_start_color,
- SkColor gradient_end_color,
- bool gradient_horizontal) {
- if (gradient_start_color != gradient_end_color) {
- SkColor colors[2] = { gradient_start_color, gradient_end_color };
- FillRoundRect(canvas, x, y, w, h, corner_radius,
- colors, NULL, 2, gradient_horizontal);
- } else {
- SkPath path;
- AddRoundRectPath(x, y, w, h, corner_radius, &path);
- SkPaint paint;
- paint.setStyle(SkPaint::kFill_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
- paint.setColor(gradient_start_color);
- canvas->DrawPath(path, paint);
- }
-}
-
-void StrokeRoundRect(gfx::Canvas* canvas,
- int x, int y,
- int w, int h,
- int corner_radius,
- SkColor stroke_color,
- int stroke_width) {
- SkPath path;
- AddRoundRectPath(x, y, w, h, corner_radius, &path);
- SkPaint paint;
- paint.setShader(NULL);
- paint.setColor(stroke_color);
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
- paint.setStrokeWidth(SkIntToScalar(stroke_width));
- canvas->DrawPath(path, paint);
-}
-
-} // namespace
-
-namespace views {
-
-// static
-const char ProgressBar::kViewClassName[] = "ProgressBar";
-
-ProgressBar::ProgressBar()
- : min_display_value_(0.0),
- max_display_value_(1.0),
- current_value_(0.0) {
-}
-
-ProgressBar::~ProgressBar() {
-}
-
-double ProgressBar::GetNormalizedValue() const {
- const double capped_value = std::min(
- std::max(current_value_, min_display_value_), max_display_value_);
- return (capped_value - min_display_value_) /
- (max_display_value_ - min_display_value_);
-}
-
-void ProgressBar::SetDisplayRange(double min_display_value,
- double max_display_value) {
- if (min_display_value != min_display_value_ ||
- max_display_value != max_display_value_) {
- DCHECK(min_display_value < max_display_value);
- min_display_value_ = min_display_value;
- max_display_value_ = max_display_value;
- SchedulePaint();
- }
-}
-
-void ProgressBar::SetValue(double value) {
- if (value != current_value_) {
- current_value_ = value;
- SchedulePaint();
- }
-}
-
-void ProgressBar::SetTooltipText(const base::string16& tooltip_text) {
- tooltip_text_ = tooltip_text;
-}
-
-bool ProgressBar::GetTooltipText(const gfx::Point& p,
- base::string16* tooltip) const {
- DCHECK(tooltip);
- *tooltip = tooltip_text_;
- return !tooltip_text_.empty();
-}
-
-void ProgressBar::GetAccessibleState(ui::AXViewState* state) {
- state->role = ui::AX_ROLE_PROGRESS_INDICATOR;
- state->AddStateFlag(ui::AX_STATE_READ_ONLY);
-}
-
-gfx::Size ProgressBar::GetPreferredSize() const {
- gfx::Size pref_size(100, 11);
- gfx::Insets insets = GetInsets();
- pref_size.Enlarge(insets.width(), insets.height());
- return pref_size;
-}
-
-const char* ProgressBar::GetClassName() const {
- return kViewClassName;
-}
-
-void ProgressBar::OnPaint(gfx::Canvas* canvas) {
- gfx::Rect content_bounds = GetContentsBounds();
- int bar_left = content_bounds.x();
- int bar_top = content_bounds.y();
- int bar_width = content_bounds.width();
- int bar_height = content_bounds.height();
-
- const int progress_width =
- static_cast<int>(bar_width * GetNormalizedValue() + 0.5);
-
- // Draw background.
- FillRoundRect(canvas,
- bar_left, bar_top, bar_width, bar_height,
- kCornerRadius,
- kBackgroundColor, kBackgroundColor,
- false);
- StrokeRoundRect(canvas,
- bar_left, bar_top,
- bar_width, bar_height,
- kCornerRadius,
- kBackgroundBorderColor,
- kBorderWidth);
-
- if (progress_width > 1) {
- // Draw inner if wide enough.
- if (progress_width > kBorderWidth * 2) {
- canvas->Save();
-
- SkPath inner_path;
- AddRoundRectPathWithPadding(
- bar_left, bar_top, progress_width, bar_height,
- kCornerRadius,
- 0,
- &inner_path);
- canvas->ClipPath(inner_path, false);
-
- const SkColor bar_colors[] = {
- kBarTopColor,
- kBarTopColor,
- kBarColorStart,
- kBarColorEnd,
- kBarColorEnd,
- };
- // We want a thin 1-pixel line for kBarTopColor.
- SkScalar scalar_height = SkIntToScalar(bar_height);
- SkScalar highlight_width = SkScalarDiv(SK_Scalar1, scalar_height);
- SkScalar border_width = SkScalarDiv(SkIntToScalar(kBorderWidth),
- scalar_height);
- const SkScalar bar_points[] = {
- 0,
- border_width,
- border_width + highlight_width,
- SK_Scalar1 - border_width,
- SK_Scalar1,
- };
-
- const SkColor disabled_bar_colors[] = {
- kDisabledBarColorStart,
- kDisabledBarColorStart,
- kDisabledBarColorEnd,
- kDisabledBarColorEnd,
- };
-
- const SkScalar disabled_bar_points[] = {
- 0,
- border_width,
- SK_Scalar1 - border_width,
- SK_Scalar1
- };
-
- // Do not start from (kBorderWidth, kBorderWidth) because it makes gaps
- // between the inner and the border.
- FillRoundRect(canvas,
- bar_left, bar_top,
- progress_width, bar_height,
- kCornerRadius,
- enabled() ? bar_colors : disabled_bar_colors,
- enabled() ? bar_points : disabled_bar_points,
- enabled() ? arraysize(bar_colors) :
- arraysize(disabled_bar_colors),
- false);
-
- if (enabled()) {
- // Draw the highlight to the right.
- const SkColor highlight_colors[] = {
- SkColorSetA(kBarHighlightEnd, 0),
- kBarHighlightEnd,
- kBarHighlightEnd,
- };
- const SkScalar highlight_points[] = {
- 0,
- SK_Scalar1 - SkScalarDiv(SkIntToScalar(kBorderWidth), scalar_height),
- SK_Scalar1,
- };
- SkPaint paint;
- paint.setStyle(SkPaint::kFill_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
-
- SkPoint p[2];
- int highlight_left =
- std::max(0, progress_width - kHighlightWidth - kBorderWidth);
- p[0].iset(highlight_left, 0);
- p[1].iset(progress_width, 0);
- skia::RefPtr<SkShader> s =
- skia::AdoptRef(SkGradientShader::CreateLinear(
- p, highlight_colors, highlight_points,
- arraysize(highlight_colors), SkShader::kClamp_TileMode));
- paint.setShader(s.get());
- paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
- canvas->DrawRect(gfx::Rect(highlight_left, 0,
- kHighlightWidth + kBorderWidth, bar_height),
- paint);
- }
-
- canvas->Restore();
- }
-
- // Draw bar stroke
- StrokeRoundRect(canvas,
- bar_left, bar_top, progress_width, bar_height,
- kCornerRadius,
- enabled() ? kBarBorderColor : kDisabledBarBorderColor,
- kBorderWidth);
- }
-}
-
-} // namespace views
« no previous file with comments | « ui/views/controls/progress_bar.h ('k') | ui/views/controls/progress_bar_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698