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

Unified Diff: ppapi/cpp/paint_aggregator.h

Issue 9122012: gcl change rev (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/cpp/non_thread_safe_ref_count.h ('k') | ppapi/cpp/paint_aggregator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « ppapi/cpp/non_thread_safe_ref_count.h ('k') | ppapi/cpp/paint_aggregator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698