⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 176483 in webkit


Ignore:
Timestamp:
Nov 21, 2014, 4:07:46 PM (12 years ago)
Author:
Conrad Shultz
Message:

Page previews should have a margin.
https://bugs.webkit.org/show_bug.cgi?id=138990

Reviewed by Beth Dakin.

Enclose the WKWebView (or client-supplied preview view) in a container slightly larger
than the preview view. Adjust sizing code to accommodate the margin.

  • UIProcess/mac/WKActionMenuController.mm:

(+[WKPagePreviewViewController previewPadding]):
Return the total amount of fixed padding surrounding the preview
(-[WKPagePreviewViewController loadView]):
Store the actual previewView in an ivar so that clients can distinguish it from the container
view; wrap the preview in a container view; set frames appropriately.
(-[WKActionMenuController _createPreviewPopover]):
Update to reflect method rename; supplement the popover size with the fixed padding.
(-[WKActionMenuController _preferredPopoverSizeWithPreviewPadding:]):
Renamed from -_preferredPopoverSize; account for the fixed padding when computing the preferred size.
(-[WKActionMenuController _clearPreviewPopover]):
Use the previewView ivar instead of the view controller's view.
(-[WKActionMenuController pagePreviewViewControllerWasClicked:]):
Ditto.
(-[WKActionMenuController _preferredPopoverSize]): Deleted.

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r176480 r176483  
     12014-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
    1272014-11-21  Tim Horton  <timothy_horton@apple.com>
    228
  • trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm

    r176480 r176483  
    7272#if WK_API_ENABLED
    7373
     74static const CGFloat previewViewInset = 3;
     75
    7476@class WKPagePreviewViewController;
    7577
     
    8385    NSSize _mainViewSize;
    8486    RetainPtr<NSURL> _url;
     87    RetainPtr<NSView> _previewView;
    8588    id <WKPagePreviewViewControllerDelegate> _delegate;
    8689    CGFloat _popoverToViewScale;
     
    8891
    8992- (instancetype)initWithPageURL:(NSURL *)URL mainViewSize:(NSSize)size popoverToViewScale:(CGFloat)scale;
     93
     94+ (NSSize)previewPadding;
    9095
    9196@end
     
    105110}
    106111
     112+ (NSSize)previewPadding
     113{
     114    return NSMakeSize(2 * previewViewInset, 2 * previewViewInset);
     115}
     116
    107117- (void)loadView
    108118{
    109119    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) {
    112122        RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:defaultFrame]);
    113123        [webView _setIgnoresNonWheelMouseEvents:YES];
     
    116126            [webView loadRequest:request];
    117127        }
    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];
    120143
    121144    // 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();
    127148}
    128149
     
    351372    _popoverOriginRect = hitTestResult->elementBoundingBox();
    352373
    353     NSSize popoverSize = [self _preferredPopoverSize];
     374    NSSize previewPadding = [WKPagePreviewViewController previewPadding];
     375    NSSize popoverSize = [self _preferredPopoverSizeWithPreviewPadding:previewPadding];
    354376    CGFloat actualPopoverToViewScale = popoverSize.width / NSWidth(_wkView.bounds);
     377    popoverSize.width += previewPadding.width;
     378    popoverSize.height += previewPadding.height;
     379
    355380    _previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url mainViewSize:_wkView.bounds.size popoverToViewScale:actualPopoverToViewScale]);
    356381    _previewViewController->_delegate = self;
     
    388413}
    389414
    390 - (NSSize)_preferredPopoverSize
     415- (NSSize)_preferredPopoverSizeWithPreviewPadding:(NSSize)previewPadding
    391416{
    392417    static const CGFloat preferredPopoverToViewScale = 0.75;
    393     static const CGFloat screenPadding = 40;
     418    static const NSSize screenPadding = {40, 40};
    394419    static const NSSize smallestPopoverSize = NSMakeSize(500, 300);
     420
     421    const NSSize effectivePadding = NSMakeSize(screenPadding.width + previewPadding.width, screenPadding.height + previewPadding.height);
    395422
    396423    NSWindow *window = _wkView.window;
     
    404431    CGFloat availableSpaceAbove = NSMaxY(screenFrame) - NSMaxY(originScreenRect);
    405432    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);
    408435    if (targetSizeFitsInAvailableSpace(targetSize, maxSpaceAvailableOnYEdge) && targetSizeFitsInAvailableSpace(targetSize, largestPopoverSize))
    409436        return targetSize;
     
    411438    CGFloat availableSpaceAtLeft = NSMinX(originScreenRect) - NSMinX(screenFrame);
    412439    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);
    415442    if (targetSizeFitsInAvailableSpace(targetSize, maxSpaceAvailableOnXEdge) && targetSizeFitsInAvailableSpace(targetSize, largestPopoverSize))
    416443        return targetSize;
     
    459486    if (_previewViewController) {
    460487        _previewViewController->_delegate = nil;
    461         [_wkView _finishPreviewingURL:_previewViewController->_url.get() withPreviewView:[_previewViewController view]];
     488        [_wkView _finishPreviewingURL:_previewViewController->_url.get() withPreviewView:_previewViewController->_previewView.get()];
    462489        _previewViewController = nil;
    463490    }
     
    10641091{
    10651092    if (NSURL *url = pagePreviewViewController->_url.get())
    1066         [_wkView _handleClickInPreviewView:pagePreviewViewController.view URL:url];
     1093        [_wkView _handleClickInPreviewView:pagePreviewViewController->_previewView.get() URL:url];
    10671094}
    10681095
Note: See TracChangeset for help on using the changeset viewer.