diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /layout/printing/nsPrintEngine.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'layout/printing/nsPrintEngine.h')
-rw-r--r-- | layout/printing/nsPrintEngine.h | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/layout/printing/nsPrintEngine.h b/layout/printing/nsPrintEngine.h new file mode 100644 index 000000000..643d9ee4e --- /dev/null +++ b/layout/printing/nsPrintEngine.h @@ -0,0 +1,305 @@ +/* -*- Mode: C++; tab-width: 2; 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 nsPrintEngine_h___ +#define nsPrintEngine_h___ + +#include "mozilla/Attributes.h" +#include "mozilla/UniquePtr.h" + +#include "nsCOMPtr.h" + +#include "nsPrintObject.h" +#include "nsPrintData.h" +#include "nsFrameList.h" +#include "nsIFrame.h" +#include "nsIWebProgress.h" +#include "mozilla/dom/HTMLCanvasElement.h" +#include "nsIWebProgressListener.h" +#include "nsWeakReference.h" + +// Interfaces +#include "nsIObserver.h" + +// Classes +class nsPagePrintTimer; +class nsIDocShell; +class nsIDocument; +class nsIDocumentViewerPrint; +class nsPrintObject; +class nsIDocShell; +class nsIPageSequenceFrame; + +//------------------------------------------------------------------------ +// nsPrintEngine Class +// +//------------------------------------------------------------------------ +class nsPrintEngine final : public nsIObserver, + public nsIWebProgressListener, + public nsSupportsWeakReference +{ +public: + // nsISupports interface... + NS_DECL_ISUPPORTS + + // nsIObserver + NS_DECL_NSIOBSERVER + + NS_DECL_NSIWEBPROGRESSLISTENER + + // Old nsIWebBrowserPrint methods; not cleaned up yet + NS_IMETHOD Print(nsIPrintSettings* aPrintSettings, + nsIWebProgressListener* aWebProgressListener); + NS_IMETHOD PrintPreview(nsIPrintSettings* aPrintSettings, + mozIDOMWindowProxy* aChildDOMWin, + nsIWebProgressListener* aWebProgressListener); + NS_IMETHOD GetIsFramesetDocument(bool *aIsFramesetDocument); + NS_IMETHOD GetIsIFrameSelected(bool *aIsIFrameSelected); + NS_IMETHOD GetIsRangeSelection(bool *aIsRangeSelection); + NS_IMETHOD GetIsFramesetFrameSelected(bool *aIsFramesetFrameSelected); + NS_IMETHOD GetPrintPreviewNumPages(int32_t *aPrintPreviewNumPages); + NS_IMETHOD EnumerateDocumentNames(uint32_t* aCount, char16_t*** aResult); + static nsresult GetGlobalPrintSettings(nsIPrintSettings** aPrintSettings); + NS_IMETHOD GetDoingPrint(bool *aDoingPrint); + NS_IMETHOD GetDoingPrintPreview(bool *aDoingPrintPreview); + NS_IMETHOD GetCurrentPrintSettings(nsIPrintSettings **aCurrentPrintSettings); + + + // This enum tells indicates what the default should be for the title + // if the title from the document is null + enum eDocTitleDefault { + eDocTitleDefBlank, + eDocTitleDefURLDoc + }; + + nsPrintEngine(); + + void Destroy(); + void DestroyPrintingData(); + + nsresult Initialize(nsIDocumentViewerPrint* aDocViewerPrint, + nsIDocShell* aContainer, + nsIDocument* aDocument, + float aScreenDPI, + FILE* aDebugFile); + + nsresult GetSeqFrameAndCountPages(nsIFrame*& aSeqFrame, int32_t& aCount); + + // + // The following three methods are used for printing... + // + nsresult DocumentReadyForPrinting(); + nsresult GetSelectionDocument(nsIDeviceContextSpec * aDevSpec, + nsIDocument ** aNewDoc); + + nsresult SetupToPrintContent(); + nsresult EnablePOsForPrinting(); + nsPrintObject* FindSmallestSTF(); + + bool PrintDocContent(nsPrintObject* aPO, nsresult& aStatus); + nsresult DoPrint(nsPrintObject * aPO); + + void SetPrintPO(nsPrintObject* aPO, bool aPrint); + + void TurnScriptingOn(bool aDoTurnOn); + bool CheckDocumentForPPCaching(); + void InstallPrintPreviewListener(); + + // nsIDocumentViewerPrint Printing Methods + bool HasPrintCallbackCanvas(); + bool PrePrintPage(); + bool PrintPage(nsPrintObject* aPOect, bool& aInRange); + bool DonePrintingPages(nsPrintObject* aPO, nsresult aResult); + + //--------------------------------------------------------------------- + void BuildDocTree(nsIDocShell * aParentNode, + nsTArray<nsPrintObject*> * aDocList, + nsPrintObject * aPO); + nsresult ReflowDocList(nsPrintObject * aPO, bool aSetPixelScale); + + nsresult ReflowPrintObject(nsPrintObject * aPO); + + void CheckForChildFrameSets(nsPrintObject* aPO); + + void CalcNumPrintablePages(int32_t& aNumPages); + void ShowPrintProgress(bool aIsForPrinting, bool& aDoNotify); + nsresult CleanupOnFailure(nsresult aResult, bool aIsPrinting); + // If FinishPrintPreview() fails, caller may need to reset the state of the + // object, for example by calling CleanupOnFailure(). + nsresult FinishPrintPreview(); + static void CloseProgressDialog(nsIWebProgressListener* aWebProgressListener); + void SetDocAndURLIntoProgress(nsPrintObject* aPO, + nsIPrintProgressParams* aParams); + void EllipseLongString(nsAString& aStr, const uint32_t aLen, bool aDoFront); + nsresult CheckForPrinters(nsIPrintSettings* aPrintSettings); + void CleanupDocTitleArray(char16_t**& aArray, int32_t& aCount); + + bool IsThereARangeSelection(nsPIDOMWindowOuter* aDOMWin); + + void FirePrintingErrorEvent(nsresult aPrintError); + //--------------------------------------------------------------------- + + + // Timer Methods + nsresult StartPagePrintTimer(nsPrintObject* aPO); + + bool IsWindowsInOurSubTree(nsPIDOMWindowOuter* aDOMWindow); + static bool IsParentAFrameSet(nsIDocShell * aParent); + bool IsThereAnIFrameSelected(nsIDocShell* aDocShell, + nsPIDOMWindowOuter* aDOMWin, + bool& aIsParentFrameSet); + + static nsPrintObject* FindPrintObjectByDOMWin(nsPrintObject* aParentObject, + nsPIDOMWindowOuter* aDOMWin); + + // get the currently infocus frame for the document viewer + already_AddRefed<nsPIDOMWindowOuter> FindFocusedDOMWindow(); + + //--------------------------------------------------------------------- + // Static Methods + //--------------------------------------------------------------------- + static void GetDocumentTitleAndURL(nsIDocument* aDoc, + nsAString& aTitle, + nsAString& aURLStr); + void GetDisplayTitleAndURL(nsPrintObject* aPO, + nsAString& aTitle, + nsAString& aURLStr, + eDocTitleDefault aDefType); + + static bool HasFramesetChild(nsIContent* aContent); + + bool CheckBeforeDestroy(); + nsresult Cancelled(); + + nsIPresShell* GetPrintPreviewPresShell() {return mPrtPreview->mPrintObject->mPresShell;} + + float GetPrintPreviewScale() { return mPrtPreview->mPrintObject-> + mPresContext->GetPrintPreviewScale(); } + + static nsIPresShell* GetPresShellFor(nsIDocShell* aDocShell); + + // These calls also update the DocViewer + void SetIsPrinting(bool aIsPrinting); + bool GetIsPrinting() + { + return mIsDoingPrinting; + } + void SetIsPrintPreview(bool aIsPrintPreview); + bool GetIsPrintPreview() + { + return mIsDoingPrintPreview; + } + void SetIsCreatingPrintPreview(bool aIsCreatingPrintPreview) + { + mIsCreatingPrintPreview = aIsCreatingPrintPreview; + } + bool GetIsCreatingPrintPreview() + { + return mIsCreatingPrintPreview; + } + + void SetDisallowSelectionPrint(bool aDisallowSelectionPrint) + { + mDisallowSelectionPrint = aDisallowSelectionPrint; + } + +protected: + ~nsPrintEngine(); + + nsresult CommonPrint(bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, + nsIWebProgressListener* aWebProgressListener, + nsIDOMDocument* aDoc); + + nsresult DoCommonPrint(bool aIsPrintPreview, nsIPrintSettings* aPrintSettings, + nsIWebProgressListener* aWebProgressListener, + nsIDOMDocument* aDoc); + + void FirePrintCompletionEvent(); + static nsresult GetSeqFrameAndCountPagesInternal(nsPrintObject* aPO, + nsIFrame*& aSeqFrame, + int32_t& aCount); + + static nsresult FindSelectionBoundsWithList(nsFrameList::Enumerator& aChildFrames, + nsIFrame * aParentFrame, + nsRect& aRect, + nsIFrame *& aStartFrame, + nsRect& aStartRect, + nsIFrame *& aEndFrame, + nsRect& aEndRect); + + static nsresult FindSelectionBounds(nsIFrame * aParentFrame, + nsRect& aRect, + nsIFrame *& aStartFrame, + nsRect& aStartRect, + nsIFrame *& aEndFrame, + nsRect& aEndRect); + + static nsresult GetPageRangeForSelection(nsIPageSequenceFrame* aPageSeqFrame, + nsIFrame** aStartFrame, + int32_t& aStartPageNum, + nsRect& aStartRect, + nsIFrame** aEndFrame, + int32_t& aEndPageNum, + nsRect& aEndRect); + + static void MapContentForPO(nsPrintObject* aPO, nsIContent* aContent); + + static void MapContentToWebShells(nsPrintObject* aRootPO, nsPrintObject* aPO); + + static void SetPrintAsIs(nsPrintObject* aPO, bool aAsIs = true); + + void DisconnectPagePrintTimer(); + + // Static member variables + bool mIsCreatingPrintPreview; + bool mIsDoingPrinting; + bool mIsDoingPrintPreview; // per DocumentViewer + bool mProgressDialogIsShown; + + nsCOMPtr<nsIDocumentViewerPrint> mDocViewerPrint; + nsWeakPtr mContainer; + float mScreenDPI; + + // We are the primary owner of our nsPrintData member vars. These vars + // are refcounted so that functions (e.g. nsPrintData methods) can create + // temporary owning references when they need to fire a callback that + // could conceivably destroy this nsPrintEngine owner object and all its + // member-data. + RefPtr<nsPrintData> mPrt; + + nsPagePrintTimer* mPagePrintTimer; + nsWeakFrame mPageSeqFrame; + + // Print Preview + RefPtr<nsPrintData> mPrtPreview; + RefPtr<nsPrintData> mOldPrtPreview; + + nsCOMPtr<nsIDocument> mDocument; + + FILE* mDebugFile; + + int32_t mLoadCounter; + bool mDidLoadDataForPrinting; + bool mIsDestroying; + bool mDisallowSelectionPrint; + + nsresult AfterNetworkPrint(bool aHandleError); + + nsresult SetRootView(nsPrintObject* aPO, + bool& aDoReturn, + bool& aDocumentIsTopLevel, + nsSize& aAdjSize); + nsView* GetParentViewForRoot(); + bool DoSetPixelScale(); + void UpdateZoomRatio(nsPrintObject* aPO, bool aSetPixelScale); + nsresult ReconstructAndReflow(bool aDoSetPixelScale); + nsresult UpdateSelectionAndShrinkPrintObject(nsPrintObject* aPO, + bool aDocumentIsTopLevel); + nsresult InitPrintDocConstruction(bool aHandleError); + void FirePrintPreviewUpdateEvent(); +private: + nsPrintEngine& operator=(const nsPrintEngine& aOther) = delete; +}; + +#endif /* nsPrintEngine_h___ */ |