<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[175645] trunk/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/175645">175645</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2014-11-05 15:31:38 -0800 (Wed, 05 Nov 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Page preview popover should show scaled-down web content
https://bugs.webkit.org/show_bug.cgi?id=138444

Reviewed by Anders Carlsson.

Instead of keeping the preferred size in the controller, keep the main view’s 
size, and then scale the bounds of the popover’s view using that and the scale 
factor as a constant. Set the size of the popover explicitly so that it doesn’t 
get the view’s size. This will cause it to scale the WKWebView.
* UIProcess/mac/WKActionMenuController.mm:
(-[WKPagePreviewViewController initWithPageURL:]):
(-[WKPagePreviewViewController loadView]):
(-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
(-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKActionMenuControllermm">trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (175644 => 175645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-11-05 23:20:28 UTC (rev 175644)
+++ trunk/Source/WebKit2/ChangeLog        2014-11-05 23:31:38 UTC (rev 175645)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-11-05  Beth Dakin  &lt;bdakin@apple.com&gt;
+
+        Page preview popover should show scaled-down web content
+        https://bugs.webkit.org/show_bug.cgi?id=138444
+
+        Reviewed by Anders Carlsson.
+
+        Instead of keeping the preferred size in the controller, keep the main view’s 
+        size, and then scale the bounds of the popover’s view using that and the scale 
+        factor as a constant. Set the size of the popover explicitly so that it doesn’t 
+        get the view’s size. This will cause it to scale the WKWebView.
+        * UIProcess/mac/WKActionMenuController.mm:
+        (-[WKPagePreviewViewController initWithPageURL:]):
+        (-[WKPagePreviewViewController loadView]):
+        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
+        (-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]):
+
</ins><span class="cx"> 2014-11-05  Conrad Shultz  &lt;conrad_shultz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Page preview popovers sometimes cover their originating element
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKActionMenuControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (175644 => 175645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm        2014-11-05 23:20:28 UTC (rev 175644)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm        2014-11-05 23:31:38 UTC (rev 175645)
</span><span class="lines">@@ -60,6 +60,8 @@
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> using namespace WebKit;
</span><span class="cx"> 
</span><ins>+static const CGFloat popoverToViewScale = 0.75;
+
</ins><span class="cx"> @interface WKActionMenuController () &lt;NSSharingServiceDelegate, NSSharingServicePickerDelegate, NSPopoverDelegate&gt;
</span><span class="cx"> - (void)_updateActionMenuItemsForStage:(MenuUpdateStage)stage;
</span><span class="cx"> - (BOOL)_canAddImageToPhotos;
</span><span class="lines">@@ -74,7 +76,7 @@
</span><span class="cx"> #if WK_API_ENABLED
</span><span class="cx"> @interface WKPagePreviewViewController : NSViewController {
</span><span class="cx"> @public
</span><del>-    NSSize _preferredSize;
</del><ins>+    NSSize _mainViewSize;
</ins><span class="cx"> 
</span><span class="cx"> @private
</span><span class="cx">     RetainPtr&lt;NSURL&gt; _url;
</span><span class="lines">@@ -92,19 +94,22 @@
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><span class="cx">     _url = URL;
</span><del>-    _preferredSize = NSMakeSize(320, 568);
</del><ins>+    _mainViewSize = NSMakeSize(320, 568);
</ins><span class="cx"> 
</span><span class="cx">     return self;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)loadView
</span><span class="cx"> {
</span><del>-    RetainPtr&lt;WKWebView&gt; webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, _preferredSize.width, _preferredSize.height)]);
</del><ins>+    RetainPtr&lt;WKWebView&gt; webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, _mainViewSize.width, _mainViewSize.height)]);
</ins><span class="cx">     [webView _setIgnoresNonWheelMouseEvents:YES];
</span><span class="cx">     if (_url) {
</span><span class="cx">         NSURLRequest *request = [NSURLRequest requestWithURL:_url.get()];
</span><span class="cx">         [webView loadRequest:request];
</span><span class="cx">     }
</span><ins>+
+    // Setting the webView bounds will scale it to 75% of the _mainViewSize. 
+    [webView setBounds:NSMakeRect(0, 0, _mainViewSize.width / popoverToViewScale, _mainViewSize.height / popoverToViewScale)];
</ins><span class="cx">     self.view = webView.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -291,17 +296,17 @@
</span><span class="cx"> - (void)_createPreviewPopoverForURL:(NSURL *)url originRect:(NSRect)originRect
</span><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;WKPagePreviewViewController&gt; previewViewController = adoptNS([[WKPagePreviewViewController alloc] initWithPageURL:url]);
</span><del>-    previewViewController-&gt;_preferredSize = [self _preferredSizeForPopoverPresentedFromOriginRect:originRect];
</del><ins>+    previewViewController-&gt;_mainViewSize = _wkView.bounds.size;
</ins><span class="cx"> 
</span><span class="cx">     _previewPopover = adoptNS([[NSPopover alloc] init]);
</span><span class="cx">     [_previewPopover setBehavior:NSPopoverBehaviorTransient];
</span><ins>+    [_previewPopover setContentSize:[self _preferredSizeForPopoverPresentedFromOriginRect:originRect]];
</ins><span class="cx">     [_previewPopover setContentViewController:previewViewController.get()];
</span><span class="cx">     [_previewPopover setDelegate:self];
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (NSSize)_preferredSizeForPopoverPresentedFromOriginRect:(NSRect)originRect
</span><span class="cx"> {
</span><del>-    static const CGFloat preferredPopoverToWKViewScale = 0.75;
</del><span class="cx">     static const CGFloat screenPadding = 40;
</span><span class="cx"> 
</span><span class="cx">     NSWindow *window = _wkView.window;
</span><span class="lines">@@ -317,7 +322,7 @@
</span><span class="cx">     CGFloat maxAvailableHorizontalSpace = fmax(availableSpaceAtLeft, availableSpaceAtRight) - screenPadding;
</span><span class="cx"> 
</span><span class="cx">     NSRect wkViewBounds = _wkView.bounds;
</span><del>-    NSSize preferredSize = NSMakeSize(NSWidth(wkViewBounds) * preferredPopoverToWKViewScale, NSHeight(wkViewBounds) * preferredPopoverToWKViewScale);
</del><ins>+    NSSize preferredSize = NSMakeSize(NSWidth(wkViewBounds) * popoverToViewScale, NSHeight(wkViewBounds) * popoverToViewScale);
</ins><span class="cx">     preferredSize.width = fmin(preferredSize.width, maxAvailableHorizontalSpace);
</span><span class="cx">     preferredSize.height = fmin(preferredSize.height, maxAvailableVerticalSpace);
</span><span class="cx">     return preferredSize;
</span></span></pre>
</div>
</div>

</body>
</html>