fune/gfx/thebes/PrintTargetPDF.h
Jonathan Watt b0c778ba81 Bug 1833244 p2. Implement sheet orientation switching/rotation for page-orientation. r=AlaskanEmily,dholbert
Where supported (print preview and print-to-PDF), this implements changing the
orientation and/or rotation of print sheets, as appropriate, in response to CSS
`page-orientation`. When supported we:

- in the single page-per-sheet case, rotate the sheet in order to implement
  any `page-orientation` rotation on the sheet. Rotating the sheet is necessary
  so that when we output PDF files the pages visually have the correct
  orientation.

- in the multiple pages-per-sheet case, we already rotate individual pages in
  their grid cell. This commit keeps such pages rotated, as appropriate, but
  augments that behavior by switching the orientation of the sheet (based on
  the first page on the sheet), if necessary, to make best use of the space on
  the sheet. (We can't know what orientation any subsequent pages on the sheet
  will have, so we assume the same orientation as the first one.)

Depends on D179423

Differential Revision: https://phabricator.services.mozilla.com/D179448
2023-08-22 10:57:55 +00:00

39 lines
1.1 KiB
C++

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef MOZILLA_GFX_PRINTTARGETPDF_H
#define MOZILLA_GFX_PRINTTARGETPDF_H
#include "nsCOMPtr.h"
#include "nsIOutputStream.h"
#include "PrintTarget.h"
namespace mozilla {
namespace gfx {
/**
* PDF printing target.
*/
class PrintTargetPDF final : public PrintTarget {
public:
static already_AddRefed<PrintTargetPDF> CreateOrNull(
nsIOutputStream* aStream, const IntSize& aSizeInPoints);
nsresult BeginPage(const IntSize& aSizeInPoints) override;
nsresult EndPage() override;
void Finish() override;
private:
PrintTargetPDF(cairo_surface_t* aCairoSurface, const IntSize& aSize,
nsIOutputStream* aStream);
virtual ~PrintTargetPDF();
nsCOMPtr<nsIOutputStream> mStream;
};
} // namespace gfx
} // namespace mozilla
#endif /* MOZILLA_GFX_PRINTTARGETPDF_H */