mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-25 16:47:29 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
305
layout/printing/nsPrintEngine.h
Normal file
305
layout/printing/nsPrintEngine.h
Normal file
|
|
@ -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___ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue