Title: [176511] trunk/Source/WebKit2
Revision
176511
Author
[email protected]
Date
2014-11-23 21:21:13 -0800 (Sun, 23 Nov 2014)

Log Message

Page previews should have titles
https://bugs.webkit.org/show_bug.cgi?id=139020

Reviewed by Tim Horton.

* UIProcess/API/Cocoa/WKViewPrivate.h:
Declare -_titleForPreviewOfURL:.

* UIProcess/API/mac/WKView.mm:
(-[WKView _titleForPreviewOfURL:]):
Stub implementation.

* UIProcess/mac/WKActionMenuController.mm:
(+[WKPagePreviewViewController previewPadding]):
Account for the title height.
(-[WKPagePreviewViewController loadView]):
Set correct autoresize masks on some views; create and configure a title view that is
horizontally and vertically centered.
(-[WKActionMenuController pagePreviewViewController:titleForPreviewOfURL:]):
WKPagePreviewViewControllerDelegate method; wrap -[WKView _titleForPreviewOfURL:].

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (176510 => 176511)


--- trunk/Source/WebKit2/ChangeLog	2014-11-23 18:46:18 UTC (rev 176510)
+++ trunk/Source/WebKit2/ChangeLog	2014-11-24 05:21:13 UTC (rev 176511)
@@ -1,3 +1,26 @@
+2014-11-23  Conrad Shultz  <[email protected]>
+
+        Page previews should have titles
+        https://bugs.webkit.org/show_bug.cgi?id=139020
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/API/Cocoa/WKViewPrivate.h:
+        Declare -_titleForPreviewOfURL:.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _titleForPreviewOfURL:]):
+        Stub implementation.
+
+        * UIProcess/mac/WKActionMenuController.mm:
+        (+[WKPagePreviewViewController previewPadding]):
+        Account for the title height.
+        (-[WKPagePreviewViewController loadView]):
+        Set correct autoresize masks on some views; create and configure a title view that is
+        horizontally and vertically centered.
+        (-[WKActionMenuController pagePreviewViewController:titleForPreviewOfURL:]):
+        WKPagePreviewViewControllerDelegate method; wrap -[WKView _titleForPreviewOfURL:].
+
 2014-11-22  Simon Fraser  <[email protected]>
 
         Extend WKRenderObject and WKRenderLayer with some more useful data

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (176510 => 176511)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-11-23 18:46:18 UTC (rev 176510)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-11-24 05:21:13 UTC (rev 176511)
@@ -123,6 +123,7 @@
 - (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKActionMenuType)type defaultActionMenuItems:(NSArray *)defaultMenuItems userData:(WKTypeRef)userData;
 
 - (NSView *)_viewForPreviewingURL:(NSURL *)url initialFrameSize:(NSSize)initialFrameSize;
+- (NSString *)_titleForPreviewOfURL:(NSURL *)url;
 - (void)_finishPreviewingURL:(NSURL *)url withPreviewView:(NSView *)previewView;
 - (void)_handleClickInPreviewView:(NSView *)previewView URL:(NSURL *)url;
 

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (176510 => 176511)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-11-23 18:46:18 UTC (rev 176510)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-11-24 05:21:13 UTC (rev 176511)
@@ -4219,6 +4219,11 @@
     return nil;
 }
 
+- (NSString *)_titleForPreviewOfURL:(NSURL *)url
+{
+    return nil;
+}
+
 - (void)_finishPreviewingURL:(NSURL *)url withPreviewView:(NSView *)previewView
 {
 }

Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (176510 => 176511)


--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm	2014-11-23 18:46:18 UTC (rev 176510)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm	2014-11-24 05:21:13 UTC (rev 176511)
@@ -72,11 +72,13 @@
 #if WK_API_ENABLED
 
 static const CGFloat previewViewInset = 3;
+static const CGFloat previewViewTitleHeight = 34;
 
 @class WKPagePreviewViewController;
 
 @protocol WKPagePreviewViewControllerDelegate <NSObject>
 - (NSView *)pagePreviewViewController:(WKPagePreviewViewController *)pagePreviewViewController viewForPreviewingURL:(NSURL *)url initialFrameSize:(NSSize)initialFrameSize;
+- (NSString *)pagePreviewViewController:(WKPagePreviewViewController *)pagePreviewViewController titleForPreviewOfURL:(NSURL *)url;
 - (void)pagePreviewViewControllerWasClicked:(WKPagePreviewViewController *)pagePreviewViewController;
 @end
 
@@ -111,7 +113,7 @@
 
 + (NSSize)previewPadding
 {
-    return NSMakeSize(2 * previewViewInset, 2 * previewViewInset);
+    return NSMakeSize(2 * previewViewInset, previewViewTitleHeight + 2 * previewViewInset);
 }
 
 - (void)loadView
@@ -133,14 +135,44 @@
 
     NSRect previewFrame = [_previewView frame];
     NSRect containerFrame = previewFrame;
-    containerFrame.size.width += 2 * previewViewInset;
-    containerFrame.size.height += 2 * previewViewInset;
+    NSSize totalPadding = [[self class] previewPadding];
+    containerFrame.size.width += totalPadding.width;
+    containerFrame.size.height += totalPadding.height;
     previewFrame = NSOffsetRect(previewFrame, previewViewInset, previewViewInset);
 
     RetainPtr<NSView> containerView = adoptNS([[NSView alloc] initWithFrame:containerFrame]);
+    [containerView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [containerView addSubview:_previewView.get()];
     [_previewView setFrame:previewFrame];
+    [_previewView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
+    RetainPtr<NSTextField> titleTextField = adoptNS([[NSTextField alloc] init]);
+    [titleTextField setWantsLayer:YES];
+    [titleTextField setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin];
+    [titleTextField setEditable:NO];
+    [titleTextField setBezeled:NO];
+    [titleTextField setDrawsBackground:NO];
+    [titleTextField setAlignment:NSCenterTextAlignment];
+    [titleTextField setUsesSingleLineMode:YES];
+    [titleTextField setLineBreakMode:NSLineBreakByTruncatingTail];
+    [titleTextField setTextColor:[NSColor labelColor]];
+
+    NSString *title = [_delegate pagePreviewViewController:self titleForPreviewOfURL:_url.get()];
+    if (!title)
+        title = [_url absoluteString];
+
+    [titleTextField setStringValue:title ? title : @""];
+
+    [titleTextField sizeToFit];
+    NSSize titleFittingSize = [titleTextField frame].size;
+    CGFloat textFieldCenteringOffset = (NSMaxY(containerFrame) - NSMaxY(previewFrame) - titleFittingSize.height) / 2;
+
+    NSRect titleFrame = previewFrame;
+    titleFrame.size.height = titleFittingSize.height;
+    titleFrame.origin.y = NSMaxY(previewFrame) + textFieldCenteringOffset;
+    [titleTextField setFrame:titleFrame];
+    [containerView addSubview:titleTextField.get()];
+
     // Setting the webView bounds will scale it to 75% of the _mainViewSize.
     [_previewView setBounds:NSMakeRect(0, 0, _mainViewSize.width / _popoverToViewScale, _mainViewSize.height / _popoverToViewScale)];
 
@@ -1087,6 +1119,11 @@
     return [_wkView _viewForPreviewingURL:url initialFrameSize:initialFrameSize];
 }
 
+- (NSString *)pagePreviewViewController:(WKPagePreviewViewController *)pagePreviewViewController titleForPreviewOfURL:(NSURL *)url
+{
+    return [_wkView _titleForPreviewOfURL:url];
+}
+
 - (void)pagePreviewViewControllerWasClicked:(WKPagePreviewViewController *)pagePreviewViewController
 {
     if (NSURL *url = ""
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to