OLD | NEW |
| (Empty) |
1 | |
2 /* | |
3 * Copyright 2008 The Android Open Source Project | |
4 * | |
5 * Use of this source code is governed by a BSD-style license that can be | |
6 * found in the LICENSE file. | |
7 */ | |
8 | |
9 | |
10 #ifndef SkPageFlipper_DEFINED | |
11 #define SkPageFlipper_DEFINED | |
12 | |
13 #include "SkRegion.h" | |
14 | |
15 /** SkPageFlipper manages alternating inval/dirty regions for a rectangular area | |
16 (like a bitmap). You call inval() to accumulate inval areas, and then when | |
17 you're ready to "flip" pages (i.e. draw into the one you've been | |
18 invalidating) you call update, which swaps the inval regions, and returns | |
19 two things to you: 1) the final inval region to be drawn into, and 2) the | |
20 region of pixels that should be copied from the "front" page onto the one | |
21 you're about to draw into. This copyBits region will be disjoint from the | |
22 inval region, so both need to be handled. | |
23 */ | |
24 class SkPageFlipper { | |
25 public: | |
26 SkPageFlipper(); | |
27 SkPageFlipper(int width, int height); | |
28 | |
29 int width() const { return fWidth; } | |
30 int height() const { return fHeight; } | |
31 | |
32 void resize(int width, int height); | |
33 | |
34 bool isDirty() const { return !fDirty1->isEmpty(); } | |
35 const SkRegion& dirtyRgn() const { return *fDirty1; } | |
36 | |
37 void inval(); | |
38 void inval(const SkIRect&); | |
39 void inval(const SkRegion&); | |
40 void inval(const SkRect&, bool antialias); | |
41 | |
42 /** When you're ready to write to the back page, call update. The returned | |
43 region is the invalidate are that needs to be drawn to. The copyBits | |
44 region (provided by the caller) is the area that should be copied from | |
45 the front page to the back page (will not intersect with the returned | |
46 inval region. | |
47 | |
48 Once this is called, the two internal regions are swapped, so the *new* | |
49 back inval region is ready to receive new inval calls. | |
50 */ | |
51 const SkRegion& update(SkRegion* copyBits); | |
52 | |
53 private: | |
54 SkRegion* fDirty0; | |
55 SkRegion* fDirty1; | |
56 SkRegion fDirty0Storage; | |
57 SkRegion fDirty1Storage; | |
58 int fWidth; | |
59 int fHeight; | |
60 }; | |
61 | |
62 #endif | |
OLD | NEW |