OLD | NEW |
| (Empty) |
1 // Copyright 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 #ifndef CC_LAYERS_PAINTED_SCROLLBAR_LAYER_H_ | |
6 #define CC_LAYERS_PAINTED_SCROLLBAR_LAYER_H_ | |
7 | |
8 #include "cc/base/cc_export.h" | |
9 #include "cc/input/scrollbar.h" | |
10 #include "cc/layers/layer.h" | |
11 #include "cc/layers/scrollbar_layer_interface.h" | |
12 #include "cc/layers/scrollbar_theme_painter.h" | |
13 #include "cc/resources/layer_updater.h" | |
14 #include "cc/resources/scoped_ui_resource.h" | |
15 | |
16 namespace cc { | |
17 class ScrollbarThemeComposite; | |
18 | |
19 class CC_EXPORT PaintedScrollbarLayer : public ScrollbarLayerInterface, | |
20 public Layer { | |
21 public: | |
22 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; | |
23 | |
24 static scoped_refptr<PaintedScrollbarLayer> Create( | |
25 scoped_ptr<Scrollbar> scrollbar, | |
26 int scroll_layer_id); | |
27 | |
28 bool OpacityCanAnimateOnImplThread() const override; | |
29 ScrollbarLayerInterface* ToScrollbarLayer() override; | |
30 | |
31 // ScrollbarLayerInterface | |
32 int ScrollLayerId() const override; | |
33 void SetScrollLayer(int layer_id) override; | |
34 void SetClipLayer(int layer_id) override; | |
35 | |
36 ScrollbarOrientation orientation() const override; | |
37 | |
38 // Layer interface | |
39 bool Update(ResourceUpdateQueue* queue, | |
40 const OcclusionTracker<Layer>* occlusion) override; | |
41 void SetLayerTreeHost(LayerTreeHost* host) override; | |
42 void PushPropertiesTo(LayerImpl* layer) override; | |
43 void PushScrollClipPropertiesTo(LayerImpl* layer) override; | |
44 | |
45 const gfx::Size& internal_content_bounds() const { | |
46 return internal_content_bounds_; | |
47 } | |
48 | |
49 protected: | |
50 PaintedScrollbarLayer(scoped_ptr<Scrollbar> scrollbar, int scroll_layer_id); | |
51 ~PaintedScrollbarLayer() override; | |
52 | |
53 // For unit tests | |
54 UIResourceId track_resource_id() { | |
55 return track_resource_.get() ? track_resource_->id() : 0; | |
56 } | |
57 UIResourceId thumb_resource_id() { | |
58 return thumb_resource_.get() ? thumb_resource_->id() : 0; | |
59 } | |
60 void UpdateInternalContentScale(); | |
61 void UpdateThumbAndTrackGeometry(); | |
62 | |
63 private: | |
64 gfx::Rect ScrollbarLayerRectToContentRect(const gfx::Rect& layer_rect) const; | |
65 gfx::Rect OriginThumbRect() const; | |
66 | |
67 template <typename T> | |
68 bool UpdateProperty(T value, T* prop) { | |
69 if (*prop == value) | |
70 return false; | |
71 *prop = value; | |
72 SetNeedsPushProperties(); | |
73 return true; | |
74 } | |
75 | |
76 int MaxTextureSize(); | |
77 float ClampScaleToMaxTextureSize(float scale); | |
78 | |
79 UIResourceBitmap RasterizeScrollbarPart(const gfx::Rect& layer_rect, | |
80 const gfx::Rect& content_rect, | |
81 ScrollbarPart part); | |
82 | |
83 scoped_ptr<Scrollbar> scrollbar_; | |
84 int scroll_layer_id_; | |
85 int clip_layer_id_; | |
86 | |
87 float internal_contents_scale_; | |
88 gfx::Size internal_content_bounds_; | |
89 | |
90 // Snapshot of properties taken in UpdateThumbAndTrackGeometry and used in | |
91 // PushPropertiesTo. | |
92 int thumb_thickness_; | |
93 int thumb_length_; | |
94 gfx::Point location_; | |
95 gfx::Rect track_rect_; | |
96 bool is_overlay_; | |
97 bool has_thumb_; | |
98 | |
99 scoped_ptr<ScopedUIResource> track_resource_; | |
100 scoped_ptr<ScopedUIResource> thumb_resource_; | |
101 | |
102 DISALLOW_COPY_AND_ASSIGN(PaintedScrollbarLayer); | |
103 }; | |
104 | |
105 } // namespace cc | |
106 | |
107 #endif // CC_LAYERS_PAINTED_SCROLLBAR_LAYER_H_ | |
OLD | NEW |