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

Side by Side Diff: cc/layers/painted_overlay_scrollbar_layer_impl.cc

Issue 2591863003: Use nine-patch resource for drawing Aura overlay scrollbar thumb. (Closed)
Patch Set: Addressed sadrul@'s feedback Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(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 "cc/layers/painted_overlay_scrollbar_layer_impl.h"
6
7 namespace cc {
8
9 std::unique_ptr<PaintedOverlayScrollbarLayerImpl>
10 PaintedOverlayScrollbarLayerImpl::Create(LayerTreeImpl* tree_impl,
11 int id,
12 ScrollbarOrientation orientation,
13 bool is_left_side_vertical_scrollbar) {
14 return base::WrapUnique(new PaintedOverlayScrollbarLayerImpl(
15 tree_impl, id, orientation, is_left_side_vertical_scrollbar));
16 }
17
18 PaintedOverlayScrollbarLayerImpl::PaintedOverlayScrollbarLayerImpl(
19 LayerTreeImpl* tree_impl,
20 int id,
21 ScrollbarOrientation orientation,
22 bool is_left_side_vertical_scrollbar)
23 : ScrollbarLayerImplBase(tree_impl,
24 id,
25 orientation,
26 is_left_side_vertical_scrollbar,
27 true),
28 thumb_ui_resource_id_(0),
29 thumb_thickness_(0),
30 thumb_length_(0),
31 track_start_(0),
32 track_length_(0) {}
33
34 PaintedOverlayScrollbarLayerImpl::~PaintedOverlayScrollbarLayerImpl() {}
35
36 std::unique_ptr<LayerImpl> PaintedOverlayScrollbarLayerImpl::CreateLayerImpl(
37 LayerTreeImpl* tree_impl) {
38 return PaintedOverlayScrollbarLayerImpl::Create(
39 tree_impl, id(), orientation(), is_left_side_vertical_scrollbar());
40 }
41
42 void PaintedOverlayScrollbarLayerImpl::PushPropertiesTo(LayerImpl* layer) {
43 ScrollbarLayerImplBase::PushPropertiesTo(layer);
44
45 PaintedOverlayScrollbarLayerImpl* scrollbar_layer =
46 static_cast<PaintedOverlayScrollbarLayerImpl*>(layer);
47
48 scrollbar_layer->SetThumbThickness(thumb_thickness_);
49 scrollbar_layer->SetThumbLength(thumb_length_);
50 scrollbar_layer->SetTrackStart(track_start_);
51 scrollbar_layer->SetTrackLength(track_length_);
52
53 scrollbar_layer->SetImageBounds(image_bounds_);
54 scrollbar_layer->SetAperture(aperture_);
55
56 scrollbar_layer->set_thumb_ui_resource_id(thumb_ui_resource_id_);
57 }
58
59 bool PaintedOverlayScrollbarLayerImpl::WillDraw(
60 DrawMode draw_mode,
61 ResourceProvider* resource_provider) {
62 DCHECK(draw_mode != DRAW_MODE_RESOURCELESS_SOFTWARE);
63 return LayerImpl::WillDraw(draw_mode, resource_provider);
64 }
65
66 void PaintedOverlayScrollbarLayerImpl::AppendQuads(
67 RenderPass* render_pass,
68 AppendQuadsData* append_quads_data) {
69 // For overlay scrollbars, the border should match the inset of the aperture
70 // and be symmetrical.
71 gfx::Rect border(aperture_.x(), aperture_.y(), aperture_.x() * 2,
72 aperture_.y() * 2);
73 gfx::Rect thumb_quad_rect(ComputeThumbQuadRect());
74 gfx::Rect layer_occlusion;
75 bool fill_center = true;
76 bool nearest_neighbor = false;
77
78 quad_generator_.SetLayout(image_bounds_, thumb_quad_rect.size(), aperture_,
79 border, layer_occlusion, fill_center,
80 nearest_neighbor);
81
82 SharedQuadState* shared_quad_state =
83 render_pass->CreateAndAppendSharedQuadState();
84 PopulateSharedQuadState(shared_quad_state);
85
86 AppendDebugBorderQuad(render_pass, bounds(), shared_quad_state,
87 append_quads_data);
88
89 std::vector<NinePatchGenerator::Patch> patches =
90 quad_generator_.GeneratePatches();
91
92 gfx::Vector2dF offset = thumb_quad_rect.OffsetFromOrigin();
93 for (auto& patch : patches)
94 patch.output_rect += offset;
95
96 quad_generator_.AppendQuads(this, thumb_ui_resource_id_, render_pass,
97 shared_quad_state, patches);
98 }
99
100 void PaintedOverlayScrollbarLayerImpl::SetThumbThickness(int thumb_thickness) {
101 if (thumb_thickness_ == thumb_thickness)
102 return;
103 thumb_thickness_ = thumb_thickness;
104 NoteLayerPropertyChanged();
105 }
106
107 int PaintedOverlayScrollbarLayerImpl::ThumbThickness() const {
108 return thumb_thickness_;
109 }
110
111 void PaintedOverlayScrollbarLayerImpl::SetThumbLength(int thumb_length) {
112 if (thumb_length_ == thumb_length)
113 return;
114 thumb_length_ = thumb_length;
115 NoteLayerPropertyChanged();
116 }
117
118 int PaintedOverlayScrollbarLayerImpl::ThumbLength() const {
119 return thumb_length_;
120 }
121
122 void PaintedOverlayScrollbarLayerImpl::SetTrackStart(int track_start) {
123 if (track_start_ == track_start)
124 return;
125 track_start_ = track_start;
126 NoteLayerPropertyChanged();
127 }
128
129 int PaintedOverlayScrollbarLayerImpl::TrackStart() const {
130 return track_start_;
131 }
132
133 void PaintedOverlayScrollbarLayerImpl::SetTrackLength(int track_length) {
134 if (track_length_ == track_length)
135 return;
136 track_length_ = track_length;
137 NoteLayerPropertyChanged();
138 }
139
140 void PaintedOverlayScrollbarLayerImpl::SetImageBounds(const gfx::Size& bounds) {
141 if (image_bounds_ == bounds)
142 return;
143 image_bounds_ = bounds;
144 NoteLayerPropertyChanged();
145 }
146
147 void PaintedOverlayScrollbarLayerImpl::SetAperture(const gfx::Rect& aperture) {
148 if (aperture_ == aperture)
149 return;
150 aperture_ = aperture;
151 NoteLayerPropertyChanged();
152 }
153
154 float PaintedOverlayScrollbarLayerImpl::TrackLength() const {
155 return track_length_ + (orientation() == VERTICAL ? vertical_adjust() : 0);
156 }
157
158 bool PaintedOverlayScrollbarLayerImpl::IsThumbResizable() const {
159 return false;
160 }
161
162 const char* PaintedOverlayScrollbarLayerImpl::LayerTypeAsString() const {
163 return "cc::PaintedOverlayScrollbarLayerImpl";
164 }
165
166 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698