• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef PRINTING_PRINTED_PAGE_H_
6 #define PRINTING_PRINTED_PAGE_H_
7 
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "printing/metafile.h"
11 #include "ui/gfx/rect.h"
12 #include "ui/gfx/size.h"
13 
14 namespace printing {
15 
16 // Contains the data to reproduce a printed page, either on screen or on
17 // paper. Once created, this object is immutable. It has no reference to the
18 // PrintedDocument containing this page.
19 // Note: May be accessed from many threads at the same time. This is an non
20 // issue since this object is immutable. The reason is that a page may be
21 // printed and be displayed at the same time.
22 class PRINTING_EXPORT PrintedPage
23     : public base::RefCountedThreadSafe<PrintedPage> {
24  public:
25   PrintedPage(int page_number,
26               Metafile* metafile,
27               const gfx::Size& page_size,
28               const gfx::Rect& page_content_rect,
29               double shrink_factor);
30 
31   // Getters
page_number()32   int page_number() const { return page_number_; }
33   const Metafile* metafile() const;
page_size()34   const gfx::Size& page_size() const { return page_size_; }
page_content_rect()35   const gfx::Rect& page_content_rect() const { return page_content_rect_; }
shrink_factor()36   double shrink_factor() const { return shrink_factor_; }
37 
38   // Get page content rect adjusted based on
39   // http://dev.w3.org/csswg/css3-page/#positioning-page-box
40   void GetCenteredPageContentRect(const gfx::Size& paper_size,
41                                   gfx::Rect* content_rect) const;
42 
43  private:
44   friend class base::RefCountedThreadSafe<PrintedPage>;
45 
46   ~PrintedPage();
47 
48   // Page number inside the printed document.
49   const int page_number_;
50 
51   // Actual paint data.
52   const scoped_ptr<Metafile> metafile_;
53 
54   // The physical page size. To support multiple page formats inside on print
55   // job.
56   const gfx::Size page_size_;
57 
58   // The printable area of the page.
59   const gfx::Rect page_content_rect_;
60 
61   // Shrink done in comparison to desired_dpi.
62   double shrink_factor_;
63 
64   DISALLOW_COPY_AND_ASSIGN(PrintedPage);
65 };
66 
67 }  // namespace printing
68 
69 #endif  // PRINTING_PRINTED_PAGE_H_
70