summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorhamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 07:04:05 +0000
committerhamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 07:04:05 +0000
commit40c7cfe39957248d38d8c376fbfc7d332c796741 (patch)
tree1e9cbc2bda99a4b4bc3286504dbca59a7542fb70 /printing
parent829c9bbc87035a0e6a5606ff7654b761a2d9d0bf (diff)
downloadchromium_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.cc3
-rw-r--r--printing/printed_document.cc9
-rw-r--r--printing/printed_document.h3
-rw-r--r--printing/printed_document_mac.cc16
-rw-r--r--printing/printed_page.cc6
-rw-r--r--printing/printed_page.h7
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);
};