Title: [108092] trunk/Source/WebKit2
Revision
108092
Author
[email protected]
Date
2012-02-17 10:19:18 -0800 (Fri, 17 Feb 2012)

Log Message

[GTK] Allow printing scaled pages in WebKit2 for printers that don't support it
https://bugs.webkit.org/show_bug.cgi?id=78823

Reviewed by Gustavo Noronha Silva.

* UIProcess/API/gtk/WebKitPrintOperation.cpp:
(webkitPrintOperationRunDialogUnix): Enable scale option in print
dialog.
* WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
(WebKit::WebPrintOperationGtk::WebPrintOperationGtk): Initialize
manual scale to 1.
(WebKit::WebPrintOperationGtk::rotatePageIfNeeded): Renamed and
moved the needs rotate check here as an early return.
(WebKit::WebPrintOperationGtk::prepareContextToDraw): Scale the
page according to the manual scale factor.
(WebKit::WebPrintOperationGtk::renderPage): Move rotatePage to
prepareContextToDraw.
* WebProcess/WebPage/gtk/WebPrintOperationGtk.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (108091 => 108092)


--- trunk/Source/WebKit2/ChangeLog	2012-02-17 18:17:34 UTC (rev 108091)
+++ trunk/Source/WebKit2/ChangeLog	2012-02-17 18:19:18 UTC (rev 108092)
@@ -1,5 +1,26 @@
 2012-02-17  Carlos Garcia Campos  <[email protected]>
 
+        [GTK] Allow printing scaled pages in WebKit2 for printers that don't support it
+        https://bugs.webkit.org/show_bug.cgi?id=78823
+
+        Reviewed by Gustavo Noronha Silva.
+
+        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
+        (webkitPrintOperationRunDialogUnix): Enable scale option in print
+        dialog.
+        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
+        (WebKit::WebPrintOperationGtk::WebPrintOperationGtk): Initialize
+        manual scale to 1.
+        (WebKit::WebPrintOperationGtk::rotatePageIfNeeded): Renamed and
+        moved the needs rotate check here as an early return.
+        (WebKit::WebPrintOperationGtk::prepareContextToDraw): Scale the
+        page according to the manual scale factor.
+        (WebKit::WebPrintOperationGtk::renderPage): Move rotatePage to
+        prepareContextToDraw.
+        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
+
+2012-02-17  Carlos Garcia Campos  <[email protected]>
+
         [GTK] Allow printing multiple copies in WebKit2 for printers that don't support it
         https://bugs.webkit.org/show_bug.cgi?id=78805
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp (108091 => 108092)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp	2012-02-17 18:17:34 UTC (rev 108091)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp	2012-02-17 18:19:18 UTC (rev 108092)
@@ -205,7 +205,8 @@
                                                                                                  | GTK_PRINT_CAPABILITY_PAGE_SET
                                                                                                  | GTK_PRINT_CAPABILITY_REVERSE
                                                                                                  | GTK_PRINT_CAPABILITY_COPIES
-                                                                                                 | GTK_PRINT_CAPABILITY_COLLATE));
+                                                                                                 | GTK_PRINT_CAPABILITY_COLLATE
+                                                                                                 | GTK_PRINT_CAPABILITY_SCALE));
 
     WebKitPrintOperationPrivate* priv = printOperation->priv;
     if (priv->printSettings)

Modified: trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp (108091 => 108092)


--- trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp	2012-02-17 18:17:34 UTC (rev 108091)
+++ trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp	2012-02-17 18:19:18 UTC (rev 108092)
@@ -95,6 +95,7 @@
         printOperation->m_reverse = gtk_print_job_get_reverse(printOperation->m_printJob.get());
         printOperation->m_copies = gtk_print_job_get_num_copies(printOperation->m_printJob.get());
         printOperation->m_collateCopies = gtk_print_job_get_collate(printOperation->m_printJob.get());
+        printOperation->m_scale = gtk_print_job_get_scale(printOperation->m_printJob.get());
 
         printOperation->print(surface, 72, 72);
     }
@@ -393,6 +394,7 @@
     , m_reverse(false)
     , m_copies(1)
     , m_collateCopies(false)
+    , m_scale(1)
 {
 }
 
@@ -417,8 +419,11 @@
     return (m_numberUp < 2 || !((m_pagePosition + 1) % m_numberUp) || m_pagePosition == m_numberOfPagesToPrint - 1);
 }
 
-void WebPrintOperationGtk::rotatePage()
+void WebPrintOperationGtk::rotatePageIfNeeded()
 {
+    if (!m_needsRotation)
+        return;
+
     GtkPaperSize* paperSize = gtk_page_setup_get_paper_size(m_pageSetup.get());
     double width = gtk_paper_size_get_width(paperSize, GTK_UNIT_INCH) * m_xDPI;
     double height = gtk_paper_size_get_height(paperSize, GTK_UNIT_INCH) * m_yDPI;
@@ -519,11 +524,16 @@
     if (m_numberUp < 2) {
         double left = gtk_page_setup_get_left_margin(m_pageSetup.get(), GTK_UNIT_INCH);
         double top = gtk_page_setup_get_top_margin(m_pageSetup.get(), GTK_UNIT_INCH);
+        if (m_scale != 1.0)
+            cairo_scale(m_cairoContext.get(), m_scale, m_scale);
+        rotatePageIfNeeded();
         cairo_translate(m_cairoContext.get(), left * m_xDPI, top * m_yDPI);
 
         return;
     }
 
+    rotatePageIfNeeded();
+
     // Multiple pages per sheet.
     double marginLeft = gtk_page_setup_get_left_margin(m_pageSetup.get(), GTK_UNIT_POINTS);
     double marginRight = gtk_page_setup_get_right_margin(m_pageSetup.get(), GTK_UNIT_POINTS);
@@ -585,6 +595,8 @@
 
         cairo_scale(m_cairoContext.get(), scale, scale);
         cairo_translate(m_cairoContext.get(), x * stepX + offsetX, y * stepY + offsetY);
+        if (m_scale != 1.0)
+            cairo_scale(m_cairoContext.get(), m_scale, m_scale);
         break;
     }
     case 2:
@@ -601,6 +613,8 @@
 
         cairo_scale(m_cairoContext.get(), scale, scale);
         cairo_translate(m_cairoContext.get(), y * paperHeight + offsetY, (columns - x) * paperWidth + offsetX);
+        if (m_scale != 1.0)
+            cairo_scale(m_cairoContext.get(), m_scale, m_scale);
         cairo_rotate(m_cairoContext.get(), -G_PI / 2);
         break;
     }
@@ -614,14 +628,12 @@
     startPage(m_cairoContext.get());
     cairo_save(m_cairoContext.get());
 
-    if (m_needsRotation)
-        rotatePage();
     prepareContextToDraw();
 
     double pageWidth = gtk_page_setup_get_page_width(m_pageSetup.get(), GTK_UNIT_INCH) * m_xDPI;
     WebCore::PlatformContextCairo platformContext(m_cairoContext.get());
     WebCore::GraphicsContext graphicsContext(&platformContext);
-    m_printContext->spoolPage(graphicsContext, pageNumber, pageWidth);
+    m_printContext->spoolPage(graphicsContext, pageNumber, pageWidth / m_scale);
 
     cairo_restore(m_cairoContext.get());
     endPage(m_cairoContext.get());

Modified: trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h (108091 => 108092)


--- trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h	2012-02-17 18:17:34 UTC (rev 108091)
+++ trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h	2012-02-17 18:19:18 UTC (rev 108092)
@@ -67,6 +67,7 @@
     bool reverse() const { return m_reverse; }
     unsigned int copies() const { return m_copies; }
     bool collateCopies() const { return m_collateCopies; }
+    double scale() const { return m_scale; }
 
     virtual void startPrint(WebCore::PrintContext*, uint64_t callbackID) = 0;
 
@@ -82,7 +83,7 @@
 
     void print(cairo_surface_t*, double xDPI, double yDPI);
     void renderPage(int pageNumber);
-    void rotatePage();
+    void rotatePageIfNeeded();
     void getRowsAndColumnsOfPagesPerSheet(size_t& rows, size_t& columns);
     void getPositionOfPageInSheet(size_t rows, size_t columns, int& x, int&y);
     void prepareContextToDraw();
@@ -112,6 +113,7 @@
     bool m_reverse;
     unsigned int m_copies;
     bool m_collateCopies;
+    double m_scale;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to