Index: ppapi/cpp/paint_aggregator.h |
=================================================================== |
--- ppapi/cpp/paint_aggregator.h (revision 116706) |
+++ ppapi/cpp/paint_aggregator.h (working copy) |
@@ -1,174 +0,0 @@ |
-// 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 PPAPI_CPP_PAINT_AGGREGATOR_H_ |
-#define PPAPI_CPP_PAINT_AGGREGATOR_H_ |
- |
-#include <stddef.h> |
-#include <vector> |
- |
-#include "ppapi/cpp/point.h" |
-#include "ppapi/cpp/rect.h" |
- |
-/// @file |
-/// This file defines the API to aggregate multiple invalidation and scroll |
-/// commands to produce a scroll and repaint sequence. |
-namespace pp { |
- |
-/// This class is responsible for aggregating multiple invalidation and scroll |
-/// commands to produce a scroll and repaint sequence. You can use this manually |
-/// to track your updates, but most applications will use the PaintManager to |
-/// additionally handle the necessary callbacks on top of the PaintAggregator |
-/// functionality. |
-/// |
-/// Refer to <code>http://code.google.com/p/ppapi/wiki/2DPaintingModel</code> |
-/// for further information. |
-class PaintAggregator { |
- public: |
- struct PaintUpdate { |
- /// Default constructor for creating an is_null() <code>PaintUpdate</code> |
- /// object. |
- PaintUpdate(); |
- |
- /// Destructor. |
- ~PaintUpdate(); |
- |
- /// True if there is a scroll applied. This indicates that the scroll delta |
- /// and scroll_rect are nonzero (just as a convenience). |
- bool has_scroll; |
- |
- /// The amount to scroll by. Either the X or Y may be nonzero to indicate a |
- /// scroll in that direction, but there will never be a scroll in both |
- /// directions at the same time (this will be converted to a paint of the |
- /// region instead). |
- /// |
- /// If there is no scroll, this will be (0, 0). |
- Point scroll_delta; |
- |
- /// The rectangle that should be scrolled by the scroll_delta. If there is |
- /// no scroll, this will be (0, 0, 0, 0). We only track one scroll command |
- /// at once. If there are multiple ones, they will be converted to |
- /// invalidates. |
- Rect scroll_rect; |
- |
- /// A list of all the individual dirty rectangles. This is an aggregated |
- /// list of all invalidate calls. Different rectangles may be unified to |
- /// produce a minimal list with no overlap that is more efficient to paint. |
- /// This list also contains the region exposed by any scroll command. |
- std::vector<Rect> paint_rects; |
- |
- /// The union of all paint_rects. |
- Rect paint_bounds; |
- }; |
- |
- /// Default constructor. |
- PaintAggregator(); |
- |
- /// Setter function setting the max ratio of paint rect area to scroll rect |
- /// area that we will tolerate before downgrading the scroll into a repaint. |
- /// |
- /// If the combined area of paint rects contained within the scroll |
- /// rect grows too large, then we might as well just treat |
- /// the scroll rect as a paint rect. |
- /// |
- /// @param[in] area The max ratio of paint rect area to scroll rect area that |
- /// we will tolerate before downgrading the scroll into a repaint. |
- void set_max_redundant_paint_to_scroll_area(float area) { |
- max_redundant_paint_to_scroll_area_ = area; |
- } |
- |
- /// Setter function for setting the maximum number of paint rects. If we |
- /// exceed this limit, then we'll start combining paint rects (see |
- /// CombinePaintRects). This limiting can be important since there is |
- /// typically some overhead in deciding what to paint. If your module is fast |
- /// at doing these computations, raise this threshold, if your module is |
- /// slow, lower it (probably requires some tuning to find the right value). |
- /// |
- /// @param[in] max_rects The maximum number of paint rects. |
- void set_max_paint_rects(size_t max_rects) { |
- max_paint_rects_ = max_rects; |
- } |
- |
- /// This function determines if there is a pending update. There is a |
- /// PendingUpdate if InvalidateRect or ScrollRect were called and |
- /// ClearPendingUpdate was not called. |
- /// |
- /// @return true if there is a pending update, otherwise false. |
- bool HasPendingUpdate() const; |
- |
- /// This function clears a pending update. |
- void ClearPendingUpdate(); |
- |
- /// This function gets a pending update. |
- /// |
- /// @return A PaintUpdate containing the pending update. |
- PaintUpdate GetPendingUpdate() const; |
- |
- /// This function invalidates the rect so it will be repainted. |
- /// |
- /// @param[in] rect A rect to be repainted. |
- void InvalidateRect(const Rect& rect); |
- |
- /// This function adds a pending scroll update. |
- /// |
- /// @param[in] clip_rect The rect to scroll. |
- /// @param[in] amount A Point amount to scroll <code>rect</code>. |
- void ScrollRect(const Rect& clip_rect, const Point& amount); |
- |
- private: |
- // This structure is an internal version of PaintUpdate. It's different in |
- // two respects: |
- // |
- // - The scroll damange (area exposed by the scroll operation, if any) is |
- // maintained separately from the dirty rects generated by calling |
- // InvalidateRect. We need to know this distinction for some operations. |
- // |
- // - The paint bounds union is computed on the fly so we don't have to keep |
- // a rectangle up-to-date as we do different operations. |
- class InternalPaintUpdate { |
- public: |
- InternalPaintUpdate(); |
- ~InternalPaintUpdate(); |
- |
- // Computes the rect damaged by scrolling within |scroll_rect| by |
- // |scroll_delta|. This rect must be repainted. It is not included in |
- // paint_rects or in the rect returned by GetPaintBounds. |
- Rect GetScrollDamage() const; |
- |
- // Returns the smallest rect containing all paint rects, not including the |
- // scroll damage rect. |
- Rect GetPaintBounds() const; |
- |
- Point scroll_delta; |
- Rect scroll_rect; |
- |
- // Does not include the scroll damage rect. |
- std::vector<Rect> paint_rects; |
- }; |
- |
- Rect ScrollPaintRect(const Rect& paint_rect, const Point& amount) const; |
- bool ShouldInvalidateScrollRect(const Rect& rect) const; |
- void InvalidateScrollRect(); |
- void CombinePaintRects(); |
- |
- InternalPaintUpdate update_; |
- |
- // If the combined area of paint rects contained within the scroll rect grows |
- // too large, then we might as well just treat the scroll rect as a paint |
- // rect. This constant sets the max ratio of paint rect area to scroll rect |
- // area that we will tolerate before downgrading the scroll into a repaint. |
- float max_redundant_paint_to_scroll_area_; |
- |
- // The maximum number of paint rects. If we exceed this limit, then we'll |
- // start combining paint rects (see CombinePaintRects). This limiting can be |
- // important since there is typically some overhead in deciding what to |
- // paint. If your plugin is fast at doing these computations, raise this |
- // threshold, if your plugin is slow, lower it (probably requires some |
- // tuning to find the right value). |
- size_t max_paint_rects_; |
-}; |
- |
-} // namespace pp |
- |
-#endif // PPAPI_CPP_PAINT_AGGREGATOR_H_ |