void StatusView::Draw( BRect updateRect) { D_HOOK(("StatusView::Draw()\n")); if(!m_backView) { drawInto(this, updateRect); } else { if(m_dirty) { m_backBitmap->Lock(); drawInto(m_backView, updateRect); m_backView->Sync(); m_backBitmap->Unlock(); m_dirty = false; } SetDrawingMode(B_OP_COPY); DrawBitmap(m_backBitmap, updateRect, updateRect); } }
void onDraw(SkCanvas* canvas) override { SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); SkAutoTUnref<SkSurface> surf(canvas->newSurface(info, nullptr)); if (!surf.get()) { surf.reset(SkSurface::NewRaster(info)); } drawInto(surf->getCanvas()); SkAutoTUnref<SkImage> image(surf->newImageSnapshot()); canvas->drawImage(image, 10, 10, nullptr); SkAutoTUnref<SkSurface> surf2(image->newSurface(info, nullptr)); drawInto(surf2->getCanvas()); // Assert that the props were communicated transitively through the first image SkASSERT(equal(surf->props(), surf2->props())); SkAutoTUnref<SkImage> image2(surf2->newImageSnapshot()); canvas->drawImage(image2, 10 + SkIntToScalar(image->width()) + 10, 10, nullptr); }