16,7 → 16,6 |
|
#include <qstringlist.h> |
#include "util.h" |
#include "scribus.h" |
|
QStringList PrinterUtil::getPrinterNames() |
{ |
73,9 → 72,9 |
return printerNames; |
} |
|
#if defined(_WIN32) |
bool PrinterUtil::getDefaultSettings( QString printerName, QByteArray& devModeA ) |
bool PrinterUtil::getDefaultSettings( QString printerName ) |
{ |
#ifdef _WIN32 |
bool done; |
uint size; |
QCString printer; |
87,20 → 86,22 |
if(!done) |
return false; |
// Get size of DEVMODE structure (public + private data) |
size = DocumentProperties( ScMW->winId(), handle, printer.data(), NULL, NULL, 0); |
size = DocumentProperties( winId(), handle, printer.data(), NULL, NULL, 0); |
// Allocate the memory needed by the DEVMODE structure |
devModeA.resize( size ); |
DevMode.resize( size ); |
// Retrieve printer default settings |
result = DocumentProperties( ScMW->winId(), handle, printer.data(), (DEVMODE*) devModeA.data(), NULL, DM_OUT_BUFFER); |
result = DocumentProperties( winId(), handle, printer.data(), (DEVMODE*) DevMode.data(), NULL, DM_OUT_BUFFER); |
// Free the printer handle |
ClosePrinter( handle ); |
return ( result == IDOK ); |
#else |
return true; |
#endif |
} |
#endif |
|
#if defined(_WIN32) |
bool PrinterUtil::initDeviceSettings( QString printerName, QByteArray& devModeA ) |
bool PrinterUtil::initDeviceSettings( QString printerName ) |
{ |
#ifdef _WIN32 |
bool done; |
uint size; |
QCString printer; |
112,30 → 113,32 |
if(!done) |
return false; |
// Get size of DEVMODE structure (public + private data) |
size = DocumentProperties( ScMW->winId(), handle, printer.data(), NULL, NULL, 0); |
size = DocumentProperties( winId(), handle, printer.data(), NULL, NULL, 0); |
// Compare size with DevMode structure size |
if( devModeA.size() == size ) |
if( DevMode.size() == size ) |
{ |
// Merge printer settings |
result = DocumentProperties( ScMW->winId(), handle, printer.data(), (DEVMODE*) devModeA.data(), (DEVMODE*) devModeA.data(), DM_IN_BUFFER | DM_OUT_BUFFER); |
result = DocumentProperties( winId(), handle, printer.data(), (DEVMODE*) DevMode.data(), (DEVMODE*) DevMode.data(), DM_IN_BUFFER | DM_OUT_BUFFER); |
} |
else |
{ |
// Retrieve default settings |
devModeA.resize( size ); |
result = DocumentProperties( ScMW->winId(), handle, printer.data(), (DEVMODE*) devModeA.data(), NULL, DM_OUT_BUFFER); |
DevMode.resize( size ); |
result = DocumentProperties( winId(), handle, printer.data(), (DEVMODE*) DevMode.data(), NULL, DM_OUT_BUFFER); |
} |
done = ( result == IDOK); |
// Free the printer handle |
ClosePrinter( handle ); |
return done; |
#else |
return true; |
#endif |
} |
#endif |
|
bool PrinterUtil::getPrinterMarginValues(const QString& printerName, const QString& pageSize, double& ptsTopMargin, double& ptsBottomMargin, double& ptsLeftMargin, double& ptsRightMargin) |
{ |
bool retVal=false; |
#if defined(HAVE_CUPS) |
#if defined(HAVE_CUPS) |
const char *filename; // tmp PPD filename |
filename=cupsGetPPD(printerName); |
if (filename!=NULL) |
158,61 → 161,7 |
ppdClose(ppd); |
} |
} |
#elif defined(_WIN32) |
DWORD nPaper; |
DWORD nPaperNames; |
QCString printer; |
typedef char char64[64]; |
printer = printerName.local8Bit(); |
nPaper = DeviceCapabilities( printerName.data(), NULL, DC_PAPERS, NULL, NULL ); |
nPaperNames = DeviceCapabilities( printerName.data(), NULL, DC_PAPERNAMES, NULL, NULL ); |
if ( (nPaper > 0) && (nPaperNames > 0) && (nPaper == nPaperNames) ) |
{ |
int paperIndex = -1; |
DWORD *papers = new DWORD[nPaper]; |
char64 *paperNames = new char64[nPaperNames]; |
DWORD s1 = DeviceCapabilities( printerName.data(), NULL, DC_PAPERS, (LPSTR) papers, NULL ); |
DWORD s2 = DeviceCapabilities( printerName.data(), NULL, DC_PAPERNAMES, (LPSTR) paperNames, NULL ); |
for ( int i = 0; i < nPaperNames; i++ ) |
{ |
if ( pageSize == QString(paperNames[i]) ) |
{ |
paperIndex = i; |
break; |
} |
} |
if ( paperIndex >= 0 ) |
{ |
HANDLE handle = NULL; |
if( OpenPrinter( printer.data(), &handle, NULL ) ) |
{ |
// Retrieve DEVMODE structure for selected device |
uint size = DocumentProperties( ScMW->winId(), handle, printer.data(), NULL, NULL, 0); |
QByteArray devModeA(size); |
DEVMODE* devMode = (DEVMODE*) devModeA.data(); |
DocumentProperties( ScMW->winId(), handle, printer.data(), devMode, NULL, DM_OUT_BUFFER); |
ClosePrinter( handle ); |
// Set paper size |
devMode->dmPaperSize = papers[paperIndex]; |
// Create device context |
HDC printerDC = CreateDC( NULL, printer.data(), NULL, devMode ); |
if( printerDC ) |
{ |
retVal = true; |
int logPixelsX = GetDeviceCaps( printerDC, LOGPIXELSX ); |
int logPixelsY = GetDeviceCaps( printerDC, LOGPIXELSY ); |
int physicalOffsetX = GetDeviceCaps( printerDC, PHYSICALOFFSETX ); |
int physicalOffsetY = GetDeviceCaps( printerDC, PHYSICALOFFSETY ); |
ptsLeftMargin = ptsRightMargin = ( physicalOffsetX / (double) logPixelsX * 72 ); |
ptsTopMargin = ptsBottomMargin = ( physicalOffsetY / (double) logPixelsY * 72 ); |
DeleteDC(printerDC); |
} |
} |
} |
delete[] papers; |
delete[] paperNames; |
} |
#endif |
#endif |
return retVal; |
} |
|