ANPCanvas* PaintPlugin::getCanvas(ANPRectI* dirtyRect) { ANPBitmap bitmap; JNIEnv* env = NULL; if (!m_surface || gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK || !gSurfaceI.lock(env, m_surface, &bitmap, dirtyRect)) { return NULL; } ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap); // clip the canvas to the dirty rect b/c the surface is only required to // copy a minimum of the dirty rect and may copy more. The clipped canvas // however will never write to pixels outside of the clipped area. if (dirtyRect) { ANPRectF clipR; clipR.left = dirtyRect->left; clipR.top = dirtyRect->top; clipR.right = dirtyRect->right; clipR.bottom = dirtyRect->bottom; gCanvasI.clipRect(canvas, &clipR); } return canvas; }
void AudioPlugin::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) { ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap); ANPRectF clipR; clipR.left = clip.left; clipR.top = clip.top; clipR.right = clip.right; clipR.bottom = clip.bottom; gCanvasI.clipRect(canvas, &clipR); draw(canvas); gCanvasI.deleteCanvas(canvas); }