mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
340a4385f3
In the multi-process case, we might need to query the system (and maybe the network) for a printer with a name matching the one we're looking for. In order to not spin an event loop at dangerous times (since searching for printers is either asynchronous, or requires an event loop), we defer searching for the printer until we've already finished reflowing and rendering the document to be printed.
85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
/* -*- 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 nsDeviceContextSpecGTK_h___
|
|
#define nsDeviceContextSpecGTK_h___
|
|
|
|
#include "nsIDeviceContextSpec.h"
|
|
#include "nsIPrintSettings.h"
|
|
#include "nsIPrintOptions.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsString.h"
|
|
#include "mozilla/Attributes.h"
|
|
|
|
#include "nsCRT.h" /* should be <limits.h>? */
|
|
|
|
#include <gtk/gtk.h>
|
|
#include <gtk/gtkunixprint.h>
|
|
|
|
#define NS_PORTRAIT 0
|
|
#define NS_LANDSCAPE 1
|
|
|
|
typedef enum
|
|
{
|
|
pmInvalid = 0,
|
|
pmPostScript
|
|
} PrintMethod;
|
|
|
|
class nsPrintSettingsGTK;
|
|
|
|
class nsDeviceContextSpecGTK : public nsIDeviceContextSpec
|
|
{
|
|
public:
|
|
nsDeviceContextSpecGTK();
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_IMETHOD GetSurfaceForPrinter(gfxASurface **surface) MOZ_OVERRIDE;
|
|
|
|
NS_IMETHOD Init(nsIWidget *aWidget, nsIPrintSettings* aPS,
|
|
bool aIsPrintPreview) MOZ_OVERRIDE;
|
|
NS_IMETHOD BeginDocument(const nsAString& aTitle, char16_t * aPrintToFileName,
|
|
int32_t aStartPage, int32_t aEndPage) MOZ_OVERRIDE;
|
|
NS_IMETHOD EndDocument() MOZ_OVERRIDE;
|
|
NS_IMETHOD BeginPage() MOZ_OVERRIDE { return NS_OK; }
|
|
NS_IMETHOD EndPage() MOZ_OVERRIDE { return NS_OK; }
|
|
|
|
static nsresult GetPrintMethod(const char *aPrinter, PrintMethod &aMethod);
|
|
|
|
protected:
|
|
virtual ~nsDeviceContextSpecGTK();
|
|
nsCOMPtr<nsPrintSettingsGTK> mPrintSettings;
|
|
bool mToPrinter : 1; /* If true, print to printer */
|
|
bool mIsPPreview : 1; /* If true, is print preview */
|
|
char mPath[PATH_MAX]; /* If toPrinter = false, dest file */
|
|
char mPrinter[256]; /* Printer name */
|
|
GtkPrintSettings* mGtkPrintSettings;
|
|
GtkPageSetup* mGtkPageSetup;
|
|
|
|
nsCString mSpoolName;
|
|
nsCOMPtr<nsIFile> mSpoolFile;
|
|
nsCString mTitle;
|
|
|
|
private:
|
|
void EnumeratePrinters();
|
|
static gboolean PrinterEnumerator(GtkPrinter *aPrinter, gpointer aData);
|
|
static void StartPrintJob(nsDeviceContextSpecGTK *spec,
|
|
GtkPrinter *printer);
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Printer Enumerator
|
|
//-------------------------------------------------------------------------
|
|
class nsPrinterEnumeratorGTK MOZ_FINAL : public nsIPrinterEnumerator
|
|
{
|
|
~nsPrinterEnumeratorGTK() {}
|
|
public:
|
|
nsPrinterEnumeratorGTK();
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSIPRINTERENUMERATOR
|
|
};
|
|
|
|
#endif /* !nsDeviceContextSpecGTK_h___ */
|