// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" #import #include "base/logging.h" #include "base/mac/mac_util.h" namespace gfx { ScopedNSGraphicsContextSaveGState::ScopedNSGraphicsContextSaveGState() : context_([NSGraphicsContext currentContext]) { [NSGraphicsContext saveGraphicsState]; } ScopedNSGraphicsContextSaveGState::~ScopedNSGraphicsContextSaveGState() { [NSGraphicsContext restoreGraphicsState]; if (!context_ && base::mac::IsOSLeopardOrEarlier()) { // On 10.5 and earlier, there is a bug. If the current graphics context was // nil when +[NSGraphicsContext saveGraphicsState] was called, then calling // +[NSGraphicsContext restoreGraphicsState] will not restore a nil current // context, but will leave the current context in place. Because allowing // that stale context (which will be deallocated soon) to remain current // will only lead to heartache and pain, the current context must be // manually nilled out. [NSGraphicsContext setCurrentContext:nil]; } DCHECK_EQ(context_, [NSGraphicsContext currentContext]); } } // namespace gfx