Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: ui/snapshot/snapshot_mac.mm

Issue 2592983002: [devtools] Support different encodings for Page.CaptureScreenshot. (Closed)
Patch Set: Encode in ui snapshot methods instead. Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/snapshot/snapshot_mac.mm
diff --git a/ui/snapshot/snapshot_mac.mm b/ui/snapshot/snapshot_mac.mm
index 9761cb7f5086136f36de50109e04e7e0e92222eb..2c87e38889cfdc4ded160991582c1acfbb14af07 100644
--- a/ui/snapshot/snapshot_mac.mm
+++ b/ui/snapshot/snapshot_mac.mm
@@ -19,7 +19,9 @@ namespace ui {
bool GrabViewSnapshot(gfx::NativeView view,
std::vector<unsigned char>* png_representation,
- const gfx::Rect& snapshot_bounds) {
+ const gfx::Rect& snapshot_bounds,
+ SnapshotEncoding encoding,
+ SnapshotQuality quality) {
NSWindow* window = [view window];
NSScreen* screen = [[NSScreen screens] firstObject];
gfx::Rect screen_bounds = gfx::Rect(NSRectToCGRect([screen frame]));
@@ -55,7 +57,23 @@ bool GrabViewSnapshot(gfx::NativeView view,
base::scoped_nsobject<NSBitmapImageRep> rep(
[[NSBitmapImageRep alloc] initWithCGImage:windowSnapshot]);
- NSData* data = [rep representationUsingType:NSPNGFileType properties:@{}];
+ NSData* data;
+ float compression_factor = 0;
+ NSDictionary* options = nullptr;
+ switch (encoding) {
+ case SnapshotEncoding::PNG:
+ data = [rep representationUsingType:NSPNGFileType properties:@{}];
+ break;
+ case SnapshotEncoding::JPEG:
+ compression_factor = static_cast<float>(quality) / 100;
+ options = [NSDictionary
+ dictionaryWithObject:[NSNumber numberWithFloat:compression_factor]
+ forKey:NSImageCompressionFactor];
+ data = [rep representationUsingType:NSJPEGFileType properties:options];
+ break;
+ default:
+ NOTREACHED();
+ }
const unsigned char* buf = static_cast<const unsigned char*>([data bytes]);
NSUInteger length = [data length];
if (buf == NULL || length == 0)
@@ -69,11 +87,13 @@ bool GrabViewSnapshot(gfx::NativeView view,
bool GrabWindowSnapshot(gfx::NativeWindow window,
std::vector<unsigned char>* png_representation,
- const gfx::Rect& snapshot_bounds) {
+ const gfx::Rect& snapshot_bounds,
+ SnapshotEncoding encoding,
+ SnapshotQuality quality) {
// Make sure to grab the "window frame" view so we get current tab +
// tabstrip.
return GrabViewSnapshot([[window contentView] superview], png_representation,
- snapshot_bounds);
+ snapshot_bounds, encoding, quality);
}
void GrabWindowSnapshotAndScaleAsync(
@@ -89,7 +109,9 @@ void GrabViewSnapshotAsync(
gfx::NativeView view,
const gfx::Rect& source_rect,
scoped_refptr<base::TaskRunner> background_task_runner,
- const GrabWindowSnapshotAsyncPNGCallback& callback) {
+ const GrabWindowSnapshotAsyncEncodedCallback& callback,
+ SnapshotEncoding encoding,
+ SnapshotQuality quality) {
callback.Run(scoped_refptr<base::RefCountedBytes>());
}
@@ -97,9 +119,12 @@ void GrabWindowSnapshotAsync(
gfx::NativeWindow window,
const gfx::Rect& source_rect,
scoped_refptr<base::TaskRunner> background_task_runner,
- const GrabWindowSnapshotAsyncPNGCallback& callback) {
+ const GrabWindowSnapshotAsyncEncodedCallback& callback,
+ SnapshotEncoding encoding,
+ SnapshotQuality quality) {
return GrabViewSnapshotAsync([[window contentView] superview], source_rect,
- background_task_runner, callback);
+ background_task_runner, callback, encoding,
+ quality);
}
} // namespace ui
« content/browser/renderer_host/render_widget_host_impl.cc ('K') | « ui/snapshot/snapshot_ios.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698