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

Side by Side Diff: ui/accelerated_widget_mac/software_layer.mm

Issue 1420533005: Mac: Kill lots of AcceleratedWidget code (with fire) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback 2 Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/accelerated_widget_mac/software_layer.h"
6
7 #include "base/mac/mac_util.h"
8 #include "base/mac/scoped_cftyperef.h"
9 #include "base/mac/sdk_forward_declarations.h"
10 #include "base/trace_event/trace_event.h"
11 #include "ui/base/cocoa/animation_utils.h"
12
13 @implementation SoftwareLayer
14
15 - (id)init {
16 if (self = [super init]) {
17 [self setAnchorPoint:CGPointMake(0, 0)];
18 // Setting contents gravity is necessary to prevent the layer from being
19 // scaled during dyanmic resizes (especially with devtools open).
20 [self setContentsGravity:kCAGravityTopLeft];
21 }
22 return self;
23 }
24
25 - (void)setContentsToData:(const void *)data
26 withRowBytes:(size_t)rowBytes
27 withPixelSize:(gfx::Size)pixelSize
28 withScaleFactor:(float)scaleFactor {
29 TRACE_EVENT0("browser", "-[SoftwareLayer setContentsToData]");
30
31 // Disable animating the contents change or the scale factor change.
32 ScopedCAActionDisabler disabler;
33
34 // Set the contents of the software CALayer to be a CGImage with the provided
35 // pixel data. Make a copy of the data before backing the image with them,
36 // because the same buffer will be reused for the next frame.
37 base::ScopedCFTypeRef<CFDataRef> dataCopy(
38 CFDataCreate(NULL,
39 static_cast<const UInt8 *>(data),
40 rowBytes * pixelSize.height()));
41 base::ScopedCFTypeRef<CGDataProviderRef> dataProvider(
42 CGDataProviderCreateWithCFData(dataCopy));
43 base::ScopedCFTypeRef<CGImageRef> image(
44 CGImageCreate(pixelSize.width(),
45 pixelSize.height(),
46 8,
47 32,
48 rowBytes,
49 base::mac::GetSystemColorSpace(),
50 kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
51 dataProvider,
52 NULL,
53 false,
54 kCGRenderingIntentDefault));
55 [self setContents:(id)image.get()];
56 [self setBounds:CGRectMake(
57 0, 0, pixelSize.width() / scaleFactor, pixelSize.height() / scaleFactor)];
58
59 // Set the contents scale of the software CALayer.
60 if ([self respondsToSelector:(@selector(contentsScale))] &&
61 [self respondsToSelector:(@selector(setContentsScale:))] &&
62 [self contentsScale] != scaleFactor) {
63 [self setContentsScale:scaleFactor];
64 }
65 }
66
67 @end
OLDNEW
« no previous file with comments | « ui/accelerated_widget_mac/software_layer.h ('k') | ui/views/widget/native_widget_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698