15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
20019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "printing/printed_document.h"
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#import <ApplicationServices/ApplicationServices.h>
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#import <CoreFoundation/CoreFoundation.h>
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/logging.h"
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "printing/page_number.h"
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "printing/printed_page.h"
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace printing {
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void PrintedDocument::RenderPrintedPage(
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const PrintedPage& page, gfx::NativeDrawingContext context) const {
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  {
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Make sure the page is from our list.
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    base::AutoLock lock(lock_);
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DCHECK(&page == mutable_.pages_.find(page.page_number() - 1)->second.get());
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  }
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  DCHECK(context);
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  const PageSetup& page_setup(immutable_.settings_.page_setup_device_units());
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  gfx::Rect content_area;
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  page.GetCenteredPageContentRect(page_setup.physical_size(), &content_area);
317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  const MetafilePlayer* metafile = page.metafile();
337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  // Each Metafile is a one-page PDF, and pages use 1-based indexing.
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  const int page_number = 1;
3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  struct Metafile::MacRenderPageParams params;
367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  params.autorotate = true;
377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  metafile->RenderPage(page_number, context, content_area.ToCGRect(), params);
3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)}  // namespace printing
417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch