OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013 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/scrollbar/kennedy_scroll_bar.h" | |
6 | |
7 #include "third_party/skia/include/core/SkColor.h" | |
8 #include "third_party/skia/include/core/SkXfermode.h" | |
9 #include "ui/gfx/canvas.h" | |
10 #include "ui/views/background.h" | |
11 #include "ui/views/border.h" | |
12 #include "ui/views/controls/scrollbar/base_scroll_bar_thumb.h" | |
13 | |
14 namespace views { | |
15 namespace { | |
16 | |
17 const int kScrollbarWidth = 10; | |
18 const int kThumbMinimumSize = kScrollbarWidth * 2; | |
19 const SkColor kBorderColor = SkColorSetARGB(32, 0, 0, 0); | |
20 const SkColor kThumbHoverColor = SkColorSetARGB(128, 0, 0, 0); | |
21 const SkColor kThumbDefaultColor = SkColorSetARGB(64, 0, 0, 0); | |
22 const SkColor kTrackHoverColor = SkColorSetARGB(32, 0, 0, 0); | |
23 | |
24 class KennedyScrollBarThumb : public BaseScrollBarThumb { | |
25 public: | |
26 explicit KennedyScrollBarThumb(BaseScrollBar* scroll_bar); | |
27 ~KennedyScrollBarThumb() override; | |
28 | |
29 protected: | |
30 // View overrides: | |
31 gfx::Size GetPreferredSize() const override; | |
32 void OnPaint(gfx::Canvas* canvas) override; | |
33 | |
34 private: | |
35 DISALLOW_COPY_AND_ASSIGN(KennedyScrollBarThumb); | |
36 }; | |
37 | |
38 KennedyScrollBarThumb::KennedyScrollBarThumb(BaseScrollBar* scroll_bar) | |
39 : BaseScrollBarThumb(scroll_bar) { | |
40 } | |
41 | |
42 KennedyScrollBarThumb::~KennedyScrollBarThumb() { | |
43 } | |
44 | |
45 gfx::Size KennedyScrollBarThumb::GetPreferredSize() const { | |
46 return gfx::Size(kThumbMinimumSize, kThumbMinimumSize); | |
47 } | |
48 | |
49 void KennedyScrollBarThumb::OnPaint(gfx::Canvas* canvas) { | |
50 gfx::Rect local_bounds(GetLocalBounds()); | |
51 canvas->FillRect(local_bounds, | |
52 (GetState() == CustomButton::STATE_HOVERED || | |
53 GetState() == CustomButton::STATE_PRESSED) ? | |
54 kThumbHoverColor : kThumbDefaultColor); | |
55 canvas->DrawRect(local_bounds, kBorderColor); | |
56 } | |
57 | |
58 } // namespace | |
59 | |
60 KennedyScrollBar::KennedyScrollBar(bool horizontal) | |
61 : BaseScrollBar(horizontal, new KennedyScrollBarThumb(this)) { | |
62 set_notify_enter_exit_on_child(true); | |
63 } | |
64 | |
65 KennedyScrollBar::~KennedyScrollBar() { | |
66 } | |
67 | |
68 gfx::Rect KennedyScrollBar::GetTrackBounds() const { | |
69 gfx::Rect local_bounds(GetLocalBounds()); | |
70 gfx::Size track_size = local_bounds.size(); | |
71 track_size.SetToMax(GetThumb()->size()); | |
72 local_bounds.set_size(track_size); | |
73 return local_bounds; | |
74 } | |
75 | |
76 int KennedyScrollBar::GetLayoutSize() const { | |
77 return kScrollbarWidth; | |
78 } | |
79 | |
80 gfx::Size KennedyScrollBar::GetPreferredSize() const { | |
81 return GetTrackBounds().size(); | |
82 } | |
83 | |
84 void KennedyScrollBar::Layout() { | |
85 gfx::Rect thumb_bounds = GetTrackBounds(); | |
86 BaseScrollBarThumb* thumb = GetThumb(); | |
87 if (IsHorizontal()) { | |
88 thumb_bounds.set_x(thumb->x()); | |
89 thumb_bounds.set_width(thumb->width()); | |
90 } else { | |
91 thumb_bounds.set_y(thumb->y()); | |
92 thumb_bounds.set_height(thumb->height()); | |
93 } | |
94 thumb->SetBoundsRect(thumb_bounds); | |
95 } | |
96 | |
97 void KennedyScrollBar::OnPaint(gfx::Canvas* canvas) { | |
98 CustomButton::ButtonState state = GetThumbTrackState(); | |
99 if ((state == CustomButton::STATE_HOVERED) || | |
100 (state == CustomButton::STATE_PRESSED)) { | |
101 gfx::Rect local_bounds(GetLocalBounds()); | |
102 canvas->FillRect(local_bounds, kTrackHoverColor); | |
103 canvas->DrawRect(local_bounds, kBorderColor); | |
104 } | |
105 } | |
106 | |
107 } // namespace views | |
OLD | NEW |