skia2/include/images/SkPageFlipper.h
epoger@google.com ec3ed6a5eb Automatic update of all copyright notices to reflect new license terms.
I have manually examined all of these diffs and restored a few files that
seem to require manual adjustment.

The following files still need to be modified manually, in a separate CL:

android_sample/SampleApp/AndroidManifest.xml
android_sample/SampleApp/res/layout/layout.xml
android_sample/SampleApp/res/menu/sample.xml
android_sample/SampleApp/res/values/strings.xml
android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java
android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java
experimental/CiCarbonSampleMain.c
experimental/CocoaDebugger/main.m
experimental/FileReaderApp/main.m
experimental/SimpleCocoaApp/main.m
experimental/iOSSampleApp/Shared/SkAlertPrompt.h
experimental/iOSSampleApp/Shared/SkAlertPrompt.m
experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig
experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig
experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig
gpu/src/android/GrGLDefaultInterface_android.cpp
gyp/common.gypi
gyp_skia
include/ports/SkHarfBuzzFont.h
include/views/SkOSWindow_wxwidgets.h
make.bat
make.py
src/opts/memset.arm.S
src/opts/memset16_neon.S
src/opts/memset32_neon.S
src/opts/opts_check_arm.cpp
src/ports/SkDebug_brew.cpp
src/ports/SkMemory_brew.cpp
src/ports/SkOSFile_brew.cpp
src/ports/SkXMLParser_empty.cpp
src/utils/ios/SkImageDecoder_iOS.mm
src/utils/ios/SkOSFile_iOS.mm
src/utils/ios/SkStream_NSData.mm
tests/FillPathTest.cpp
Review URL: http://codereview.appspot.com/4816058

git-svn-id: http://skia.googlecode.com/svn/trunk@1982 2bbb7eff-a529-9590-31e7-b0007b416f81
2011-07-28 14:26:00 +00:00

64 lines
2.0 KiB
C++

/*
* Copyright 2008 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPageFlipper_DEFINED
#define SkPageFlipper_DEFINED
#include "SkRegion.h"
/** SkPageFlipper manages alternating inval/dirty regions for a rectangular area
(like a bitmap). You call inval() to accumulate inval areas, and then when
you're ready to "flip" pages (i.e. draw into the one you've been
invalidating) you call update, which swaps the inval regions, and returns
two things to you: 1) the final inval region to be drawn into, and 2) the
region of pixels that should be copied from the "front" page onto the one
you're about to draw into. This copyBits region will be disjoint from the
inval region, so both need to be handled.
*/
class SkPageFlipper {
public:
SkPageFlipper();
SkPageFlipper(int width, int height);
int width() const { return fWidth; }
int height() const { return fHeight; }
void resize(int width, int height);
bool isDirty() const { return !fDirty1->isEmpty(); }
const SkRegion& dirtyRgn() const { return *fDirty1; }
void inval();
void inval(const SkIRect&);
void inval(const SkRegion&);
void inval(const SkRect&, bool antialias);
/** When you're ready to write to the back page, call update. The returned
region is the invalidate are that needs to be drawn to. The copyBits
region (provided by the caller) is the area that should be copied from
the front page to the back page (will not intersect with the returned
inval region.
Once this is called, the two internal regions are swapped, so the *new*
back inval region is ready to receive new inval calls.
*/
const SkRegion& update(SkRegion* copyBits);
private:
SkRegion* fDirty0;
SkRegion* fDirty1;
SkRegion fDirty0Storage;
SkRegion fDirty1Storage;
int fWidth;
int fHeight;
};
#endif