Changeset 176483 in webkit
- Timestamp:
- Nov 21, 2014, 4:07:46 PM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/mac/WKActionMenuController.mm (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r176480 r176483 1 2014-11-21 Conrad Shultz <conrad_shultz@apple.com> 2 3 Page previews should have a margin. 4 https://bugs.webkit.org/show_bug.cgi?id=138990 5 6 Reviewed by Beth Dakin. 7 8 Enclose the WKWebView (or client-supplied preview view) in a container slightly larger 9 than the preview view. Adjust sizing code to accommodate the margin. 10 11 * UIProcess/mac/WKActionMenuController.mm: 12 (+[WKPagePreviewViewController previewPadding]): 13 Return the total amount of fixed padding surrounding the preview 14 (-[WKPagePreviewViewController loadView]): 15 Store the actual previewView in an ivar so that clients can distinguish it from the container 16 view; wrap the preview in a container view; set frames appropriately. 17 (-[WKActionMenuController _createPreviewPopover]): 18 Update to reflect method rename; supplement the popover size with the fixed padding. 19 (-[WKActionMenuController _preferredPopoverSizeWithPreviewPadding:]): 20 Renamed from -_preferredPopoverSize; account for the fixed padding when computing the preferred size. 21 (-[WKActionMenuController _clearPreviewPopover]): 22 Use the previewView ivar instead of the view controller's view. 23 (-[WKActionMenuController pagePreviewViewControllerWasClicked:]): 24 Ditto. 25 (-[WKActionMenuController _preferredPopoverSize]): Deleted. 26 1 27 2014-11-21 Tim Horton <timothy_horton@apple.com> 2 28 -
trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm
r176480 r176483 72 72 #if WK_API_ENABLED 73 73 74 static const CGFloat previewViewInset = 3; 75 74 76 @class WKPagePreviewViewController; 75 77 … … 83 85 NSSize _mainViewSize; 84 86 RetainPtr<NSURL> _url; 87 RetainPtr<NSView> _previewView; 85 88 id <WKPagePreviewViewControllerDelegate> _delegate; 86 89 CGFloat _popoverToViewScale; … … 88 91 89 92 - (instancetype)initWithPageURL:(NSURL *)URL mainViewSize:(NSSize)size popoverToViewScale:(CGFloat)scale; 93 94 + (NSSize)previewPadding; 90 95 91 96 @end … … 105 110 } 106 111 112 + (NSSize)previewPadding 113 { 114 return NSMakeSize(2 * previewViewInset, 2 * previewViewInset); 115 } 116 107 117 - (void)loadView 108 118 { 109 119 NSRect defaultFrame = NSMakeRect(0, 0, _mainViewSize.width, _mainViewSize.height); 110 RetainPtr<NSView>previewView = [_delegate pagePreviewViewController:self viewForPreviewingURL:_url.get() initialFrameSize:defaultFrame.size];111 if (! previewView) {120 _previewView = [_delegate pagePreviewViewController:self viewForPreviewingURL:_url.get() initialFrameSize:defaultFrame.size]; 121 if (!_previewView) { 112 122 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:defaultFrame]); 113 123 [webView _setIgnoresNonWheelMouseEvents:YES]; … … 116 126 [webView loadRequest:request]; 117 127 } 118 previewView = webView; 119 } 128 _previewView = webView; 129 } 130 131 RetainPtr<NSClickGestureRecognizer> clickRecognizer = adoptNS([[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(_clickRecognized:)]); 132 [_previewView addGestureRecognizer:clickRecognizer.get()]; 133 134 NSRect previewFrame = [_previewView frame]; 135 NSRect containerFrame = previewFrame; 136 containerFrame.size.width += 2 * previewViewInset; 137 containerFrame.size.height += 2 * previewViewInset; 138 previewFrame = NSOffsetRect(previewFrame, previewViewInset, previewViewInset); 139 140 RetainPtr<NSView> containerView = adoptNS([[NSView alloc] initWithFrame:containerFrame]); 141 [containerView addSubview:_previewView.get()]; 142 [_previewView setFrame:previewFrame]; 120 143 121 144 // Setting the webView bounds will scale it to 75% of the _mainViewSize. 122 [previewView setBounds:NSMakeRect(0, 0, _mainViewSize.width / _popoverToViewScale, _mainViewSize.height / _popoverToViewScale)]; 123 124 RetainPtr<NSClickGestureRecognizer> clickRecognizer = adoptNS([[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(_clickRecognized:)]); 125 [previewView addGestureRecognizer:clickRecognizer.get()]; 126 self.view = previewView.get(); 145 [_previewView setBounds:NSMakeRect(0, 0, _mainViewSize.width / _popoverToViewScale, _mainViewSize.height / _popoverToViewScale)]; 146 147 self.view = containerView.get(); 127 148 } 128 149 … … 351 372 _popoverOriginRect = hitTestResult->elementBoundingBox(); 352 373 353 NSSize popoverSize = [self _preferredPopoverSize]; 374 NSSize previewPadding = [WKPagePreviewViewController previewPadding]; 375 NSSize popoverSize = [self _preferredPopoverSizeWithPreviewPadding:previewPadding]; 354 376 CGFloat actualPopoverToViewScale = popoverSize.width / NSWidth(_wkView.bounds); 377 popoverSize.width += previewPadding.width; 378 popoverSize.height += previewPadding.height; 379 355 380 _previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url mainViewSize:_wkView.bounds.size popoverToViewScale:actualPopoverToViewScale]); 356 381 _previewViewController->_delegate = self; … … 388 413 } 389 414 390 - (NSSize)_preferredPopoverSize 415 - (NSSize)_preferredPopoverSizeWithPreviewPadding:(NSSize)previewPadding 391 416 { 392 417 static const CGFloat preferredPopoverToViewScale = 0.75; 393 static const CGFloat screenPadding = 40;418 static const NSSize screenPadding = {40, 40}; 394 419 static const NSSize smallestPopoverSize = NSMakeSize(500, 300); 420 421 const NSSize effectivePadding = NSMakeSize(screenPadding.width + previewPadding.width, screenPadding.height + previewPadding.height); 395 422 396 423 NSWindow *window = _wkView.window; … … 404 431 CGFloat availableSpaceAbove = NSMaxY(screenFrame) - NSMaxY(originScreenRect); 405 432 CGFloat availableSpaceBelow = NSMinY(originScreenRect) - NSMinY(screenFrame); 406 CGFloat maxAvailableVerticalSpace = fmax(availableSpaceAbove, availableSpaceBelow) - screenPadding;407 NSSize maxSpaceAvailableOnYEdge = NSMakeSize(screenFrame.size.width - screenPadding, maxAvailableVerticalSpace);433 CGFloat maxAvailableVerticalSpace = fmax(availableSpaceAbove, availableSpaceBelow) - effectivePadding.height; 434 NSSize maxSpaceAvailableOnYEdge = NSMakeSize(screenFrame.size.width - effectivePadding.height, maxAvailableVerticalSpace); 408 435 if (targetSizeFitsInAvailableSpace(targetSize, maxSpaceAvailableOnYEdge) && targetSizeFitsInAvailableSpace(targetSize, largestPopoverSize)) 409 436 return targetSize; … … 411 438 CGFloat availableSpaceAtLeft = NSMinX(originScreenRect) - NSMinX(screenFrame); 412 439 CGFloat availableSpaceAtRight = NSMaxX(screenFrame) - NSMaxX(originScreenRect); 413 CGFloat maxAvailableHorizontalSpace = fmax(availableSpaceAtLeft, availableSpaceAtRight) - screenPadding;414 NSSize maxSpaceAvailableOnXEdge = NSMakeSize(maxAvailableHorizontalSpace, screenFrame.size.height - screenPadding);440 CGFloat maxAvailableHorizontalSpace = fmax(availableSpaceAtLeft, availableSpaceAtRight) - effectivePadding.width; 441 NSSize maxSpaceAvailableOnXEdge = NSMakeSize(maxAvailableHorizontalSpace, screenFrame.size.height - effectivePadding.width); 415 442 if (targetSizeFitsInAvailableSpace(targetSize, maxSpaceAvailableOnXEdge) && targetSizeFitsInAvailableSpace(targetSize, largestPopoverSize)) 416 443 return targetSize; … … 459 486 if (_previewViewController) { 460 487 _previewViewController->_delegate = nil; 461 [_wkView _finishPreviewingURL:_previewViewController->_url.get() withPreviewView: [_previewViewController view]];488 [_wkView _finishPreviewingURL:_previewViewController->_url.get() withPreviewView:_previewViewController->_previewView.get()]; 462 489 _previewViewController = nil; 463 490 } … … 1064 1091 { 1065 1092 if (NSURL *url = pagePreviewViewController->_url.get()) 1066 [_wkView _handleClickInPreviewView:pagePreviewViewController .viewURL:url];1093 [_wkView _handleClickInPreviewView:pagePreviewViewController->_previewView.get() URL:url]; 1067 1094 } 1068 1095
Note:
See TracChangeset
for help on using the changeset viewer.