diff --git a/widget/public/nsIPrintSettings.idl b/widget/public/nsIPrintSettings.idl index 9369b397e7e3..f5e3d546e13a 100644 --- a/widget/public/nsIPrintSettings.idl +++ b/widget/public/nsIPrintSettings.idl @@ -94,6 +94,8 @@ interface nsIPrintSettings : nsISupports const unsigned long kInitSaveMargins = 0x01000000; const unsigned long kInitSaveNativeData = 0x02000000; const unsigned long kInitSavePlexName = 0x04000000; + const unsigned long kInitSaveShrinkToFit = 0x08000000; + const unsigned long kInitSaveScaling = 0x10000000; const unsigned long kInitSaveAll = 0xFFFFFFFF; /* Print Option Flags for Bit Field*/ diff --git a/widget/src/xpwidgets/nsPrintOptionsImpl.cpp b/widget/src/xpwidgets/nsPrintOptionsImpl.cpp index 6d9394949114..6fdabdf3c7fc 100644 --- a/widget/src/xpwidgets/nsPrintOptionsImpl.cpp +++ b/widget/src/xpwidgets/nsPrintOptionsImpl.cpp @@ -62,6 +62,7 @@ #include "nsISimpleEnumerator.h" #include "nsISupportsPrimitives.h" #include "nsGfxCIID.h" +#include "stdlib.h" static NS_DEFINE_IID(kCPrinterEnumerator, NS_PRINTER_ENUMERATOR_CID); @@ -101,8 +102,10 @@ const char kPrinterName[] = "print_printer"; const char kPrintToFile[] = "print_to_file"; const char kPrintToFileName[] = "print_to_filename"; const char kPrintPageDelay[] = "print_pagedelay"; -const char kPrintBGColors[] = "print_bgcolor"; +const char kPrintBGColors[] = "print_bgcolor"; const char kPrintBGImages[] = "print_bgimages"; +const char kPrintShrinkToFit[] = "print_shrink_to_fit"; +const char kPrintScaling[] = "print_scaling"; const char kJustLeft[] = "left"; const char kJustCenter[] = "center"; @@ -578,9 +581,21 @@ nsPrintOptions::ReadPrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUi } } + if (aFlags & nsIPrintSettings::kInitSaveShrinkToFit) { + if (NS_SUCCEEDED(mPrefBranch->GetBoolPref(GetPrefName(kPrintShrinkToFit, aPrefName), &b))) { + aPS->SetShrinkToFit(b); + DUMP_BOOL(kReadStr, kPrintShrinkToFit, b); + } + } + + if (aFlags & nsIPrintSettings::kInitSaveScaling) { + if (NS_SUCCEEDED(ReadPrefDouble(GetPrefName(kPrintScaling, aPrefName), dbl))) { + aPS->SetScaling(dbl); + DUMP_DBL(kReadStr, kPrintScaling, dbl); + } + } + // Not Reading In: - // Scaling - // ShrinkToFit // Number of Copies return NS_OK; @@ -798,9 +813,21 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsString& aPrefName, PRU } } + if (aFlags & nsIPrintSettings::kInitSaveShrinkToFit) { + if (NS_SUCCEEDED(aPS->GetShrinkToFit(&b))) { + DUMP_BOOL(kWriteStr, kPrintShrinkToFit, b); + mPrefBranch->SetBoolPref(GetPrefName(kPrintShrinkToFit, aPrefName), b); + } + } + + if (aFlags & nsIPrintSettings::kInitSaveScaling) { + if (NS_SUCCEEDED(aPS->GetScaling(&dbl))) { + DUMP_DBL(kWriteStr, kPrintScaling, dbl); + WritePrefDouble(GetPrefName(kPrintScaling, aPrefName), dbl); + } + } + // Not Writing Out: - // Scaling - // ShrinkToFit // Number of Copies return NS_OK; @@ -1092,12 +1119,10 @@ nsresult nsPrintOptions::ReadPrefDouble(const char * aPrefId, double& aVal) { NS_ENSURE_STATE(mPrefBranch); - char * str = nsnull; + char * str; nsresult rv = mPrefBranch->GetCharPref(aPrefId, &str); if (NS_SUCCEEDED(rv) && str) { - float f; - PR_sscanf(str, "%f", &f); - aVal = double(f); + aVal = atof(str); nsMemory::Free(str); } return rv; @@ -1248,6 +1273,7 @@ Tester::Tester() ps->SetPrintToFile(PR_TRUE); ps->SetToFileName(NS_ConvertUTF8toUCS2("File Name").get()); ps->SetPrintPageDelay(1000); + ps->SetShrinkToFit(PR_TRUE); struct SettingsType { const char* mName; @@ -1263,6 +1289,7 @@ Tester::Tester() {kPrintFooterStrRight, nsIPrintSettings::kInitSaveFooterRight}, {kPrintBGColors, nsIPrintSettings::kInitSaveBGColors}, {kPrintBGImages, nsIPrintSettings::kInitSaveBGImages}, + {kPrintShrinkToFit, nsIPrintSettings::kInitSaveShrinkToFit}, {kPrintPaperSize, nsIPrintSettings::kInitSavePaperSize}, {kPrintPaperName, nsIPrintSettings::kInitSavePaperName}, {kPrintPlexName, nsIPrintSettings::kInitSavePlexName},