OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 5 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
6 | 6 |
7 #include <AppKit/AppKit.h> | 7 #import <AppKit/AppKit.h> |
8 | |
9 #include "base/logging.h" | |
10 #include "base/mac/mac_util.h" | |
8 | 11 |
9 namespace gfx { | 12 namespace gfx { |
10 | 13 |
11 ScopedNSGraphicsContextSaveGState::ScopedNSGraphicsContextSaveGState( | 14 ScopedNSGraphicsContextSaveGState::ScopedNSGraphicsContextSaveGState() |
12 NSGraphicsContext* context) : context_([context retain]) { | 15 : context_([NSGraphicsContext currentContext]) { |
13 if (!context_) | 16 [NSGraphicsContext saveGraphicsState]; |
14 context_.reset([[NSGraphicsContext currentContext] retain]); | |
15 [context_ saveGraphicsState]; | |
16 } | 17 } |
17 | 18 |
18 ScopedNSGraphicsContextSaveGState::~ScopedNSGraphicsContextSaveGState() { | 19 ScopedNSGraphicsContextSaveGState::~ScopedNSGraphicsContextSaveGState() { |
19 [context_ restoreGraphicsState]; | 20 [NSGraphicsContext restoreGraphicsState]; |
21 if (!context_ && base::mac::IsOSLeopardOrEarlier()) { | |
22 // On 10.5 and earlier, there is a bug. If the current graphics context was | |
23 // nil when +[NSGraphicsContext saveGraphicsState] was called, then calling | |
24 // +[NSGraphicsContext restoreGraphicsState] will not restore a nil current | |
25 // context, but will leave the current context in place. Because allowing | |
26 // that stale context (which is likely been dealloced) to remain current | |
Mark Mentovai
2011/08/05 22:11:32
(which is likely to be dealloced)
| |
27 // will only lead to heartache and pain, the current context must be | |
28 // manually nilled out. | |
29 [NSGraphicsContext setCurrentContext:nil]; | |
30 } | |
31 DCHECK_EQ(context_, [NSGraphicsContext currentContext]); | |
20 } | 32 } |
21 | 33 |
22 } // namespace gfx | 34 } // namespace gfx |
OLD | NEW |