Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ui/views/controls/non_md_slider.h" | |
| 6 | |
| 7 #include "ui/base/resource/resource_bundle.h" | |
| 8 #include "ui/gfx/canvas.h" | |
| 9 #include "ui/gfx/geometry/point.h" | |
| 10 #include "ui/gfx/geometry/rect.h" | |
| 11 #include "ui/resources/grit/ui_resources.h" | |
| 12 #include "ui/views/controls/slider.h" | |
| 13 #include "ui/views/resources/grit/views_resources.h" | |
| 14 | |
| 15 namespace { | |
| 16 const int kBarImagesActive[] = { | |
| 17 IDR_SLIDER_ACTIVE_LEFT, IDR_SLIDER_ACTIVE_CENTER, IDR_SLIDER_PRESSED_CENTER, | |
|
msw
2017/02/16 21:08:20
Please also remove the now unused IDR_SLIDER_* ids
Evan Stade
2017/02/16 22:48:01
whoops. Thanks for catching.
| |
| 18 IDR_SLIDER_PRESSED_RIGHT, | |
| 19 }; | |
| 20 | |
| 21 const int kBarImagesDisabled[] = { | |
| 22 IDR_SLIDER_DISABLED_LEFT, IDR_SLIDER_DISABLED_CENTER, | |
| 23 IDR_SLIDER_DISABLED_CENTER, IDR_SLIDER_DISABLED_RIGHT, | |
| 24 }; | |
| 25 | |
| 26 // The image chunks. | |
| 27 enum BorderElements { | |
| 28 LEFT, | |
| 29 CENTER_LEFT, | |
| 30 CENTER_RIGHT, | |
| 31 RIGHT, | |
| 32 }; | |
| 33 } // namespace | |
| 34 | |
| 35 namespace views { | |
| 36 | |
| 37 NonMdSlider::NonMdSlider(SliderListener* listener) | |
| 38 : Slider(listener), | |
| 39 bar_active_images_(kBarImagesActive), | |
| 40 bar_disabled_images_(kBarImagesDisabled) { | |
| 41 UpdateSliderAppearance(true); | |
| 42 } | |
| 43 | |
| 44 NonMdSlider::~NonMdSlider() {} | |
| 45 | |
| 46 void NonMdSlider::OnPaint(gfx::Canvas* canvas) { | |
| 47 Slider::OnPaint(canvas); | |
| 48 gfx::Rect content = GetContentsBounds(); | |
| 49 float value = GetAnimatingValue(); | |
| 50 | |
| 51 // Inset the slider bar a little bit, so that the left or the right end of | |
| 52 // the slider bar will not be exposed under the thumb button when the thumb | |
| 53 // button slides to the left most or right most position. | |
| 54 const int kBarInsetX = 2; | |
| 55 int bar_width = content.width() - kBarInsetX * 2; | |
| 56 int bar_cy = content.height() / 2 - bar_height_ / 2; | |
| 57 | |
| 58 int w = content.width() - thumb_->width(); | |
| 59 int full = value * w; | |
| 60 int middle = std::max(full, images_[LEFT]->width()); | |
| 61 | |
| 62 canvas->Save(); | |
| 63 canvas->Translate(gfx::Vector2d(kBarInsetX, bar_cy)); | |
| 64 canvas->DrawImageInt(*images_[LEFT], 0, 0); | |
| 65 canvas->DrawImageInt(*images_[RIGHT], bar_width - images_[RIGHT]->width(), 0); | |
| 66 canvas->TileImageInt(*images_[CENTER_LEFT], images_[LEFT]->width(), 0, | |
| 67 middle - images_[LEFT]->width(), bar_height_); | |
| 68 canvas->TileImageInt(*images_[CENTER_RIGHT], middle, 0, | |
| 69 bar_width - middle - images_[RIGHT]->width(), | |
| 70 bar_height_); | |
| 71 canvas->Restore(); | |
| 72 | |
| 73 // Paint slider thumb. | |
| 74 int button_cx = content.x() + full; | |
| 75 int thumb_y = content.height() / 2 - thumb_->height() / 2; | |
| 76 canvas->DrawImageInt(*thumb_, button_cx, thumb_y); | |
| 77 } | |
| 78 | |
| 79 const char* NonMdSlider::GetClassName() const { | |
| 80 return "NonMdSlider"; | |
| 81 } | |
| 82 | |
| 83 void NonMdSlider::UpdateState(bool control_on) { | |
| 84 UpdateSliderAppearance(control_on); | |
| 85 } | |
| 86 | |
| 87 void NonMdSlider::UpdateSliderAppearance(bool control_on) { | |
| 88 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | |
| 89 if (control_on) { | |
| 90 thumb_ = rb.GetImageNamed(IDR_SLIDER_ACTIVE_THUMB).ToImageSkia(); | |
| 91 for (int i = 0; i < 4; ++i) | |
| 92 images_[i] = rb.GetImageNamed(bar_active_images_[i]).ToImageSkia(); | |
| 93 } else { | |
| 94 thumb_ = rb.GetImageNamed(IDR_SLIDER_DISABLED_THUMB).ToImageSkia(); | |
| 95 for (int i = 0; i < 4; ++i) | |
| 96 images_[i] = rb.GetImageNamed(bar_disabled_images_[i]).ToImageSkia(); | |
| 97 } | |
| 98 bar_height_ = images_[LEFT]->height(); | |
| 99 SchedulePaint(); | |
| 100 } | |
| 101 | |
| 102 int NonMdSlider::GetThumbWidth() { | |
| 103 return thumb_->width(); | |
| 104 } | |
| 105 | |
| 106 } // namespace views | |
| OLD | NEW |