| 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 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" | 
| 6 | 6 | 
| 7 #include "base/logging.h" | 7 #include "base/logging.h" | 
| 8 #import "base/mac/mac_util.h" | 8 #import "base/mac/mac_util.h" | 
| 9 #include "base/mac/scoped_cftyperef.h" | 9 #include "base/mac/scoped_cftyperef.h" | 
| 10 #include "chrome/browser/themes/theme_service.h" | 10 #include "chrome/browser/themes/theme_service.h" | 
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 251   // don't have to worry about mouse ups. | 251   // don't have to worry about mouse ups. | 
| 252   if (closeButtonActive && [controller_ inRapidClosureMode]) { | 252   if (closeButtonActive && [controller_ inRapidClosureMode]) { | 
| 253     NSPoint hitLocation = [[self superview] convertPoint:downLocation | 253     NSPoint hitLocation = [[self superview] convertPoint:downLocation | 
| 254                                                 fromView:nil]; | 254                                                 fromView:nil]; | 
| 255     if ([self hitTest:hitLocation] == closeButton_) { | 255     if ([self hitTest:hitLocation] == closeButton_) { | 
| 256       [closeButton_ mouseDown:theEvent]; | 256       [closeButton_ mouseDown:theEvent]; | 
| 257       return; | 257       return; | 
| 258     } | 258     } | 
| 259   } | 259   } | 
| 260 | 260 | 
| 261   // Fire the action to select the tab. |  | 
| 262   if ([[controller_ target] respondsToSelector:[controller_ action]]) |  | 
| 263     [[controller_ target] performSelector:[controller_ action] |  | 
| 264                                withObject:self]; |  | 
| 265 |  | 
| 266   [self resetDragControllers]; | 261   [self resetDragControllers]; | 
| 267 | 262 | 
| 268   // Resolve overlay back to original window. | 263   // Resolve overlay back to original window. | 
| 269   sourceWindow_ = [self window]; | 264   sourceWindow_ = [self window]; | 
| 270   if ([sourceWindow_ isKindOfClass:[NSPanel class]]) { | 265   if ([sourceWindow_ isKindOfClass:[NSPanel class]]) { | 
| 271     sourceWindow_ = [sourceWindow_ parentWindow]; | 266     sourceWindow_ = [sourceWindow_ parentWindow]; | 
| 272   } | 267   } | 
| 273 | 268 | 
| 274   sourceWindowFrame_ = [sourceWindow_ frame]; | 269   sourceWindowFrame_ = [sourceWindow_ frame]; | 
| 275   sourceTabFrame_ = [self frame]; | 270   sourceTabFrame_ = [self frame]; | 
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 539   // a placeholder so it appears like it's part of that window. | 534   // a placeholder so it appears like it's part of that window. | 
| 540   if (targetController_) { | 535   if (targetController_) { | 
| 541     if (![[targetController_ window] isKeyWindow]) { | 536     if (![[targetController_ window] isKeyWindow]) { | 
| 542       // && ([targetDwellDate timeIntervalSinceNow] < -REQUIRED_DWELL)) { | 537       // && ([targetDwellDate timeIntervalSinceNow] < -REQUIRED_DWELL)) { | 
| 543       [[targetController_ window] orderFront:nil]; | 538       [[targetController_ window] orderFront:nil]; | 
| 544       targetDwellDate = nil; | 539       targetDwellDate = nil; | 
| 545     } | 540     } | 
| 546 | 541 | 
| 547     // Compute where placeholder should go and insert it into the | 542     // Compute where placeholder should go and insert it into the | 
| 548     // destination tab strip. | 543     // destination tab strip. | 
| 549     TabView* draggedTabView = (TabView*)[draggedController_ selectedTabView]; | 544     TabView* draggedTabView = (TabView*)[draggedController_ activeTabView]; | 
| 550     NSRect tabFrame = [draggedTabView frame]; | 545     NSRect tabFrame = [draggedTabView frame]; | 
| 551     tabFrame.origin = [dragWindow_ convertBaseToScreen:tabFrame.origin]; | 546     tabFrame.origin = [dragWindow_ convertBaseToScreen:tabFrame.origin]; | 
| 552     tabFrame.origin = [[targetController_ window] | 547     tabFrame.origin = [[targetController_ window] | 
| 553                         convertScreenToBase:tabFrame.origin]; | 548                         convertScreenToBase:tabFrame.origin]; | 
| 554     tabFrame = [[targetController_ tabStripView] | 549     tabFrame = [[targetController_ tabStripView] | 
| 555                 convertRect:tabFrame fromView:nil]; | 550                 convertRect:tabFrame fromView:nil]; | 
| 556     [targetController_ insertPlaceholderForTab:self | 551     [targetController_ insertPlaceholderForTab:self | 
| 557                                          frame:tabFrame | 552                                          frame:tabFrame | 
| 558                                  yStretchiness:0]; | 553                                  yStretchiness:0]; | 
| 559     [targetController_ layoutTabs]; | 554     [targetController_ layoutTabs]; | 
| 560   } else { | 555   } else { | 
| 561     [dragWindow_ makeKeyAndOrderFront:nil]; | 556     [dragWindow_ makeKeyAndOrderFront:nil]; | 
| 562   } | 557   } | 
| 563 | 558 | 
| 564   // Adjust the visibility of the window background. If there is a drop target, | 559   // Adjust the visibility of the window background. If there is a drop target, | 
| 565   // we want to hide the window background so the tab stands out for | 560   // we want to hide the window background so the tab stands out for | 
| 566   // positioning. If not, we want to show it so it looks like a new window will | 561   // positioning. If not, we want to show it so it looks like a new window will | 
| 567   // be realized. | 562   // be realized. | 
| 568   BOOL chromeShouldBeVisible = targetController_ == nil; | 563   BOOL chromeShouldBeVisible = targetController_ == nil; | 
| 569   [self setWindowBackgroundVisibility:chromeShouldBeVisible]; | 564   [self setWindowBackgroundVisibility:chromeShouldBeVisible]; | 
| 570 } | 565 } | 
| 571 | 566 | 
| 572 - (void)mouseUp:(NSEvent*)theEvent { | 567 - (void)mouseUp:(NSEvent*)theEvent { | 
| 573   // The drag/click is done. If the user dragged the mouse, finalize the drag | 568   // The drag/click is done. If the user dragged the mouse, finalize the drag | 
| 574   // and clean up. | 569   // and clean up. | 
| 575 | 570 | 
|  | 571   // Fire the action to select the tab. | 
|  | 572   if ([[controller_ target] respondsToSelector:[controller_ action]]) | 
|  | 573     [[controller_ target] performSelector:[controller_ action] | 
|  | 574                                withObject:self]; | 
|  | 575 | 
| 576   // Special-case this to keep the logic below simpler. | 576   // Special-case this to keep the logic below simpler. | 
| 577   if (moveWindowOnDrag_) | 577   if (moveWindowOnDrag_) | 
| 578     return; | 578     return; | 
| 579 | 579 | 
| 580   // Cancel any delayed -mouseDragged: requests that may still be pending. | 580   // Cancel any delayed -mouseDragged: requests that may still be pending. | 
| 581   [NSObject cancelPreviousPerformRequestsWithTarget:self]; | 581   [NSObject cancelPreviousPerformRequestsWithTarget:self]; | 
| 582 | 582 | 
| 583   // TODO(pinkerton): http://crbug.com/25682 demonstrates a way to get here by | 583   // TODO(pinkerton): http://crbug.com/25682 demonstrates a way to get here by | 
| 584   // some weird circumstance that doesn't first go through mouseDown:. We | 584   // some weird circumstance that doesn't first go through mouseDown:. We | 
| 585   // really shouldn't go any farther. | 585   // really shouldn't go any farther. | 
| 586   if (!sourceController_) | 586   if (!sourceController_) | 
| 587     return; | 587     return; | 
| 588 | 588 | 
| 589   // We are now free to re-display the new tab button in the window we're | 589   // We are now free to re-display the new tab button in the window we're | 
| 590   // dragging. It will show when the next call to -layoutTabs (which happens | 590   // dragging. It will show when the next call to -layoutTabs (which happens | 
| 591   // indrectly by several of the calls below, such as removing the placeholder). | 591   // indrectly by several of the calls below, such as removing the placeholder). | 
| 592   [draggedController_ showNewTabButton:YES]; | 592   [draggedController_ showNewTabButton:YES]; | 
| 593 | 593 | 
| 594   if (draggingWithinTabStrip_) { | 594   if (draggingWithinTabStrip_) { | 
| 595     if (tabWasDragged_) { | 595     if (tabWasDragged_) { | 
| 596       // Move tab to new location. | 596       // Move tab to new location. | 
| 597       DCHECK([sourceController_ numberOfTabs]); | 597       DCHECK([sourceController_ numberOfTabs]); | 
| 598       TabWindowController* dropController = sourceController_; | 598       TabWindowController* dropController = sourceController_; | 
| 599       [dropController moveTabView:[dropController selectedTabView] | 599       [dropController moveTabView:[dropController activeTabView] | 
| 600                    fromController:nil]; | 600                    fromController:nil]; | 
| 601     } | 601     } | 
| 602   } else if (targetController_) { | 602   } else if (targetController_) { | 
| 603     // Move between windows. If |targetController_| is nil, we're not dropping | 603     // Move between windows. If |targetController_| is nil, we're not dropping | 
| 604     // into any existing window. | 604     // into any existing window. | 
| 605     NSView* draggedTabView = [draggedController_ selectedTabView]; | 605     NSView* draggedTabView = [draggedController_ activeTabView]; | 
| 606     [targetController_ moveTabView:draggedTabView | 606     [targetController_ moveTabView:draggedTabView | 
| 607                     fromController:draggedController_]; | 607                     fromController:draggedController_]; | 
| 608     // Force redraw to avoid flashes of old content before returning to event | 608     // Force redraw to avoid flashes of old content before returning to event | 
| 609     // loop. | 609     // loop. | 
| 610     [[targetController_ window] display]; | 610     [[targetController_ window] display]; | 
| 611     [targetController_ showWindow:nil]; | 611     [targetController_ showWindow:nil]; | 
| 612     [draggedController_ removeOverlay]; | 612     [draggedController_ removeOverlay]; | 
| 613   } else { | 613   } else { | 
| 614     // Only move the window around on screen. Make sure it's set back to | 614     // Only move the window around on screen. Make sure it's set back to | 
| 615     // normal state (fully opaque, has shadow, has key, etc). | 615     // normal state (fully opaque, has shadow, has key, etc). | 
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 768 | 768 | 
| 769   // Draw the top stroke. | 769   // Draw the top stroke. | 
| 770   [context saveGraphicsState]; | 770   [context saveGraphicsState]; | 
| 771   [borderColor set]; | 771   [borderColor set]; | 
| 772   [path setLineWidth:lineWidth]; | 772   [path setLineWidth:lineWidth]; | 
| 773   [path stroke]; | 773   [path stroke]; | 
| 774   [context restoreGraphicsState]; | 774   [context restoreGraphicsState]; | 
| 775 | 775 | 
| 776   // Mimic the tab strip's bottom border, which consists of a dark border | 776   // Mimic the tab strip's bottom border, which consists of a dark border | 
| 777   // and light highlight. | 777   // and light highlight. | 
| 778   if (!selected) { | 778   if (![controller_ active]) { | 
| 779     [path addClip]; | 779     [path addClip]; | 
| 780     NSRect borderRect = rect; | 780     NSRect borderRect = rect; | 
| 781     borderRect.origin.y = lineWidth; | 781     borderRect.origin.y = lineWidth; | 
| 782     borderRect.size.height = lineWidth; | 782     borderRect.size.height = lineWidth; | 
| 783     [borderColor set]; | 783     [borderColor set]; | 
| 784     NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); | 784     NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); | 
| 785 | 785 | 
| 786     borderRect.origin.y = 0; | 786     borderRect.origin.y = 0; | 
| 787     [highlightColor set]; | 787     [highlightColor set]; | 
| 788     NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); | 788     NSRectFillUsingOperation(borderRect, NSCompositeSourceOver); | 
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1060                                  topRight.y) | 1060                                  topRight.y) | 
| 1061        controlPoint2:NSMakePoint(bottomRight.x - baseControlPointOutset, | 1061        controlPoint2:NSMakePoint(bottomRight.x - baseControlPointOutset, | 
| 1062                                  bottomRight.y)]; | 1062                                  bottomRight.y)]; | 
| 1063   [path lineToPoint:NSMakePoint(bottomRight.x + lineWidth, bottomRight.y)]; | 1063   [path lineToPoint:NSMakePoint(bottomRight.x + lineWidth, bottomRight.y)]; | 
| 1064   [path lineToPoint:NSMakePoint(bottomRight.x + lineWidth, | 1064   [path lineToPoint:NSMakePoint(bottomRight.x + lineWidth, | 
| 1065                                 bottomRight.y - (2 * lineWidth))]; | 1065                                 bottomRight.y - (2 * lineWidth))]; | 
| 1066   return path; | 1066   return path; | 
| 1067 } | 1067 } | 
| 1068 | 1068 | 
| 1069 @end  // @implementation TabView(Private) | 1069 @end  // @implementation TabView(Private) | 
| OLD | NEW | 
|---|