void DraggedTabView::PaintDetachedView(gfx::Canvas* canvas) { gfx::Size ps = GetPreferredSize(); gfx::CanvasSkia scale_canvas(ps.width(), ps.height(), false); SkBitmap& bitmap_device = const_cast<SkBitmap&>( skia::GetTopDevice(scale_canvas)->accessBitmap(true)); bitmap_device.eraseARGB(0, 0, 0, 0); int tab_height = renderer_bounds_.back().height(); scale_canvas.FillRectInt(kDraggedTabBorderColor, 0, tab_height - kDragFrameBorderSize, ps.width(), ps.height() - tab_height); int image_x = kDragFrameBorderSize; int image_y = tab_height; int image_w = ps.width() - kTwiceDragFrameBorderSize; int image_h = contents_size_.height(); scale_canvas.FillRectInt(SK_ColorBLACK, image_x, image_y, image_w, image_h); photobooth_->PaintScreenshotIntoCanvas( &scale_canvas, gfx::Rect(image_x, image_y, image_w, image_h)); for(size_t i=0; i<renderers_.size(); ++i) { renderers_[i]->Paint(&scale_canvas); } SkIRect subset; subset.set(0, 0, ps.width(), ps.height()); SkBitmap mipmap = scale_canvas.ExtractBitmap(); mipmap.buildMipMap(true); SkShader* bitmap_shader = SkShader::CreateBitmapShader(mipmap, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); SkMatrix shader_scale; shader_scale.setScale(kScalingFactor, kScalingFactor); bitmap_shader->setLocalMatrix(shader_scale); SkPaint paint; paint.setShader(bitmap_shader); paint.setAntiAlias(true); bitmap_shader->unref(); SkRect rc; rc.fLeft = 0; rc.fTop = 0; rc.fRight = SkIntToScalar(ps.width()); rc.fBottom = SkIntToScalar(ps.height()); canvas->AsCanvasSkia()->drawRect(rc, paint); }