|  | // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef PRINTING_PDF_TRANSFORM_H_ | 
|  | #define PRINTING_PDF_TRANSFORM_H_ | 
|  |  | 
|  | #include "printing/printing_export.h" | 
|  |  | 
|  | namespace gfx { | 
|  | class Rect; | 
|  | } | 
|  |  | 
|  | namespace printing { | 
|  |  | 
|  | // A rect struct for use with FPDF bounding box functions. | 
|  | // With PDFs, origin is bottom-left. | 
|  | struct PRINTING_EXPORT PdfRectangle { | 
|  | float left; | 
|  | float bottom; | 
|  | float right; | 
|  | float top; | 
|  | }; | 
|  |  | 
|  | // Calculate the scale factor between |content_rect| and a page of size | 
|  | // |src_width| x |src_height|. | 
|  | // | 
|  | // |content_rect| specifies the printable area of the destination page, with | 
|  | // origin at left-bottom. Values are in points. | 
|  | // |src_width| specifies the source page width in points. | 
|  | // |src_height| specifies the source page height in points. | 
|  | // |rotated| True if source page is rotated 90 degree or 270 degree. | 
|  | PRINTING_EXPORT double CalculateScaleFactor(const gfx::Rect& content_rect, | 
|  | double src_width, | 
|  | double src_height, | 
|  | bool rotated); | 
|  |  | 
|  | // Make the default size to be letter size (8.5" X 11"). We are just following | 
|  | // the PDFium way of handling these corner cases. PDFium always consider | 
|  | // US-Letter as the default page size. | 
|  | PRINTING_EXPORT void SetDefaultClipBox(bool rotated, PdfRectangle* clip_box); | 
|  |  | 
|  | // Set the media box and/or crop box as needed. If both boxes are there, then | 
|  | // nothing needs to be done. If one box is missing, then fill it with the value | 
|  | // from the other box. If both boxes are missing, then they both get the default | 
|  | // value from SetDefaultClipBox(), based on |rotated|. | 
|  | PRINTING_EXPORT void CalculateMediaBoxAndCropBox(bool rotated, | 
|  | bool has_media_box, | 
|  | bool has_crop_box, | 
|  | PdfRectangle* media_box, | 
|  | PdfRectangle* crop_box); | 
|  |  | 
|  | // Compute source clip box boundaries based on the crop box / media box of | 
|  | // source page and scale factor. | 
|  | // Returns the computed source clip box values. | 
|  | // | 
|  | // |media_box| The PDF's media box. | 
|  | // |crop_box| The PDF's crop box. | 
|  | PRINTING_EXPORT PdfRectangle CalculateClipBoxBoundary( | 
|  | const PdfRectangle& media_box, | 
|  | const PdfRectangle& crop_box); | 
|  |  | 
|  | // Scale |box| by |scale_factor|. | 
|  | PRINTING_EXPORT void ScalePdfRectangle(double scale_factor, PdfRectangle* rect); | 
|  |  | 
|  | // Calculate the clip box translation offset for a page that does need to be | 
|  | // scaled. All parameters are in points. | 
|  | // | 
|  | // |content_rect| specifies the printable area of the destination page, with | 
|  | // origin at left-bottom. | 
|  | // |source_clip_box| specifies the source clip box positions, relative to | 
|  | // origin at left-bottom. | 
|  | // |offset_x| and |offset_y| will contain the final translation offsets for the | 
|  | // source clip box, relative to origin at left-bottom. | 
|  | PRINTING_EXPORT void CalculateScaledClipBoxOffset( | 
|  | const gfx::Rect& content_rect, | 
|  | const PdfRectangle& source_clip_box, | 
|  | double* offset_x, | 
|  | double* offset_y); | 
|  |  | 
|  | // Calculate the clip box offset for a page that does not need to be scaled. | 
|  | // All parameters are in points. | 
|  | // | 
|  | // |content_rect| specifies the printable area of the destination page, with | 
|  | // origin at left-bottom. | 
|  | // |rotation| specifies the source page rotation values which are N / 90 | 
|  | // degrees. | 
|  | // |page_width| specifies the screen destination page width. | 
|  | // |page_height| specifies the screen destination page height. | 
|  | // |source_clip_box| specifies the source clip box positions, relative to origin | 
|  | // at left-bottom. | 
|  | // |offset_x| and |offset_y| will contain the final translation offsets for the | 
|  | // source clip box, relative to origin at left-bottom. | 
|  | PRINTING_EXPORT void CalculateNonScaledClipBoxOffset( | 
|  | const gfx::Rect& content_rect, | 
|  | int rotation, | 
|  | int page_width, | 
|  | int page_height, | 
|  | const PdfRectangle& source_clip_box, | 
|  | double* offset_x, | 
|  | double* offset_y); | 
|  |  | 
|  | }  // namespace printing | 
|  |  | 
|  | #endif  // PRINTING_PDF_TRANSFORM_H_ |