// 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
