mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 05:10:49 +00:00

Actually, there's not so much we can improve right now, in the sense that: * We need the ::-moz-page-content pseudo-element to be able to set `display` on the page, since that's a style rule rather than a @page rule. We could get away without it. * Keeping the current code-path (slightly cleaned up) is less code, for now at least. We can have a separate code-path or what not that actually performs the @page rule selector-matching and what not if needed when we get to named pages or other page selectors. Selectors like :first should be pretty trivial to implement, actually. We make some paged mode anon boxes non-inheriting anon boxes. This allows us to share the styles and is generally nicer. They don't need to inherit from anywhere. We could remove the origin handling and don't look at UA rules or what not, but it seems pretty harmless to do that. We also fix the name of the pseudo-elements to match the capitalization. Differential Revision: https://phabricator.services.mozilla.com/D104772
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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 https://mozilla.org/MPL/2.0/. */
|
|
|
|
/* Rendering object for a printed or print-previewed sheet of paper */
|
|
|
|
#ifndef LAYOUT_GENERIC_PRINTEDSHEETFRAME_H_
|
|
#define LAYOUT_GENERIC_PRINTEDSHEETFRAME_H_
|
|
|
|
#include "nsContainerFrame.h"
|
|
#include "nsHTMLParts.h"
|
|
|
|
class nsSharedPageData;
|
|
|
|
namespace mozilla {
|
|
|
|
class PrintedSheetFrame final : public nsContainerFrame {
|
|
public:
|
|
NS_DECL_QUERYFRAME
|
|
NS_DECL_FRAMEARENA_HELPERS(PrintedSheetFrame)
|
|
|
|
friend PrintedSheetFrame* ::NS_NewPrintedSheetFrame(
|
|
mozilla::PresShell* aPresShell, ComputedStyle* aStyle);
|
|
|
|
void SetSharedPageData(nsSharedPageData* aPD) { mPD = aPD; }
|
|
|
|
// nsIFrame overrides
|
|
void Reflow(nsPresContext* aPresContext, ReflowOutput& aReflowOutput,
|
|
const ReflowInput& aReflowInput,
|
|
nsReflowStatus& aStatus) override;
|
|
|
|
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|
const nsDisplayListSet& aLists) override;
|
|
|
|
#ifdef DEBUG_FRAME_DUMP
|
|
nsresult GetFrameName(nsAString& aResult) const override;
|
|
#endif
|
|
|
|
uint32_t GetNumPages() const { return mNumPages; }
|
|
|
|
private:
|
|
// Private construtor & destructor, to avoid accidental (non-FrameArena)
|
|
// instantiation/deletion:
|
|
PrintedSheetFrame(ComputedStyle* aStyle, nsPresContext* aPresContext)
|
|
: nsContainerFrame(aStyle, aPresContext, kClassID) {}
|
|
~PrintedSheetFrame() = default;
|
|
|
|
// Helper function to populate some pages-per-sheet metrics in our
|
|
// nsSharedPageData.
|
|
void ComputePagesPerSheetOriginAndScale();
|
|
|
|
// Note: this will be set before reflow, and it's strongly owned by our
|
|
// nsPageSequenceFrame, which outlives us.
|
|
nsSharedPageData* mPD = nullptr;
|
|
// The number of visible pages in this sheet.
|
|
uint32_t mNumPages = 0;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif /* LAYOUT_GENERIC_PRINTEDSHEETFRAME_H_ */
|