// Copyright (c) 2011 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 VIEWS_LAYER_HELPER_H_ #define VIEWS_LAYER_HELPER_H_ #pragma once #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "ui/gfx/rect.h" namespace ui { class Layer; class Transform; } namespace views { class LayerPropertySetter; // This is a views-internal API and should not be used externally. View uses // this class to manage fields related to accelerated painting. namespace internal { class LayerHelper { public: LayerHelper(); ~LayerHelper(); void SetTransform(const ui::Transform& transform); // Only returns non-null if a non-identity transform has been set. const ui::Transform* transform() const { return transform_.get(); } void SetLayer(ui::Layer* layer); ui::Layer* layer() { return layer_.get(); } // Rectangle that needs to be painted. void set_clip_rect(const gfx::Rect& rect) { clip_rect_ = rect; } const gfx::Rect& clip_rect() const { return clip_rect_; } // If true, the layer's bitmap is out of date and needs to be updated. void set_bitmap_needs_updating(bool value) { bitmap_needs_updating_ = value; } bool bitmap_needs_updating() const { return bitmap_needs_updating_; } // If true the layer was explicitly turned on. void set_paint_to_layer(bool value) { paint_to_layer_ = value; } bool paint_to_layer() const { return paint_to_layer_; } void SetPropertySetter(LayerPropertySetter* setter); LayerPropertySetter* property_setter() { return property_setter_.get(); } // If true the LayerPropertySetter was explicitly set. void set_property_setter_explicitly_set(bool value) { property_setter_explicitly_set_ = value; } bool property_setter_explicitly_set() { return property_setter_explicitly_set_; } // See View::SetExternalTexture for details. void set_layer_updated_externally(bool value) { layer_updated_externally_ = value; } bool layer_updated_externally() const { return layer_updated_externally_; } // If true the complete bounds of the view needs to be painted. void set_needs_paint_all(bool value) { needs_paint_all_ = value; } bool needs_paint_all() const { return needs_paint_all_; } // Returns true if the layer needs to be used. bool ShouldPaintToLayer() const; private: // The transformation matrix (rotation, translate, scale). If non-null the // transform is not the identity transform. scoped_ptr transform_; scoped_ptr layer_; scoped_ptr property_setter_; // Used during painting. If not empty and View::Paint() is invoked, the canvas // is created with the specified size. // TODO(sky): this should be passed into paint. gfx::Rect clip_rect_; // Is the layers bitmap out of date? bool bitmap_needs_updating_; // If true the bitmap is always up to date. bool layer_updated_externally_; // Should the View paint to a layer? bool paint_to_layer_; bool property_setter_explicitly_set_; bool needs_paint_all_; DISALLOW_COPY_AND_ASSIGN(LayerHelper); }; } // namespace internal } // namespace views #endif // VIEWS_LAYER_HELPER_H_