diff options
author | hamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 07:04:05 +0000 |
---|---|---|
committer | hamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 07:04:05 +0000 |
commit | 40c7cfe39957248d38d8c376fbfc7d332c796741 (patch) | |
tree | 1e9cbc2bda99a4b4bc3286504dbca59a7542fb70 /printing | |
parent | 829c9bbc87035a0e6a5606ff7654b761a2d9d0bf (diff) | |
download | chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.zip chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.tar.gz chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.tar.bz2 |
Implement limited paged media support for mac.
BUG=47277
TEST=none
Review URL: http://codereview.chromium.org/2876020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51347 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing')
-rw-r--r-- | printing/page_overlays_unittest.cc | 3 | ||||
-rw-r--r-- | printing/printed_document.cc | 9 | ||||
-rw-r--r-- | printing/printed_document.h | 3 | ||||
-rw-r--r-- | printing/printed_document_mac.cc | 16 | ||||
-rw-r--r-- | printing/printed_page.cc | 6 | ||||
-rw-r--r-- | printing/printed_page.h | 7 |
6 files changed, 33 insertions, 11 deletions
diff --git a/printing/page_overlays_unittest.cc b/printing/page_overlays_unittest.cc index bad78de..8a19dcd 100644 --- a/printing/page_overlays_unittest.cc +++ b/printing/page_overlays_unittest.cc @@ -57,8 +57,9 @@ TEST_F(PageOverlaysTest, StringConversion) { new printing::PrintedDocument(settings, &source, cookie)); doc->set_page_count(2); gfx::Size page_size(100, 100); + gfx::Rect page_content_area(5, 5, 90, 90); scoped_refptr<printing::PrintedPage> page( - new printing::PrintedPage(1, NULL, page_size)); + new printing::PrintedPage(1, NULL, page_size, page_content_area)); std::wstring input; std::wstring out; diff --git a/printing/printed_document.cc b/printing/printed_document.cc index f49e1e6..333f1d87 100644 --- a/printing/printed_document.cc +++ b/printing/printed_document.cc @@ -70,13 +70,16 @@ PrintedDocument::~PrintedDocument() { void PrintedDocument::SetPage(int page_number, NativeMetafile* metafile, - double shrink) { + double shrink, + const gfx::Size& paper_size, + const gfx::Rect& page_rect) { // Notice the page_number + 1, the reason is that this is the value that will // be shown. Users dislike 0-based counting. scoped_refptr<PrintedPage> page( new PrintedPage(page_number + 1, - metafile, - immutable_.settings_.page_setup_device_units().physical_size())); + metafile, + paper_size, + page_rect)); { AutoLock lock(lock_); mutable_.pages_[page_number] = page; diff --git a/printing/printed_document.h b/printing/printed_document.h index dbf4c3d..049add0 100644 --- a/printing/printed_document.h +++ b/printing/printed_document.h @@ -42,7 +42,8 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> { // Sets a page's data. 0-based. Takes metafile ownership. // Note: locks for a short amount of time. - void SetPage(int page_number, NativeMetafile* metafile, double shrink); + void SetPage(int page_number, NativeMetafile* metafile, double shrink, + const gfx::Size& paper_size, const gfx::Rect& page_rect); // Retrieves a page. If the page is not available right now, it // requests to have this page be rendered and returns false. diff --git a/printing/printed_document_mac.cc b/printing/printed_document_mac.cc index a3ea8c4..3f5d75d 100644 --- a/printing/printed_document_mac.cc +++ b/printing/printed_document_mac.cc @@ -26,13 +26,23 @@ void PrintedDocument::RenderPrintedPage( const printing::PageSetup& page_setup( immutable_.settings_.page_setup_device_units()); - CGRect target_rect = page_setup.content_area().ToCGRect(); + gfx::Rect target_rect = page.page_content_rect(); + const gfx::Rect& physical_size = page_setup.physical_size(); + // http://dev.w3.org/csswg/css3-page/#positioning-page-box + if (physical_size.width() > page.page_size().width()) { + int diff = physical_size.width() - page.page_size().width(); + target_rect.set_x(target_rect.x() + diff / 2); + } + if (physical_size.height() > page.page_size().height()) { + int diff = physical_size.height() - page.page_size().height(); + target_rect.set_y(target_rect.y() + diff / 2); + } const printing::NativeMetafile* metafile = page.native_metafile(); // Each NativeMetafile is a one-page PDF, and pages use 1-based indexing. const int page_number = 1; - metafile->RenderPage(page_number, context, target_rect, true, false, false, - false); + metafile->RenderPage(page_number, context, target_rect.ToCGRect(), + true, false, false, false); // TODO(stuartmorgan): Print the header and footer. } diff --git a/printing/printed_page.cc b/printing/printed_page.cc index 441690a..242adb2 100644 --- a/printing/printed_page.cc +++ b/printing/printed_page.cc @@ -8,10 +8,12 @@ namespace printing { PrintedPage::PrintedPage(int page_number, NativeMetafile* native_metafile, - const gfx::Size& page_size) + const gfx::Size& page_size, + const gfx::Rect& page_content_rect) : page_number_(page_number), native_metafile_(native_metafile), - page_size_(page_size) { + page_size_(page_size), + page_content_rect_(page_content_rect) { } PrintedPage::~PrintedPage() { diff --git a/printing/printed_page.h b/printing/printed_page.h index f7d2f7d..83425ba 100644 --- a/printing/printed_page.h +++ b/printing/printed_page.h @@ -23,12 +23,14 @@ class PrintedPage : public base::RefCountedThreadSafe<PrintedPage> { public: PrintedPage(int page_number, NativeMetafile* native_metafile, - const gfx::Size& page_size); + const gfx::Size& page_size, + const gfx::Rect& page_content_rect); // Getters int page_number() const { return page_number_; } const NativeMetafile* native_metafile() const; const gfx::Size& page_size() const { return page_size_; } + const gfx::Rect& page_content_rect() const { return page_content_rect_; } private: friend class base::RefCountedThreadSafe<PrintedPage>; @@ -45,6 +47,9 @@ class PrintedPage : public base::RefCountedThreadSafe<PrintedPage> { // job. const gfx::Size page_size_; + // The printable area of the page. + const gfx::Rect page_content_rect_; + DISALLOW_COPY_AND_ASSIGN(PrintedPage); }; |