Bug 675709 - Export the constants for paper orientation. r=haik

This commit is contained in:
Hiroshi Hatake 2017-02-06 11:02:50 +09:00
Родитель 13522a9c3b
Коммит d8a07d33fc
4 изменённых файлов: 267 добавлений и 15 удалений

Просмотреть файл

@ -64,6 +64,19 @@ NS_IMETHODIMP nsDeviceContextSpecX::Init(nsIWidget *aWidget,
if (!settings)
return NS_ERROR_NO_INTERFACE;
bool toFile;
settings->GetPrintToFile(&toFile);
bool toPrinter = !toFile && !aIsPrintPreview;
if (!toPrinter) {
double width, height;
settings->GetEffectivePageSize(&width, &height);
width /= TWIPS_PER_POINT_FLOAT;
height /= TWIPS_PER_POINT_FLOAT;
settings->SetCocoaPaperSize(width, height);
}
mPrintSession = settings->GetPMPrintSession();
::PMRetain(mPrintSession);
mPageFormat = settings->GetPMPageFormat();

Просмотреть файл

@ -9,19 +9,6 @@
#include "nsPrintOptionsX.h"
#include "nsPrintSettingsX.h"
// The constants for paper orientation were renamed in 10.9. __MAC_10_9 is
// defined on OS X 10.9 and later. Although 10.8 and earlier are not supported
// at this time, this allows for building on those older OS versions. The
// values are consistent across OS versions so the rename does not affect
// runtime, just compilation.
#ifdef __MAC_10_9
#define NS_PAPER_ORIENTATION_PORTRAIT (NSPaperOrientationPortrait)
#define NS_PAPER_ORIENTATION_LANDSCAPE (NSPaperOrientationLandscape)
#else
#define NS_PAPER_ORIENTATION_PORTRAIT (NSPortraitOrientation)
#define NS_PAPER_ORIENTATION_LANDSCAPE (NSLandscapeOrientation)
#endif
using namespace mozilla::embedding;
nsPrintOptionsX::nsPrintOptionsX()

Просмотреть файл

@ -9,6 +9,19 @@
#include "nsPrintSettingsImpl.h"
#import <Cocoa/Cocoa.h>
// The constants for paper orientation were renamed in 10.9. __MAC_10_9 is
// defined on OS X 10.9 and later. Although 10.8 and earlier are not supported
// at this time, this allows for building on those older OS versions. The
// values are consistent across OS versions so the rename does not affect
// runtime, just compilation.
#ifdef __MAC_10_9
#define NS_PAPER_ORIENTATION_PORTRAIT (NSPaperOrientationPortrait)
#define NS_PAPER_ORIENTATION_LANDSCAPE (NSPaperOrientationLandscape)
#else
#define NS_PAPER_ORIENTATION_PORTRAIT (NSPortraitOrientation)
#define NS_PAPER_ORIENTATION_LANDSCAPE (NSLandscapeOrientation)
#endif
#define NS_PRINTSETTINGSX_IID \
{ 0x0DF2FDBD, 0x906D, 0x4726, \
{ 0x9E, 0x4D, 0xCF, 0xE0, 0x87, 0x8D, 0x70, 0x7C } }
@ -51,8 +64,22 @@ public:
void SetInchesScale(float aWidthScale, float aHeightScale);
void GetInchesScale(float *aWidthScale, float *aHeightScale);
NS_IMETHOD SetPaperSizeUnit(int16_t aPaperSizeUnit) override;
NS_IMETHOD SetScaling(double aScaling) override;
NS_IMETHOD SetToFileName(const char16_t * aToFileName) override;
NS_IMETHOD GetOrientation(int32_t *aOrientation) override;
NS_IMETHOD SetOrientation(int32_t aOrientation) override;
NS_IMETHOD SetUnwriteableMarginTop(double aUnwriteableMarginTop) override;
NS_IMETHOD SetUnwriteableMarginLeft(double aUnwriteableMarginLeft) override;
NS_IMETHOD SetUnwriteableMarginBottom(double aUnwriteableMarginBottom) override;
NS_IMETHOD SetUnwriteableMarginRight(double aUnwriteableMarginRight) override;
void SetAdjustedPaperSize(double aWidth, double aHeight);
void GetAdjustedPaperSize(double *aWidth, double *aHeight);
nsresult SetCocoaPaperSize(double aWidth, double aHeight);
protected:
virtual ~nsPrintSettingsX();
@ -63,6 +90,8 @@ protected:
nsresult _Clone(nsIPrintSettings **_retval) override;
nsresult _Assign(nsIPrintSettings *aPS) override;
int GetCocoaUnit(int16_t aGeckoUnit);
// The out param has a ref count of 1 on return so caller needs to PMRelase() when done.
OSStatus CreateDefaultPageFormat(PMPrintSession aSession, PMPageFormat& outFormat);
OSStatus CreateDefaultPrintSettings(PMPrintSession aSession, PMPrintSettings& outSettings);

Просмотреть файл

@ -254,8 +254,13 @@ NS_IMETHODIMP nsPrintSettingsX::SetPaperHeight(double aPaperHeight)
NS_IMETHODIMP
nsPrintSettingsX::GetEffectivePageSize(double *aWidth, double *aHeight)
{
*aWidth = NS_INCHES_TO_TWIPS(mAdjustedPaperWidth / mWidthScale);
*aHeight = NS_INCHES_TO_TWIPS(mAdjustedPaperHeight / mHeightScale);
if (kPaperSizeInches == GetCocoaUnit(mPaperSizeUnit)) {
*aWidth = NS_INCHES_TO_TWIPS(mAdjustedPaperWidth / mWidthScale);
*aHeight = NS_INCHES_TO_TWIPS(mAdjustedPaperHeight / mHeightScale);
} else {
*aWidth = NS_MILLIMETERS_TO_TWIPS(mAdjustedPaperWidth / mWidthScale);
*aHeight = NS_MILLIMETERS_TO_TWIPS(mAdjustedPaperHeight / mHeightScale);
}
return NS_OK;
}
@ -270,3 +275,221 @@ void nsPrintSettingsX::GetAdjustedPaperSize(double *aWidth, double *aHeight)
*aWidth = mAdjustedPaperWidth;
*aHeight = mAdjustedPaperHeight;
}
NS_IMETHODIMP
nsPrintSettingsX::SetPaperSizeUnit(int16_t aPaperSizeUnit)
{
mPaperSizeUnit = aPaperSizeUnit;
return NS_OK;
}
NS_IMETHODIMP
nsPrintSettingsX::SetScaling(double aScaling)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
[printInfoDict setObject: [NSNumber numberWithFloat: aScaling]
forKey: NSPrintScalingFactor];
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::SetToFileName(const char16_t *aToFileName)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
nsString filename = nsDependentString(aToFileName);
NSURL* jobSavingURL =
[NSURL fileURLWithPath: nsCocoaUtils::ToNSString(filename)];
if (jobSavingURL) {
[printInfoDict setObject: NSPrintSaveJob forKey: NSPrintJobDisposition];
[printInfoDict setObject: jobSavingURL forKey: NSPrintJobSavingURL];
}
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::GetOrientation(int32_t *aOrientation)
{
if ([mPrintInfo orientation] == NS_PAPER_ORIENTATION_PORTRAIT) {
*aOrientation = nsIPrintSettings::kPortraitOrientation;
} else {
*aOrientation = nsIPrintSettings::kLandscapeOrientation;
}
return NS_OK;
}
NS_IMETHODIMP
nsPrintSettingsX::SetOrientation(int32_t aOrientation)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
if (aOrientation == nsIPrintSettings::kPortraitOrientation) {
[printInfoDict setObject: [NSNumber numberWithInt: NS_PAPER_ORIENTATION_PORTRAIT]
forKey: NSPrintOrientation];
} else {
[printInfoDict setObject: [NSNumber numberWithInt: NS_PAPER_ORIENTATION_LANDSCAPE]
forKey: NSPrintOrientation];
}
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::SetUnwriteableMarginTop(double aUnwriteableMarginTop)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop);
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
[printInfoDict setObject : [NSNumber numberWithDouble: aUnwriteableMarginTop]
forKey : NSPrintTopMargin];
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft);
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
[printInfoDict setObject : [NSNumber numberWithDouble: aUnwriteableMarginLeft]
forKey : NSPrintLeftMargin];
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom);
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
[printInfoDict setObject : [NSNumber numberWithDouble: aUnwriteableMarginBottom]
forKey : NSPrintBottomMargin];
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
NS_IMETHODIMP
nsPrintSettingsX::SetUnwriteableMarginRight(double aUnwriteableMarginRight)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight);
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
[printInfoDict setObject : [NSNumber numberWithDouble: aUnwriteableMarginRight]
forKey : NSPrintRightMargin];
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}
int
nsPrintSettingsX::GetCocoaUnit(int16_t aGeckoUnit)
{
if (aGeckoUnit == kPaperSizeMillimeters)
return kPaperSizeMillimeters;
else
return kPaperSizeInches;
}
nsresult nsPrintSettingsX::SetCocoaPaperSize(double aWidth, double aHeight)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
NSSize paperSize;
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
if ([mPrintInfo orientation] == NS_PAPER_ORIENTATION_PORTRAIT) {
// switch widths and heights
paperSize = NSMakeSize(aWidth, aHeight);
[printInfoDict setObject: [NSValue valueWithSize: paperSize]
forKey: NSPrintPaperSize];
} else {
paperSize = NSMakeSize(aHeight, aWidth);
[printInfoDict setObject: [NSValue valueWithSize: paperSize]
forKey: NSPrintPaperSize];
}
NSPrintInfo* newPrintInfo =
[[NSPrintInfo alloc] initWithDictionary: printInfoDict];
if (NS_WARN_IF(!newPrintInfo)) {
return NS_ERROR_OUT_OF_MEMORY;
}
SetCocoaPrintInfo(newPrintInfo);
[newPrintInfo release];
return NS_OK;
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
}