| 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 |