Reviewed by Maciej.
authortomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Mar 2006 20:11:29 +0000 (20:11 +0000)
committertomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Mar 2006 20:11:29 +0000 (20:11 +0000)
        <rdar://problem/4476873> Support printing for plugin documents (not embedded plugins)

        * WebView/WebFrameViewPrivate.h:
        * WebView/WebFrameView.m:
        (-[WebFrameView documentViewShouldHandlePrint]):
        Called by the host application before it initializes and runs a print operation.  If NO
        is returned, the host application will abort its print operation and call
        -printDocumentView on the WebFrameView.  The document view is then expected to run its
        own print operation.  If YES is returned, the host application's print operation will
        continue as normal.
        (-[WebFrameView printDocumentView]):
        Called by the host application when the WebFrameView returns YES from -documentViewShouldHandlePrint.

        * Plugins/WebNetscapePluginDocumentView.m:
        (-[WebNetscapePluginDocumentView documentViewShouldHandlePrint]):
        Allow the plugin to take over printing if it defines an NPP_Print function
        (-[WebNetscapePluginDocumentView printDocumentView]):
        Print the plugin document.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13288 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/Plugins/WebNetscapePluginDocumentView.m
WebKit/WebView/WebFrameView.m
WebKit/WebView/WebFrameViewPrivate.h

index 08caf39dd4b860cdc029080487b09c8853700144..5a64cc443826ef7b6d491acda57f95b0559aac25 100644 (file)
@@ -1,3 +1,26 @@
+2006-03-13  Tim Omernick  <timo@apple.com>
+
+        Reviewed by Maciej.
+
+        <rdar://problem/4476873> Support printing for plugin documents (not embedded plugins)
+
+        * WebView/WebFrameViewPrivate.h:
+        * WebView/WebFrameView.m:
+        (-[WebFrameView documentViewShouldHandlePrint]):
+        Called by the host application before it initializes and runs a print operation.  If NO
+        is returned, the host application will abort its print operation and call
+        -printDocumentView on the WebFrameView.  The document view is then expected to run its
+        own print operation.  If YES is returned, the host application's print operation will
+        continue as normal.
+        (-[WebFrameView printDocumentView]):
+        Called by the host application when the WebFrameView returns YES from -documentViewShouldHandlePrint.
+
+        * Plugins/WebNetscapePluginDocumentView.m:
+        (-[WebNetscapePluginDocumentView documentViewShouldHandlePrint]):
+        Allow the plugin to take over printing if it defines an NPP_Print function
+        (-[WebNetscapePluginDocumentView printDocumentView]):
+        Print the plugin document.
+
 2006-03-13  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by timo.
index 9e48a3c9b2759b07cc0fcc8036f7846283f6ce98..487cde73a747e6f347753e7aab309cb1cc032145 100644 (file)
     [super viewDidMoveToHostWindow];
 }
 
+- (BOOL)documentViewShouldHandlePrint
+{
+    // Allow the plugin to take over printing if it defines an NPP_Print function
+    return (NPP_Print != NULL);
+}
+
+- (void)printDocumentView
+{
+    // The plugin cannot print if it does not have an NPP_Print function
+    if (!NPP_Print)
+        return;
+    
+    // Let the plugin take control of printing when in NP_FULL mode
+    NPPrint platformPrint;
+    platformPrint.mode = NP_FULL;
+    platformPrint.print.fullPrint.pluginPrinted = 0;
+    platformPrint.print.fullPrint.printOne = 0;
+    platformPrint.print.fullPrint.platformPrint = NULL;
+    NPP_Print(instance, &platformPrint);
+}
+
 @end
index d647fc641d5cdabf8b7b9ac427dc7f68d1afead6..3ed690a4d57e550224a31d69a59b9be4104d0d86 100644 (file)
@@ -874,6 +874,22 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class class,
     return [NSPrintOperation printOperationWithView:documentView printInfo:printInfo];
 }
 
+- (BOOL)documentViewShouldHandlePrint
+{
+    NSView *documentView = [[self _scrollView] documentView];
+    if (documentView && [documentView respondsToSelector:@selector(documentViewShouldHandlePrint)])
+        return [(id)documentView documentViewShouldHandlePrint];
+    
+    return NO;
+}
+
+- (void)printDocumentView
+{
+    NSView *documentView = [[self _scrollView] documentView];
+    if (documentView && [documentView respondsToSelector:@selector(printDocumentView)])
+        return [(id)documentView printDocumentView];
+}
+
 - (float)_area
 {
     NSRect frame = [self frame];
index 6c31634545c4159d78ffcbd789528d0c035948d8..40679fdb7c01dc9bb75bc33eff9bfac1e282369c 100644 (file)
 */
 - (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo;
 
+/*!
+    @method documentViewShouldHandlePrint
+    @abstract Called by the host application before it initializes and runs a print operation.
+    @result If NO is returned, the host application will abort its print operation and call -printDocumentView on the
+    WebFrameView.  The document view is then expected to run its own print operation.  If YES is returned, the host 
+    application's print operation will continue as normal.
+*/
+- (BOOL)documentViewShouldHandlePrint;
+
+/*!
+    @method printDocumentView
+    @abstract Called by the host application when the WebFrameView returns YES from -documentViewShouldHandlePrint.
+*/
+- (void)printDocumentView;
+
 /*!
     @method _largestChildWithScrollBars
     @abstract Of the child WebFrameViews that are displaying scroll bars, determines which has the largest area.