gecko-dev/layout/printing/nsPrintData.h
Daniel Holbert 06a402acb0 Bug 1661868 part 2: Unify page-range handling logic, to assume all PrintedSheetFrames should be printed (and let them manage page-range-based skipping during layout). r=TYLin
This patch does the following things:

(1) It removes the legacy page-range-handling function
"DetermineWhetherToPrintPage()", and it now will always print every
PrintedSheetFrame.

(2) It activates PrintedSheetFrame's page-range handling function so that it
can take over responsibility for skipping pages during print operations.

(3) It adjusts the nsPrintJob code that kicks off individual asynchronous
"print the next page" operations (which is now really "print the next
PrintedSheetFrame).  This nsPrintJob code used to have page-range-related
handling interwoven into it, and that handling isn't necessary anymore now that
we're handling page-skipping up front at layout time.

(4) It replaces the mPageNum member-var (which tracks which page we're about to
print or are currently printing) with mCurrentSheetIdx, which is now a 0-based
index into the list of PrintedSheetFrame instances.

(5) It removes nsPrintData:mNumPagesPrinted, which was only used for
progress-bar-completion updates & which basically tracked the same information
that I'm tracking in the new mCurrentSheetIdx variable.

There's some additional cleanup that we should do after this lands (e.g. some
s/page/sheet/ renamings) but I'm holding off on that for now, to keep this
patch relatively targeted.

Differential Revision: https://phabricator.services.mozilla.com/D92660
2020-10-07 20:51:56 +00:00

83 lines
2.6 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 http://mozilla.org/MPL/2.0/. */
#ifndef nsPrintData_h___
#define nsPrintData_h___
#include "mozilla/Attributes.h"
#include "mozilla/UniquePtr.h"
// Interfaces
#include "nsDeviceContext.h"
#include "nsIPrintSettings.h"
#include "nsISupportsImpl.h"
#include "nsTArray.h"
#include "nsCOMArray.h"
class nsPrintObject;
class nsIPrintProgressParams;
class nsIWebProgressListener;
//------------------------------------------------------------------------
// nsPrintData Class
//
// mPreparingForPrint - indicates that we have started Printing but
// have not gone to the timer to start printing the pages. It gets turned
// off right before we go to the timer.
//------------------------------------------------------------------------
class nsPrintData {
public:
typedef enum { eIsPrinting, eIsPrintPreview } ePrintDataType;
explicit nsPrintData(ePrintDataType aType);
NS_INLINE_DECL_REFCOUNTING(nsPrintData)
// Listener Helper Methods
void OnEndPrinting();
void OnStartPrinting();
void DoOnProgressChange(int32_t aProgress, int32_t aMaxProgress,
bool aDoStartStop, int32_t aFlag);
void DoOnStatusChange(nsresult aStatus);
ePrintDataType mType; // the type of data this is (Printing or Print Preview)
RefPtr<nsDeviceContext> mPrintDC;
mozilla::UniquePtr<nsPrintObject> mPrintObject;
nsCOMArray<nsIWebProgressListener> mPrintProgressListeners;
nsCOMPtr<nsIPrintProgressParams> mPrintProgressParams;
// If there is a focused iframe, mSelectionRoot is set to its nsPrintObject.
// Otherwise, if there is a selection, it is set to the root nsPrintObject.
// Otherwise, it is unset.
nsPrintObject* mSelectionRoot = nullptr;
// Array of non-owning pointers to all the nsPrintObjects owned by this
// nsPrintData. This includes this->mPrintObject, as well as all of its
// mKids (and their mKids, etc.)
nsTArray<nsPrintObject*> mPrintDocList;
bool mIsParentAFrameSet;
bool mOnStartSent;
bool mIsAborted; // tells us the document is being aborted
bool mPreparingForPrint; // see comments above
bool mShrinkToFit;
int32_t mNumPrintablePages;
float mShrinkRatio;
nsCOMPtr<nsIPrintSettings> mPrintSettings;
private:
nsPrintData() = delete;
nsPrintData& operator=(const nsPrintData& aOther) = delete;
~nsPrintData(); // non-virtual
};
#endif /* nsPrintData_h___ */