// 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. #import "chrome/browser/ui/cocoa/draggable_button.h" #include "base/logging.h" @implementation DraggableButton - (id)initWithFrame:(NSRect)frame { if ((self = [super initWithFrame:frame])) { draggableButtonImpl_.reset( [[DraggableButtonImpl alloc] initWithButton:self]); } return self; } - (id)initWithCoder:(NSCoder*)coder { if ((self = [super initWithCoder:coder])) { draggableButtonImpl_.reset( [[DraggableButtonImpl alloc] initWithButton:self]); } return self; } - (DraggableButtonImpl*)draggableButton { return draggableButtonImpl_.get(); } - (void)mouseUp:(NSEvent*)theEvent { if ([draggableButtonImpl_ mouseUpImpl:theEvent] == kDraggableButtonMixinCallSuper) { [super mouseUp:theEvent]; } } - (void)mouseDown:(NSEvent*)theEvent { // The impl spins an event loop to distinguish clicks from drags, // which could result in our destruction. Wire ourselves down for // the duration. base::scoped_nsobject<DraggableButton> keepAlive([self retain]); if ([draggableButtonImpl_ mouseDownImpl:theEvent] == kDraggableButtonMixinCallSuper) { [super mouseDown:theEvent]; } } - (void)beginDrag:(NSEvent*)dragEvent { // Must be overridden by subclasses. NOTREACHED(); } @end // @interface DraggableButton