mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
Bug 175879. Display ISO paper sizes in mm & remove extraneous 1/4-inch
margin from printouts. r=tor, sr=roc
This commit is contained in:
parent
64209ceda0
commit
17802f01e7
@ -131,6 +131,15 @@ EXPORTS += \
|
|||||||
$(NULL)
|
$(NULL)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef MOZ_ENABLE_POSTSCRIPT
|
||||||
|
CPPSRCS += \
|
||||||
|
ps/nsPaperPS.cpp \
|
||||||
|
$(NULL)
|
||||||
|
EXPORTS += \
|
||||||
|
ps/nsPaperPS.h \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
|
|
||||||
EXTRA_DSO_LDOPTS = \
|
EXTRA_DSO_LDOPTS = \
|
||||||
$(DIST)/lib/$(LIB_PREFIX)mozutil_s.$(LIB_SUFFIX) \
|
$(DIST)/lib/$(LIB_PREFIX)mozutil_s.$(LIB_SUFFIX) \
|
||||||
$(MOZ_UNICHARUTIL_LIBS) \
|
$(MOZ_UNICHARUTIL_LIBS) \
|
||||||
|
@ -63,8 +63,7 @@
|
|||||||
#endif /* USE_XPRINT */
|
#endif /* USE_XPRINT */
|
||||||
|
|
||||||
#ifdef USE_POSTSCRIPT
|
#ifdef USE_POSTSCRIPT
|
||||||
/* Fetch |postscript_module_paper_sizes| */
|
#include "nsPaperPS.h" /* Paper size list */
|
||||||
#include "nsPostScriptObj.h"
|
|
||||||
#endif /* USE_POSTSCRIPT */
|
#endif /* USE_POSTSCRIPT */
|
||||||
|
|
||||||
/* Ensure that the result is always equal to either PR_TRUE or PR_FALSE */
|
/* Ensure that the result is always equal to either PR_TRUE or PR_FALSE */
|
||||||
@ -948,13 +947,9 @@ NS_IMETHODIMP nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter(const PRUnich
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
||||||
int i;
|
printerFeatures.SetOrientationRecord(0, "portrait");
|
||||||
for( i = 0 ; postscript_module_orientations[i].orientation != nsnull ; i++ )
|
printerFeatures.SetOrientationRecord(1, "landscape");
|
||||||
{
|
printerFeatures.SetNumOrientationRecords(2);
|
||||||
const PSOrientationRec *curr = &postscript_module_orientations[i];
|
|
||||||
printerFeatures.SetOrientationRecord(i, curr->orientation);
|
|
||||||
}
|
|
||||||
printerFeatures.SetNumOrientationRecords(i);
|
|
||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
|
|
||||||
/* PostScript module does not support changing the plex mode... */
|
/* PostScript module does not support changing the plex mode... */
|
||||||
@ -973,44 +968,31 @@ NS_IMETHODIMP nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter(const PRUnich
|
|||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
nsXPIDLCString papername;
|
nsXPIDLCString papername;
|
||||||
if (NS_SUCCEEDED(CopyPrinterCharPref(pPrefs, "postscript", printerName, "paper_size", getter_Copies(papername)))) {
|
if (NS_SUCCEEDED(CopyPrinterCharPref(pPrefs, "postscript", printerName, "paper_size", getter_Copies(papername)))) {
|
||||||
int i;
|
nsPaperSizePS paper;
|
||||||
const PSPaperSizeRec *default_paper = nsnull;
|
|
||||||
|
|
||||||
for( i = 0 ; postscript_module_paper_sizes[i].name != nsnull ; i++ )
|
|
||||||
{
|
|
||||||
const PSPaperSizeRec *curr = &postscript_module_paper_sizes[i];
|
|
||||||
|
|
||||||
if (!PL_strcasecmp(papername, curr->name)) {
|
if (paper.Find(papername)) {
|
||||||
default_paper = curr;
|
DO_PR_DEBUG_LOG(("setting default paper size to '%s' (%g mm/%g mm)\n",
|
||||||
break;
|
paper.Name(), paper.Width_mm(), paper.Height_mm()));
|
||||||
}
|
aPrintSettings->SetPaperSizeUnit(paper.IsMetric() ?
|
||||||
}
|
(int)nsIPrintSettings::kPaperSizeMillimeters :
|
||||||
|
(int)nsIPrintSettings::kPaperSizeInches);
|
||||||
if (default_paper) {
|
aPrintSettings->SetPaperWidth(paper.Width_mm());
|
||||||
DO_PR_DEBUG_LOG(("setting default paper size to '%s' (%g inch/%g inch)\n",
|
aPrintSettings->SetPaperHeight(paper.Height_mm());
|
||||||
default_paper->name,
|
aPrintSettings->SetPaperName(NS_ConvertASCIItoUCS2(paper.Name()).get());
|
||||||
PSPaperSizeRec_FullPaperWidth(default_paper),
|
|
||||||
PSPaperSizeRec_FullPaperHeight(default_paper)));
|
|
||||||
aPrintSettings->SetPaperSizeType(nsIPrintSettings::kPaperSizeDefined);
|
|
||||||
aPrintSettings->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeInches);
|
|
||||||
aPrintSettings->SetPaperWidth(PSPaperSizeRec_FullPaperWidth(default_paper));
|
|
||||||
aPrintSettings->SetPaperHeight(PSPaperSizeRec_FullPaperHeight(default_paper));
|
|
||||||
aPrintSettings->SetPaperName(NS_ConvertUTF8toUCS2(default_paper->name).get());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DO_PR_DEBUG_LOG(("Unknown paper size '%s' given.\n", papername.get()));
|
DO_PR_DEBUG_LOG(("Unknown paper size '%s' given.\n", papername.get()));
|
||||||
}
|
}
|
||||||
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
||||||
for( i = 0 ; postscript_module_paper_sizes[i].name != nsnull ; i++ )
|
paper.First();
|
||||||
|
int count = 0;
|
||||||
|
while (!paper.AtEnd())
|
||||||
{
|
{
|
||||||
const PSPaperSizeRec *curr = &postscript_module_paper_sizes[i];
|
printerFeatures.SetPaperRecord(count++, paper.Name(),
|
||||||
#define CONVERT_INCH_TO_MILLIMETERS(inch) ((inch) * 25.4)
|
(int)paper.Width_mm(), (int)paper.Height_mm(), !paper.IsMetric());
|
||||||
double total_width = CONVERT_INCH_TO_MILLIMETERS(PSPaperSizeRec_FullPaperWidth(curr)),
|
paper.Next();
|
||||||
total_height = CONVERT_INCH_TO_MILLIMETERS(PSPaperSizeRec_FullPaperHeight(curr));
|
|
||||||
|
|
||||||
printerFeatures.SetPaperRecord(i, curr->name, PRInt32(total_width), PRInt32(total_height), PR_TRUE);
|
|
||||||
}
|
}
|
||||||
printerFeatures.SetNumPaperSizeRecords(i);
|
printerFeatures.SetNumPaperSizeRecords(count);
|
||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
72
gfx/src/ps/nsPaperPS.cpp
Normal file
72
gfx/src/ps/nsPaperPS.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/* ex: set tabstop=8 softtabstop=4 shiftwidth=4 expandtab: */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is developed for mozilla. The tables of paper sizes
|
||||||
|
* and paper orientations are based on tables from nsPostScriptObj.h.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Kenneth Herron <kherron@newsguy.com>.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
#include "nsPaperPS.h"
|
||||||
|
#include "plstr.h"
|
||||||
|
|
||||||
|
#define COUNTOF(x) (sizeof(x) / sizeof((x)[0]))
|
||||||
|
|
||||||
|
const nsPaperSizePS_ nsPaperSizePS::mList[] =
|
||||||
|
{
|
||||||
|
#define SIZE_MM(x) (x)
|
||||||
|
#define SIZE_INCH(x) ((x) * 25.4)
|
||||||
|
{ "A5", SIZE_MM(148), SIZE_MM(210), PR_TRUE },
|
||||||
|
{ "A4", SIZE_MM(210), SIZE_MM(297), PR_TRUE },
|
||||||
|
{ "A3", SIZE_MM(297), SIZE_MM(420), PR_TRUE },
|
||||||
|
{ "Letter", SIZE_INCH(8.5), SIZE_INCH(11), PR_FALSE },
|
||||||
|
{ "Legal", SIZE_INCH(8.5), SIZE_INCH(14), PR_FALSE },
|
||||||
|
{ "Executive", SIZE_INCH(7.5), SIZE_INCH(10), PR_FALSE },
|
||||||
|
#undef SIZE_INCH
|
||||||
|
#undef SIZE_MM
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned int nsPaperSizePS::mCount = COUNTOF(mList);
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsPaperSizePS::Find(const char *aName)
|
||||||
|
{
|
||||||
|
for (int i = mCount; i--; ) {
|
||||||
|
if (!PL_strcasecmp(aName, mList[i].name)) {
|
||||||
|
mCurrent = i;
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PR_FALSE;
|
||||||
|
}
|
126
gfx/src/ps/nsPaperPS.h
Normal file
126
gfx/src/ps/nsPaperPS.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/* ex: set tabstop=8 softtabstop=4 shiftwidth=4 expandtab: */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is developed for mozilla.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Kenneth Herron <kherron@newsguy.com>.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _PAPERPS_H_
|
||||||
|
#define _PAPERPS_H_
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
#include "nsDebug.h"
|
||||||
|
|
||||||
|
struct nsPaperSizePS_ {
|
||||||
|
const char *name;
|
||||||
|
float width_mm;
|
||||||
|
float height_mm;
|
||||||
|
PRBool isMetric; // Present to the user in metric, if possible
|
||||||
|
};
|
||||||
|
|
||||||
|
class nsPaperSizePS {
|
||||||
|
public:
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
nsPaperSizePS() { mCurrent = 0; }
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* @return PR_TRUE if the cursor points past the last item.
|
||||||
|
*/
|
||||||
|
PRBool AtEnd() { return mCurrent >= mCount; }
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* Position the cursor at the beginning of the paper size list.
|
||||||
|
* @return VOID
|
||||||
|
*/
|
||||||
|
void First() { mCurrent = 0; }
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* Advance the cursor to the next item.
|
||||||
|
* @return VOID
|
||||||
|
*/
|
||||||
|
void Next() {
|
||||||
|
NS_WARN_IF_FALSE(!AtEnd(), "Invalid current item");
|
||||||
|
mCurrent++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* Point the cursor to the entry with the given paper name.
|
||||||
|
* @return PR_TRUE if pointing to a valid entry.
|
||||||
|
*/
|
||||||
|
PRBool Find(const char *aName);
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* @return a pointer to the name of the current paper size
|
||||||
|
*/
|
||||||
|
const char *Name() {
|
||||||
|
NS_PRECONDITION(!AtEnd(), "Invalid current item");
|
||||||
|
return mList[mCurrent].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* @return the width of the page in millimeters
|
||||||
|
*/
|
||||||
|
float Width_mm() {
|
||||||
|
NS_PRECONDITION(!AtEnd(), "Invalid current item");
|
||||||
|
return mList[mCurrent].width_mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* @return the height of the page in millimeters
|
||||||
|
*/
|
||||||
|
float Height_mm() {
|
||||||
|
NS_PRECONDITION(!AtEnd(), "Invalid current item");
|
||||||
|
return mList[mCurrent].height_mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---------------------------------------------------
|
||||||
|
* @return PR_TRUE if the paper should be presented to
|
||||||
|
* the user in metric units.
|
||||||
|
*/
|
||||||
|
PRBool IsMetric() {
|
||||||
|
NS_PRECONDITION(!AtEnd(), "Invalid current item");
|
||||||
|
return mList[mCurrent].isMetric;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int mCurrent;
|
||||||
|
static const nsPaperSizePS_ mList[];
|
||||||
|
static const unsigned int mCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -19,6 +19,7 @@
|
|||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
||||||
|
* Ken Herron <kherron@newsguy.com>
|
||||||
*
|
*
|
||||||
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
|
* This Original Code has been modified by IBM Corporation. Modifications made by IBM
|
||||||
* described herein are Copyright (c) International Business Machines Corporation, 2000.
|
* described herein are Copyright (c) International Business Machines Corporation, 2000.
|
||||||
@ -54,6 +55,7 @@
|
|||||||
#include "nsIPersistentProperties2.h"
|
#include "nsIPersistentProperties2.h"
|
||||||
#include "nsCRT.h"
|
#include "nsCRT.h"
|
||||||
#include "nsFontMetricsPS.h"
|
#include "nsFontMetricsPS.h"
|
||||||
|
#include "nsPaperPS.h"
|
||||||
|
|
||||||
#ifndef NS_BUILD_ID
|
#ifndef NS_BUILD_ID
|
||||||
#include "nsBuildID.h"
|
#include "nsBuildID.h"
|
||||||
@ -261,25 +263,9 @@ nsPostScriptObj::settitle(PRUnichar * aTitle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
const PSPaperSizeRec *paper_name_to_PSPaperSizeRec(const char *paper_name)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for( i = 0 ; postscript_module_paper_sizes[i].name != nsnull ; i++ )
|
|
||||||
{
|
|
||||||
const PSPaperSizeRec *curr = &postscript_module_paper_sizes[i];
|
|
||||||
|
|
||||||
if (!PL_strcasecmp(paper_name, curr->name))
|
|
||||||
return curr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** ---------------------------------------------------
|
/** ---------------------------------------------------
|
||||||
* See documentation in nsPostScriptObj.h
|
* See documentation in nsPostScriptObj.h
|
||||||
* @update 2/1/99 dwc
|
* @update 2/20/2004 kherron
|
||||||
*/
|
*/
|
||||||
nsresult
|
nsresult
|
||||||
nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
||||||
@ -288,7 +274,6 @@ nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
|||||||
isAPrinter,
|
isAPrinter,
|
||||||
isFirstPageFirst;
|
isFirstPageFirst;
|
||||||
int landscape;
|
int landscape;
|
||||||
float fwidth, fheight;
|
|
||||||
const char *printername;
|
const char *printername;
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
|
||||||
@ -313,14 +298,6 @@ nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
|||||||
if ( isFirstPageFirst == PR_FALSE )
|
if ( isFirstPageFirst == PR_FALSE )
|
||||||
mPrintSetup->reverse = 1;
|
mPrintSetup->reverse = 1;
|
||||||
|
|
||||||
/* Find PS paper size record by name */
|
|
||||||
const char *paper_name = nsnull;
|
|
||||||
aSpec->GetPaperName(&paper_name);
|
|
||||||
mPrintSetup->paper_size = paper_name_to_PSPaperSizeRec(paper_name);
|
|
||||||
|
|
||||||
if (!mPrintSetup->paper_size)
|
|
||||||
return NS_ERROR_GFX_PRINTER_PAPER_SIZE_NOT_SUPPORTED;
|
|
||||||
|
|
||||||
// Clean up tempfile remnants of any previous print job
|
// Clean up tempfile remnants of any previous print job
|
||||||
if (mDocProlog)
|
if (mDocProlog)
|
||||||
mDocProlog->Remove(PR_FALSE);
|
mDocProlog->Remove(PR_FALSE);
|
||||||
@ -425,34 +402,26 @@ nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
|||||||
memset(mPrintContext, 0, sizeof(struct PSContext_));
|
memset(mPrintContext, 0, sizeof(struct PSContext_));
|
||||||
memset(pi, 0, sizeof(struct PrintInfo_));
|
memset(pi, 0, sizeof(struct PrintInfo_));
|
||||||
|
|
||||||
mPrintSetup->dpi = 72.0f; // dpi for externally sized items
|
/* Find PS paper size record by name */
|
||||||
|
aSpec->GetPaperName(&(mPrintSetup->paper_name));
|
||||||
|
nsPaperSizePS paper;
|
||||||
|
if (!paper.Find(mPrintSetup->paper_name))
|
||||||
|
return NS_ERROR_GFX_PRINTER_PAPER_SIZE_NOT_SUPPORTED;
|
||||||
|
|
||||||
aSpec->GetLandscape( landscape );
|
aSpec->GetLandscape( landscape );
|
||||||
fwidth = mPrintSetup->paper_size->width;
|
mPrintSetup->width = NS_MILLIMETERS_TO_TWIPS(paper.Width_mm());
|
||||||
fheight = mPrintSetup->paper_size->height;
|
mPrintSetup->height = NS_MILLIMETERS_TO_TWIPS(paper.Height_mm());
|
||||||
|
|
||||||
if (landscape) {
|
if (landscape) {
|
||||||
float temp;
|
nscoord temp = mPrintSetup->width;
|
||||||
temp = fwidth;
|
mPrintSetup->width = mPrintSetup->height;
|
||||||
fwidth = fheight;
|
mPrintSetup->height = temp;
|
||||||
fheight = temp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mPrintSetup->left = NSToCoordRound(mPrintSetup->paper_size->left
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
mPrintSetup->top = NSToCoordRound(mPrintSetup->paper_size->top
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
mPrintSetup->bottom = NSToCoordRound(mPrintSetup->paper_size->bottom
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
mPrintSetup->right = NSToCoordRound(mPrintSetup->paper_size->right
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
|
|
||||||
mPrintSetup->width = NSToCoordRound(fwidth
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
mPrintSetup->height = NSToCoordRound(fheight
|
|
||||||
* mPrintSetup->dpi * TWIPS_PER_POINT_FLOAT);
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("\nPreWidth = %f PreHeight = %f\n",fwidth,fheight);
|
printf("\nPaper Width = %d twips (%gmm) Height = %d twips (%gmm)\n",
|
||||||
printf("\nWidth = %d Height = %d\n",mPrintSetup->width,mPrintSetup->height);
|
mPrintSetup->width, paper.Width_mm(),
|
||||||
|
mPrintSetup->height, paper.Height_mm());
|
||||||
#endif
|
#endif
|
||||||
mPrintSetup->header = "header";
|
mPrintSetup->header = "header";
|
||||||
mPrintSetup->footer = "footer";
|
mPrintSetup->footer = "footer";
|
||||||
@ -464,10 +433,7 @@ nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
|||||||
mPrintSetup->underline = PR_TRUE; // underline links
|
mPrintSetup->underline = PR_TRUE; // underline links
|
||||||
mPrintSetup->scale_images = PR_TRUE; // Scale unsized images which are too big
|
mPrintSetup->scale_images = PR_TRUE; // Scale unsized images which are too big
|
||||||
mPrintSetup->scale_pre = PR_FALSE; // do the pre-scaling thing
|
mPrintSetup->scale_pre = PR_FALSE; // do the pre-scaling thing
|
||||||
// scale margins (specified in inches) to dots.
|
|
||||||
|
|
||||||
PR_LOG(nsPostScriptObjLM, PR_LOG_DEBUG, ("dpi %g top %d bottom %d left %d right %d\n",
|
|
||||||
mPrintSetup->dpi, mPrintSetup->top, mPrintSetup->bottom, mPrintSetup->left, mPrintSetup->right));
|
|
||||||
|
|
||||||
mPrintSetup->rules = 1.0f; // Scale factor for rulers
|
mPrintSetup->rules = 1.0f; // Scale factor for rulers
|
||||||
mPrintSetup->n_up = 0; // cool page combining
|
mPrintSetup->n_up = 0; // cool page combining
|
||||||
@ -487,23 +453,9 @@ nsPostScriptObj::Init( nsIDeviceContextSpecPS *aSpec )
|
|||||||
mPrintSetup->carg = nsnull; // Data saved for completion routine
|
mPrintSetup->carg = nsnull; // Data saved for completion routine
|
||||||
mPrintSetup->status = 0; // Status of URL on completion
|
mPrintSetup->status = 0; // Status of URL on completion
|
||||||
|
|
||||||
pi->page_height = mPrintSetup->height; // Size of printable area on page
|
|
||||||
pi->page_width = mPrintSetup->width; // Size of printable area on page
|
|
||||||
pi->page_break = 0; // Current page bottom
|
|
||||||
pi->page_topy = 0; // Current page top
|
|
||||||
pi->phase = 0;
|
|
||||||
|
|
||||||
|
|
||||||
pi->pages = nsnull; // Contains extents of each page
|
|
||||||
|
|
||||||
pi->pt_size = 0; // Size of above table
|
|
||||||
pi->n_pages = 0; // # of valid entries in above table
|
|
||||||
|
|
||||||
mTitle = nsnull;
|
mTitle = nsnull;
|
||||||
|
|
||||||
pi->doc_title = mTitle;
|
pi->doc_title = mTitle;
|
||||||
pi->doc_width = 0; // Total document width
|
|
||||||
pi->doc_height = 0; // Total document height
|
|
||||||
|
|
||||||
mPrintContext->prInfo = pi;
|
mPrintContext->prInfo = pi;
|
||||||
|
|
||||||
@ -553,10 +505,8 @@ nsPostScriptObj::begin_document()
|
|||||||
int i;
|
int i;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
nscoord paper_width = mPrintContext->prSetup->left
|
nscoord paper_width = mPrintContext->prSetup->width;
|
||||||
+ mPrintContext->prSetup->width + mPrintContext->prSetup->right;
|
nscoord paper_height = mPrintContext->prSetup->height;
|
||||||
nscoord paper_height = mPrintContext->prSetup->bottom
|
|
||||||
+ mPrintContext->prSetup->height + mPrintContext->prSetup->top;
|
|
||||||
const char *orientation;
|
const char *orientation;
|
||||||
|
|
||||||
if (paper_height < paper_width) {
|
if (paper_height < paper_width) {
|
||||||
@ -573,16 +523,14 @@ FILE *f;
|
|||||||
|
|
||||||
f = mPrintContext->prSetup->out;
|
f = mPrintContext->prSetup->out;
|
||||||
fprintf(f, "%%!PS-Adobe-3.0\n");
|
fprintf(f, "%%!PS-Adobe-3.0\n");
|
||||||
fprintf(f, "%%%%BoundingBox: %s %s %s %s\n",
|
fprintf(f, "%%%%BoundingBox: 0 0 %s %s\n",
|
||||||
fpCString(NSTwipsToFloatPoints(mPrintContext->prSetup->left)).get(),
|
fpCString(NSTwipsToFloatPoints(paper_width)).get(),
|
||||||
fpCString(NSTwipsToFloatPoints(mPrintContext->prSetup->bottom)).get(),
|
fpCString(NSTwipsToFloatPoints(paper_height)).get());
|
||||||
fpCString(NSTwipsToFloatPoints(paper_width - mPrintContext->prSetup->right)).get(),
|
|
||||||
fpCString(NSTwipsToFloatPoints(paper_height - mPrintContext->prSetup->top)).get());
|
|
||||||
|
|
||||||
fprintf(f, "%%%%Creator: Mozilla PostScript module (%s/%lu)\n",
|
fprintf(f, "%%%%Creator: Mozilla PostScript module (%s/%lu)\n",
|
||||||
"rv:" MOZILLA_VERSION, (unsigned long)NS_BUILD_ID);
|
"rv:" MOZILLA_VERSION, (unsigned long)NS_BUILD_ID);
|
||||||
fprintf(f, "%%%%DocumentData: Clean8Bit\n");
|
fprintf(f, "%%%%DocumentData: Clean8Bit\n");
|
||||||
fprintf(f, "%%%%DocumentPaperSizes: %s\n", mPrintSetup->paper_size->name);
|
fprintf(f, "%%%%DocumentPaperSizes: %s\n", mPrintSetup->paper_name);
|
||||||
fprintf(f, "%%%%Orientation: %s\n", orientation);
|
fprintf(f, "%%%%Orientation: %s\n", orientation);
|
||||||
|
|
||||||
// hmm, n_pages is always zero so don't use it
|
// hmm, n_pages is always zero so don't use it
|
||||||
@ -621,17 +569,12 @@ FILE *f;
|
|||||||
// Tell the printer what size paper it should use
|
// Tell the printer what size paper it should use
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"/setpagedevice where\n" // Test for the feature
|
"/setpagedevice where\n" // Test for the feature
|
||||||
"{ pop 2 dict\n" // Set up a dictionary
|
"{ pop 1 dict\n" // Set up a dictionary
|
||||||
" dup /PageSize [ %s %s ] put\n" // Paper dimensions
|
" dup /PageSize [ %s %s ] put\n" // Paper dimensions
|
||||||
" dup /ImagingBBox [ %s %s %s %s ] put\n" // Bounding box
|
|
||||||
" setpagedevice\n" // Install settings
|
" setpagedevice\n" // Install settings
|
||||||
"} if\n",
|
"} if\n",
|
||||||
fpCString(NSTwipsToFloatPoints(paper_width)).get(),
|
fpCString(NSTwipsToFloatPoints(paper_width)).get(),
|
||||||
fpCString(NSTwipsToFloatPoints(paper_height)).get(),
|
fpCString(NSTwipsToFloatPoints(paper_height)).get());
|
||||||
fpCString(NSTwipsToFloatPoints(mPrintContext->prSetup->left)).get(),
|
|
||||||
fpCString(NSTwipsToFloatPoints(mPrintContext->prSetup->bottom)).get(),
|
|
||||||
fpCString(NSTwipsToFloatPoints(paper_width - mPrintContext->prSetup->right)).get(),
|
|
||||||
fpCString(NSTwipsToFloatPoints(paper_height - mPrintContext->prSetup->top)).get());
|
|
||||||
|
|
||||||
fprintf(f, "[");
|
fprintf(f, "[");
|
||||||
for (i = 0; i < 256; i++){
|
for (i = 0; i < 256; i++){
|
||||||
@ -2003,26 +1946,14 @@ FILE *f;
|
|||||||
fprintf(f,"/pagelevel save def\n");
|
fprintf(f,"/pagelevel save def\n");
|
||||||
// Rescale the coordinate system from points to twips.
|
// Rescale the coordinate system from points to twips.
|
||||||
scale(1.0 / TWIPS_PER_POINT_FLOAT, 1.0 / TWIPS_PER_POINT_FLOAT);
|
scale(1.0 / TWIPS_PER_POINT_FLOAT, 1.0 / TWIPS_PER_POINT_FLOAT);
|
||||||
// Move the origin to the bottom left of the printable region.
|
// Rotate and shift the coordinate system for landscape
|
||||||
if (mPrintContext->prSetup->landscape){
|
if (mPrintContext->prSetup->landscape){
|
||||||
fprintf(f, "90 rotate %d -%d translate\n",
|
fprintf(f, "90 rotate 0 -%d translate\n", mPrintContext->prSetup->height);
|
||||||
mPrintContext->prSetup->left,
|
|
||||||
mPrintContext->prSetup->height + mPrintContext->prSetup->top);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(f, "%d %d translate\n",
|
|
||||||
mPrintContext->prSetup->left,
|
|
||||||
mPrintContext->prSetup->bottom);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to turn on automatic stroke adjust
|
// Try to turn on automatic stroke adjust
|
||||||
fputs("true Msetstrokeadjust\n", f);
|
fputs("true Msetstrokeadjust\n", f);
|
||||||
fprintf(f, "%%%%EndPageSetup\n");
|
fprintf(f, "%%%%EndPageSetup\n");
|
||||||
#if 0
|
|
||||||
annotate_page( mPrintContext->prSetup->header, 0, -1, pn);
|
|
||||||
#endif
|
|
||||||
// Set up a clipping rectangle around the printable area.
|
|
||||||
fprintf(f, "0 0 %d %d Mrect closepath clip newpath\n",
|
|
||||||
mPrintContext->prInfo->page_width, mPrintContext->prInfo->page_height);
|
|
||||||
|
|
||||||
// need to reset all U2Ntable
|
// need to reset all U2Ntable
|
||||||
gLangGroups->Enumerate(ResetU2Ntable, nsnull);
|
gLangGroups->Enumerate(ResetU2Ntable, nsnull);
|
||||||
@ -2035,18 +1966,7 @@ FILE *f;
|
|||||||
void
|
void
|
||||||
nsPostScriptObj::end_page()
|
nsPostScriptObj::end_page()
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
annotate_page( mPrintContext->prSetup->footer,
|
|
||||||
mPrintContext->prSetup->height-mPrintContext->prSetup->bottom-mPrintContext->prSetup->top,
|
|
||||||
1, pn);
|
|
||||||
fprintf(mPrintContext->prSetup->out, "pagelevel restore\nshowpage\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fprintf(mPrintContext->prSetup->tmpBody, "pagelevel restore\n");
|
fprintf(mPrintContext->prSetup->tmpBody, "pagelevel restore\n");
|
||||||
annotate_page(mPrintContext->prSetup->header, mPrintContext->prSetup->top/2, -1, mPageNumber);
|
|
||||||
annotate_page( mPrintContext->prSetup->footer,
|
|
||||||
mPrintContext->prSetup->height - mPrintContext->prSetup->bottom/2,
|
|
||||||
1, mPageNumber);
|
|
||||||
fprintf(mPrintContext->prSetup->tmpBody, "showpage\n");
|
fprintf(mPrintContext->prSetup->tmpBody, "showpage\n");
|
||||||
mPageNumber++;
|
mPageNumber++;
|
||||||
}
|
}
|
||||||
@ -2163,17 +2083,6 @@ nsPostScriptObj::end_document()
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ---------------------------------------------------
|
|
||||||
* See documentation in nsPostScriptObj.h
|
|
||||||
* @update 2/1/99 dwc
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
nsPostScriptObj::annotate_page(const char *aTemplate,
|
|
||||||
int y, int delta_dir, int pn)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** ---------------------------------------------------
|
/** ---------------------------------------------------
|
||||||
* See documentation in nsPostScriptObj.h
|
* See documentation in nsPostScriptObj.h
|
||||||
* @update 2/1/99 dwc. Updated 3/22/2000 to deal with only non-Unicode chars. yueheng.xu@intel.com
|
* @update 2/1/99 dwc. Updated 3/22/2000 to deal with only non-Unicode chars. yueheng.xu@intel.com
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
||||||
|
* Ken Herron <kherron@newsguy.com>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
@ -67,46 +68,6 @@ class nsIImage;
|
|||||||
|
|
||||||
typedef int XP_Bool;
|
typedef int XP_Bool;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char *name;
|
|
||||||
float left,
|
|
||||||
top,
|
|
||||||
right,
|
|
||||||
bottom,
|
|
||||||
width,
|
|
||||||
height;
|
|
||||||
} PSPaperSizeRec;
|
|
||||||
|
|
||||||
|
|
||||||
static const
|
|
||||||
PSPaperSizeRec postscript_module_paper_sizes[] =
|
|
||||||
{
|
|
||||||
{ "A5", 0.25f, 0.25f, 0.25f, 0.25f, 5.33f, 7.77f }, /* 148mm X 210mm ( 5.83in X 8.27in) */
|
|
||||||
{ "A4", 0.25f, 0.25f, 0.25f, 0.25f, 7.77f, 11.19f }, /* 210mm X 297mm ( 8.27in X 11.69in) */
|
|
||||||
{ "A3", 0.25f, 0.25f, 0.25f, 0.25f, 11.19f, 16.03f }, /* 297mm X 420mm (11.69in X 16.53in) */
|
|
||||||
{ "Letter", 0.25f, 0.25f, 0.25f, 0.25f, 8.00f, 10.50f }, /* 8.50in X 11.0in */
|
|
||||||
{ "Legal", 0.25f, 0.25f, 0.25f, 0.25f, 8.00f, 13.50f }, /* 8.50in X 14.0in */
|
|
||||||
{ "Executive", 0.25f, 0.25f, 0.25f, 0.25f, 7.00f, 9.50f }, /* 7.50in X 10.0in */
|
|
||||||
{ 0, 0.25f, 0.25f, 0.25f, 0.25f, 0.00f, 0.0f }
|
|
||||||
};
|
|
||||||
|
|
||||||
#define PSPaperSizeRec_FullPaperWidth(rec) ((rec)->left + (rec)->right + (rec)->width)
|
|
||||||
#define PSPaperSizeRec_FullPaperHeight(rec) ((rec)->top + (rec)->bottom + (rec)->height)
|
|
||||||
|
|
||||||
/* This will be extended some day... */
|
|
||||||
typedef struct {
|
|
||||||
const char *orientation;
|
|
||||||
} PSOrientationRec;
|
|
||||||
|
|
||||||
/* This will be extended some day... */
|
|
||||||
static const
|
|
||||||
PSOrientationRec postscript_module_orientations[] =
|
|
||||||
{
|
|
||||||
{ "portrait" },
|
|
||||||
{ "landscape" },
|
|
||||||
{ NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*XL_CompletionRoutine)(void*);
|
typedef void (*XL_CompletionRoutine)(void*);
|
||||||
|
|
||||||
typedef struct page_breaks {
|
typedef struct page_breaks {
|
||||||
@ -127,21 +88,7 @@ typedef struct LineRecord_struct LineRecord;
|
|||||||
** Used to store state needed while translation is in progress
|
** Used to store state needed while translation is in progress
|
||||||
*/
|
*/
|
||||||
struct PrintInfo_ {
|
struct PrintInfo_ {
|
||||||
/* for table printing */
|
|
||||||
int32 page_height; /* Size of printable area on page */
|
|
||||||
int32 page_width; /* Size of printable area on page */
|
|
||||||
int32 page_break; /* Current page bottom */
|
|
||||||
int32 page_topy; /* Current page top */
|
|
||||||
int phase;
|
|
||||||
|
|
||||||
PageBreaks *pages; /* Contains extents of each page */
|
|
||||||
|
|
||||||
int pt_size; /* Size of above table */
|
|
||||||
int n_pages; /* # of valid entries in above table */
|
|
||||||
|
|
||||||
const char *doc_title; /* best guess at title */
|
const char *doc_title; /* best guess at title */
|
||||||
int32 doc_width; /* Total document width */
|
|
||||||
int32 doc_height; /* Total document height */
|
|
||||||
|
|
||||||
#ifdef LATER
|
#ifdef LATER
|
||||||
THIS IS GOING TO BE DELETED XXXXX
|
THIS IS GOING TO BE DELETED XXXXX
|
||||||
@ -168,16 +115,12 @@ typedef struct PrintInfo_ PrintInfo;
|
|||||||
** Used to pass info into text and/or postscript translation
|
** Used to pass info into text and/or postscript translation
|
||||||
*/
|
*/
|
||||||
struct PrintSetup_ {
|
struct PrintSetup_ {
|
||||||
nscoord top; /* Margins -- distance from the edge */
|
nscoord width; /* Page size, in twips, as oriented for */
|
||||||
nscoord bottom; /* of the printable region to the */
|
nscoord height; /* this print job. */
|
||||||
nscoord left; /* edge of the paper. Measured in twips. */
|
|
||||||
nscoord right;
|
|
||||||
|
|
||||||
nscoord width; /* Paper size, in twips. */
|
|
||||||
nscoord height;
|
|
||||||
|
|
||||||
const char* header;
|
const char* header;
|
||||||
const char* footer;
|
const char* footer;
|
||||||
|
const char* paper_name;
|
||||||
|
|
||||||
int *sizes;
|
int *sizes;
|
||||||
XP_Bool reverse; /* Output order */
|
XP_Bool reverse; /* Output order */
|
||||||
@ -187,11 +130,9 @@ struct PrintSetup_ {
|
|||||||
XP_Bool underline; /* underline links */
|
XP_Bool underline; /* underline links */
|
||||||
XP_Bool scale_images; /* Scale unsized images which are too big */
|
XP_Bool scale_images; /* Scale unsized images which are too big */
|
||||||
XP_Bool scale_pre; /* do the pre-scaling thing */
|
XP_Bool scale_pre; /* do the pre-scaling thing */
|
||||||
float dpi; /* dpi for externally sized items */
|
|
||||||
float rules; /* Scale factor for rulers */
|
float rules; /* Scale factor for rulers */
|
||||||
int n_up; /* cool page combining */
|
int n_up; /* cool page combining */
|
||||||
int bigger; /* Used to init sizes if sizesin NULL */
|
int bigger; /* Used to init sizes if sizesin NULL */
|
||||||
const PSPaperSizeRec *paper_size; /* Paper size record */
|
|
||||||
const char* prefix; /* For text xlate, prepended to each line */
|
const char* prefix; /* For text xlate, prepended to each line */
|
||||||
const char* eol; /* For text translation, line terminator */
|
const char* eol; /* For text translation, line terminator */
|
||||||
const char* bullet; /* What char to use for bullets */
|
const char* bullet; /* What char to use for bullets */
|
||||||
@ -373,11 +314,6 @@ public:
|
|||||||
* @update 2/1/99 dwc
|
* @update 2/1/99 dwc
|
||||||
*/
|
*/
|
||||||
void finalize_translation();
|
void finalize_translation();
|
||||||
/** ---------------------------------------------------
|
|
||||||
* ???
|
|
||||||
* @update 2/1/99 dwc
|
|
||||||
*/
|
|
||||||
void annotate_page( const char*, int, int, int);
|
|
||||||
/** ---------------------------------------------------
|
/** ---------------------------------------------------
|
||||||
* Output postscript to scale the current coordinate system
|
* Output postscript to scale the current coordinate system
|
||||||
* @param aX X scale factor
|
* @param aX X scale factor
|
||||||
|
@ -63,8 +63,7 @@
|
|||||||
#endif /* USE_XPRINT */
|
#endif /* USE_XPRINT */
|
||||||
|
|
||||||
#ifdef USE_POSTSCRIPT
|
#ifdef USE_POSTSCRIPT
|
||||||
/* Fetch |postscript_module_paper_sizes| */
|
#include "nsPaperPS.h" /* Paper size list */
|
||||||
#include "nsPostScriptObj.h"
|
|
||||||
#endif /* USE_POSTSCRIPT */
|
#endif /* USE_POSTSCRIPT */
|
||||||
|
|
||||||
/* Ensure that the result is always equal to either PR_TRUE or PR_FALSE */
|
/* Ensure that the result is always equal to either PR_TRUE or PR_FALSE */
|
||||||
@ -948,13 +947,9 @@ NS_IMETHODIMP nsPrinterEnumeratorXlib::InitPrintSettingsFromPrinter(const PRUnic
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
||||||
int i;
|
printerFeatures.SetOrientationRecord(0, "portrait");
|
||||||
for( i = 0 ; postscript_module_orientations[i].orientation != nsnull ; i++ )
|
printerFeatures.SetOrientationRecord(1, "landscape");
|
||||||
{
|
printerFeatures.SetNumOrientationRecords(2);
|
||||||
const PSOrientationRec *curr = &postscript_module_orientations[i];
|
|
||||||
printerFeatures.SetOrientationRecord(i, curr->orientation);
|
|
||||||
}
|
|
||||||
printerFeatures.SetNumOrientationRecords(i);
|
|
||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
|
|
||||||
/* PostScript module does not support changing the plex mode... */
|
/* PostScript module does not support changing the plex mode... */
|
||||||
@ -973,44 +968,32 @@ NS_IMETHODIMP nsPrinterEnumeratorXlib::InitPrintSettingsFromPrinter(const PRUnic
|
|||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
nsXPIDLCString papername;
|
nsXPIDLCString papername;
|
||||||
if (NS_SUCCEEDED(CopyPrinterCharPref(pPrefs, "postscript", printerName, "paper_size", getter_Copies(papername)))) {
|
if (NS_SUCCEEDED(CopyPrinterCharPref(pPrefs, "postscript", printerName, "paper_size", getter_Copies(papername)))) {
|
||||||
int i;
|
nsPaperSizePS paper;
|
||||||
const PSPaperSizeRec *default_paper = nsnull;
|
|
||||||
|
|
||||||
for( i = 0 ; postscript_module_paper_sizes[i].name != nsnull ; i++ )
|
if (paper.Find(papername)) {
|
||||||
{
|
DO_PR_DEBUG_LOG(("setting default paper size to '%s' (%g mm/%g mm)\n",
|
||||||
const PSPaperSizeRec *curr = &postscript_module_paper_sizes[i];
|
paper.Name(), paper.Width_mm(), paper.Height_mm()));
|
||||||
|
|
||||||
if (!PL_strcasecmp(papername, curr->name)) {
|
|
||||||
default_paper = curr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (default_paper) {
|
|
||||||
DO_PR_DEBUG_LOG(("setting default paper size to '%s' (%g inch/%g inch)\n",
|
|
||||||
default_paper->name,
|
|
||||||
PSPaperSizeRec_FullPaperWidth(default_paper),
|
|
||||||
PSPaperSizeRec_FullPaperHeight(default_paper)));
|
|
||||||
aPrintSettings->SetPaperSizeType(nsIPrintSettings::kPaperSizeDefined);
|
aPrintSettings->SetPaperSizeType(nsIPrintSettings::kPaperSizeDefined);
|
||||||
aPrintSettings->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeInches);
|
aPrintSettings->SetPaperSizeUnit(paper.IsMetric() ?
|
||||||
aPrintSettings->SetPaperWidth(PSPaperSizeRec_FullPaperWidth(default_paper));
|
(int)nsIPrintSettings::kPaperSizeMillimeters :
|
||||||
aPrintSettings->SetPaperHeight(PSPaperSizeRec_FullPaperHeight(default_paper));
|
(int)nsIPrintSettings::kPaperSizeInches);
|
||||||
aPrintSettings->SetPaperName(NS_ConvertUTF8toUCS2(default_paper->name).get());
|
aPrintSettings->SetPaperWidth(paper.Width_mm());
|
||||||
|
aPrintSettings->SetPaperHeight(paper.Height_mm());
|
||||||
|
aPrintSettings->SetPaperName(NS_ConvertASCIItoUCS2(paper.Name()).get());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DO_PR_DEBUG_LOG(("Unknown paper size '%s' given.\n", papername.get()));
|
DO_PR_DEBUG_LOG(("Unknown paper size '%s' given.\n", papername.get()));
|
||||||
}
|
}
|
||||||
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
#ifdef SET_PRINTER_FEATURES_VIA_PREFS
|
||||||
for( i = 0 ; postscript_module_paper_sizes[i].name != nsnull ; i++ )
|
paper.First();
|
||||||
|
int count = 0;
|
||||||
|
while (!paper.AtEnd())
|
||||||
{
|
{
|
||||||
const PSPaperSizeRec *curr = &postscript_module_paper_sizes[i];
|
printerFeatures.SetPaperRecord(count++, paper.Name(),
|
||||||
#define CONVERT_INCH_TO_MILLIMETERS(inch) ((inch) * 25.4)
|
(int)paper.Width_mm(), (int)paper.Height_mm(), !paper.IsMetric());
|
||||||
double total_width = CONVERT_INCH_TO_MILLIMETERS(PSPaperSizeRec_FullPaperWidth(curr)),
|
paper.Next();
|
||||||
total_height = CONVERT_INCH_TO_MILLIMETERS(PSPaperSizeRec_FullPaperHeight(curr));
|
|
||||||
|
|
||||||
printerFeatures.SetPaperRecord(i, curr->name, PRInt32(total_width), PRInt32(total_height), PR_TRUE);
|
|
||||||
}
|
}
|
||||||
printerFeatures.SetNumPaperSizeRecords(i);
|
printerFeatures.SetNumPaperSizeRecords(count);
|
||||||
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
#endif /* SET_PRINTER_FEATURES_VIA_PREFS */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user