• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3// found in the LICENSE file.
4
5#import "chrome/browser/ui/cocoa/draggable_button.h"
6
7#include "base/logging.h"
8
9@implementation DraggableButton
10
11- (id)initWithFrame:(NSRect)frame {
12  if ((self = [super initWithFrame:frame])) {
13    draggableButtonImpl_.reset(
14        [[DraggableButtonImpl alloc] initWithButton:self]);
15  }
16  return self;
17}
18
19- (id)initWithCoder:(NSCoder*)coder {
20  if ((self = [super initWithCoder:coder])) {
21    draggableButtonImpl_.reset(
22        [[DraggableButtonImpl alloc] initWithButton:self]);
23  }
24  return self;
25}
26
27- (DraggableButtonImpl*)draggableButton {
28  return draggableButtonImpl_.get();
29}
30
31- (void)mouseUp:(NSEvent*)theEvent {
32  if ([draggableButtonImpl_ mouseUpImpl:theEvent] ==
33          kDraggableButtonMixinCallSuper) {
34    [super mouseUp:theEvent];
35  }
36}
37
38- (void)mouseDown:(NSEvent*)theEvent {
39  // The impl spins an event loop to distinguish clicks from drags,
40  // which could result in our destruction.  Wire ourselves down for
41  // the duration.
42  base::scoped_nsobject<DraggableButton> keepAlive([self retain]);
43
44  if ([draggableButtonImpl_ mouseDownImpl:theEvent] ==
45          kDraggableButtonMixinCallSuper) {
46    [super mouseDown:theEvent];
47  }
48}
49
50- (void)beginDrag:(NSEvent*)dragEvent {
51  // Must be overridden by subclasses.
52  NOTREACHED();
53}
54
55@end  // @interface DraggableButton
56