// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_LAYERS_SCROLLBAR_LAYER_H_ #define CC_LAYERS_SCROLLBAR_LAYER_H_ #include "cc/base/cc_export.h" #include "cc/input/scrollbar.h" #include "cc/layers/contents_scaling_layer.h" #include "cc/layers/scrollbar_theme_painter.h" #include "cc/resources/layer_updater.h" namespace cc { class CachingBitmapContentLayerUpdater; class ResourceUpdateQueue; class ScrollbarThemeComposite; class CC_EXPORT ScrollbarLayer : public ContentsScalingLayer { public: virtual scoped_ptr CreateLayerImpl(LayerTreeImpl* tree_impl) OVERRIDE; static scoped_refptr Create( scoped_ptr scrollbar, int scroll_layer_id); int scroll_layer_id() const { return scroll_layer_id_; } void SetScrollLayerId(int id); virtual bool OpacityCanAnimateOnImplThread() const OVERRIDE; ScrollbarOrientation Orientation() const; // Layer interface virtual void SetTexturePriorities(const PriorityCalculator& priority_calc) OVERRIDE; virtual bool Update(ResourceUpdateQueue* queue, const OcclusionTracker* occlusion) OVERRIDE; virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE; virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; virtual void CalculateContentsScale(float ideal_contents_scale, float device_scale_factor, float page_scale_factor, bool animating_transform_to_screen, float* contents_scale_x, float* contents_scale_y, gfx::Size* content_bounds) OVERRIDE; virtual ScrollbarLayer* ToScrollbarLayer() OVERRIDE; protected: ScrollbarLayer(scoped_ptr scrollbar, int scroll_layer_id); virtual ~ScrollbarLayer(); private: bool UpdatePart(CachingBitmapContentLayerUpdater* painter, LayerUpdater::Resource* resource, gfx::Rect rect, ResourceUpdateQueue* queue); void CreateUpdaterIfNeeded(); gfx::Rect ScrollbarLayerRectToContentRect(gfx::Rect layer_rect) const; gfx::Rect OriginThumbRect() const; bool is_dirty() const { return !dirty_rect_.IsEmpty(); } int MaxTextureSize(); float ClampScaleToMaxTextureSize(float scale); scoped_ptr scrollbar_; int thumb_thickness_; int thumb_length_; gfx::Rect track_rect_; int scroll_layer_id_; unsigned texture_format_; gfx::RectF dirty_rect_; scoped_refptr track_updater_; scoped_refptr thumb_updater_; // All the parts of the scrollbar except the thumb scoped_ptr track_; scoped_ptr thumb_; DISALLOW_COPY_AND_ASSIGN(ScrollbarLayer); }; } // namespace cc #endif // CC_LAYERS_SCROLLBAR_LAYER_H_