| Index: views/controls/progress_bar.cc
|
| diff --git a/views/controls/progress_bar.cc b/views/controls/progress_bar.cc
|
| index 46b89a2f684acfb6db8371cc31c5ffa6d75f6e0c..70915002e06171efdf1534cf1efbed7508474fdf 100644
|
| --- a/views/controls/progress_bar.cc
|
| +++ b/views/controls/progress_bar.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "views/controls/progress_bar.h"
|
|
|
| +#include <algorithm>
|
| #include <string>
|
|
|
| #include "base/logging.h"
|
| @@ -20,6 +21,9 @@
|
| #include "views/border.h"
|
| #include "views/painter.h"
|
|
|
| +using std::max;
|
| +using std::min;
|
| +
|
| namespace {
|
|
|
| // Corner radius for the progress bar's border.
|
| @@ -28,11 +32,11 @@ const int kCornerRadius = 3;
|
| // Progress bar's border width
|
| const int kBorderWidth = 1;
|
|
|
| -static void AddRoundRectPathWithPadding(int x, int y,
|
| - int w, int h,
|
| - int corner_radius,
|
| - SkScalar padding,
|
| - SkPath* path) {
|
| +void AddRoundRectPathWithPadding(int x, int y,
|
| + int w, int h,
|
| + int corner_radius,
|
| + SkScalar padding,
|
| + SkPath* path) {
|
| DCHECK(path);
|
| if (path == NULL)
|
| return;
|
| @@ -46,22 +50,22 @@ static void AddRoundRectPathWithPadding(int x, int y,
|
| SkIntToScalar(corner_radius) - padding);
|
| }
|
|
|
| -static void AddRoundRectPath(int x, int y,
|
| - int w, int h,
|
| - int corner_radius,
|
| - SkPath* path) {
|
| +void AddRoundRectPath(int x, int y,
|
| + int w, int h,
|
| + int corner_radius,
|
| + SkPath* path) {
|
| static const SkScalar half = SkIntToScalar(1) / 2;
|
| AddRoundRectPathWithPadding(x, y, w, h, corner_radius, half, path);
|
| }
|
|
|
| -static 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) {
|
| +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;
|
| @@ -84,13 +88,13 @@ static void FillRoundRect(gfx::Canvas* canvas,
|
| canvas->AsCanvasSkia()->drawPath(path, paint);
|
| }
|
|
|
| -static 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) {
|
| +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,
|
| @@ -106,12 +110,12 @@ static void FillRoundRect(gfx::Canvas* canvas,
|
| }
|
| }
|
|
|
| -static void StrokeRoundRect(gfx::Canvas* canvas,
|
| - int x, int y,
|
| - int w, int h,
|
| - int corner_radius,
|
| - SkColor stroke_color,
|
| - int stroke_width) {
|
| +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;
|
| @@ -129,11 +133,11 @@ namespace views {
|
|
|
| // static
|
| const char ProgressBar::kViewClassName[] = "views/ProgressBar";
|
| -// static: progress bar's maximum value.
|
| -const int ProgressBar::kMaxProgress = 100;
|
| -
|
|
|
| -ProgressBar::ProgressBar(): progress_(0) {
|
| +ProgressBar::ProgressBar()
|
| + : min_display_value_(0.0),
|
| + max_display_value_(1.0),
|
| + current_value_(0.0) {
|
| }
|
|
|
| ProgressBar::~ProgressBar() {
|
| @@ -143,7 +147,23 @@ gfx::Size ProgressBar::GetPreferredSize() {
|
| return gfx::Size(100, 16);
|
| }
|
|
|
| +std::string ProgressBar::GetClassName() const {
|
| + return kViewClassName;
|
| +}
|
| +
|
| +void ProgressBar::GetAccessibleState(ui::AccessibleViewState* state) {
|
| + state->role = ui::AccessibilityTypes::ROLE_PROGRESSBAR;
|
| + state->state = ui::AccessibilityTypes::STATE_READONLY;
|
| +}
|
| +
|
| void ProgressBar::OnPaint(gfx::Canvas* canvas) {
|
| + const double capped_value =
|
| + min(max(current_value_, min_display_value_), max_display_value_);
|
| + const double capped_fraction =
|
| + (capped_value - min_display_value_) /
|
| + (max_display_value_ - min_display_value_);
|
| + const int progress_width = static_cast<int>(width() * capped_fraction + 0.5);
|
| +
|
| #if defined(OS_CHROMEOS)
|
| const SkColor background_colors[] = {
|
| SkColorSetRGB(0xBB, 0xBB, 0xBB),
|
| @@ -173,10 +193,8 @@ void ProgressBar::OnPaint(gfx::Canvas* canvas) {
|
| background_border_color,
|
| kBorderWidth);
|
|
|
| - if (progress_ * width() > 1) {
|
| - int progress_width = progress_ * width() / kMaxProgress;
|
| -
|
| - bool enabled = IsEnabled();
|
| + if (progress_width > 1) {
|
| + const bool enabled = IsEnabled();
|
|
|
| const SkColor bar_color_start = enabled ?
|
| SkColorSetRGB(100, 116, 147) :
|
| @@ -253,10 +271,10 @@ void ProgressBar::OnPaint(gfx::Canvas* canvas) {
|
| background_color_start,
|
| background_color_end,
|
| false);
|
| - if (progress_ * width() > 1) {
|
| + if (progress_width > 1) {
|
| FillRoundRect(canvas,
|
| 0, 0,
|
| - progress_ * width() / kMaxProgress, height(),
|
| + progress_width, height(),
|
| kCornerRadius,
|
| bar_color_start,
|
| bar_color_end,
|
| @@ -271,31 +289,6 @@ void ProgressBar::OnPaint(gfx::Canvas* canvas) {
|
| #endif
|
| }
|
|
|
| -std::string ProgressBar::GetClassName() const {
|
| - return kViewClassName;
|
| -}
|
| -
|
| -void ProgressBar::SetProgress(int progress) {
|
| - progress_ = progress;
|
| - if (progress_ < 0)
|
| - progress_ = 0;
|
| - else if (progress_ > kMaxProgress)
|
| - progress_ = kMaxProgress;
|
| - SchedulePaint();
|
| -}
|
| -
|
| -int ProgressBar::GetProgress() const {
|
| - return progress_;
|
| -}
|
| -
|
| -void ProgressBar::AddProgress(int tick) {
|
| - SetProgress(progress_ + tick);
|
| -}
|
| -
|
| -void ProgressBar::SetTooltipText(const std::wstring& tooltip_text) {
|
| - tooltip_text_ = WideToUTF16Hack(tooltip_text);
|
| -}
|
| -
|
| bool ProgressBar::GetTooltipText(const gfx::Point& p, std::wstring* tooltip) {
|
| DCHECK(tooltip);
|
| if (tooltip == NULL)
|
| @@ -304,14 +297,26 @@ bool ProgressBar::GetTooltipText(const gfx::Point& p, std::wstring* tooltip) {
|
| return !tooltip_text_.empty();
|
| }
|
|
|
| -void ProgressBar::OnEnabledChanged() {
|
| - View::OnEnabledChanged();
|
| - // TODO(denisromanov): Need to switch progress bar color here?
|
| +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::GetAccessibleState(ui::AccessibleViewState* state) {
|
| - state->role = ui::AccessibilityTypes::ROLE_PROGRESSBAR;
|
| - state->state = ui::AccessibilityTypes::STATE_READONLY;
|
| +void ProgressBar::SetValue(double value) {
|
| + if (value != current_value_) {
|
| + current_value_ = value;
|
| + SchedulePaint();
|
| + }
|
| +}
|
| +
|
| +void ProgressBar::SetTooltipText(const std::wstring& tooltip_text) {
|
| + tooltip_text_ = WideToUTF16Hack(tooltip_text);
|
| }
|
|
|
| } // namespace views
|
|
|