Commit 6124a027 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

CUPS uses the ppd file to store the default paper size, so we'll read

it from here. If the ppd doesn't contain an explicit resolution then default to 300dpi.
parent 9747a103
......@@ -588,6 +588,10 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
goto closeprinter;
}
/* Some gimp-print ppd files don't contain a DefaultResolution line
set it to 300 if it's not specified */
if(pi->ppd->DefaultResolution == 0)
pi->ppd->DefaultResolution = 300;
if(using_default_devmode) {
DWORD papersize;
......@@ -604,6 +608,13 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name)
REG_BINARY, (LPBYTE)pi->Devmode, sizeof(DefaultDevmode) );
}
if(pi->ppd->DefaultPageSize) { /* We'll let the ppd override the devmode */
PSDRV_DEVMODEA dm;
memset(&dm, 0, sizeof(dm));
dm.dmPublic.dmFields = DM_PAPERSIZE;
dm.dmPublic.u1.s1.dmPaperSize = pi->ppd->DefaultPageSize->WinPage;
PSDRV_MergeDevmodes(pi->Devmode, &dm, pi);
}
/*
* This is a hack. The default paper size should be read in as part of
......
......@@ -355,9 +355,13 @@ static BOOL PSDRV_PPDGetSymbolValue(char *pos, PPDTuple *tuple)
*/
static BOOL PSDRV_PPDGetNextTuple(FILE *fp, PPDTuple *tuple)
{
char line[257], *opt = NULL, *cp, *trans, *endkey;
BOOL gotoption = TRUE;
char line[257], *opt, *cp, *trans, *endkey;
BOOL gotoption;
start:
gotoption = TRUE;
opt = NULL;
memset(tuple, 0, sizeof(*tuple));
do {
......@@ -369,7 +373,7 @@ static BOOL PSDRV_PPDGetNextTuple(FILE *fp, PPDTuple *tuple)
if(line[strlen(line)-1] != '\n') {
ERR("Line too long.\n");
return FALSE;
goto start;
}
for(cp = line; !isspace(*cp) && *cp != ':'; cp++)
......@@ -398,7 +402,8 @@ static BOOL PSDRV_PPDGetNextTuple(FILE *fp, PPDTuple *tuple)
cp = strpbrk(opt, ":/");
if(!cp) {
ERR("Error in line '%s'?\n", line);
return FALSE;
HeapFree(GetProcessHeap(), 0, tuple->key);
goto start;
}
tuple->option = HeapAlloc( PSDRV_Heap, 0, cp - opt + 1 );
if(!tuple->option) return FALSE;
......@@ -410,7 +415,9 @@ static BOOL PSDRV_PPDGetNextTuple(FILE *fp, PPDTuple *tuple)
cp = strchr(trans, ':');
if(!cp) {
ERR("Error in line '%s'?\n", line);
return FALSE;
HeapFree(GetProcessHeap(), 0, tuple->option);
HeapFree(GetProcessHeap(), 0, tuple->key);
goto start;
}
buf = HeapAlloc( PSDRV_Heap, 0, cp - trans + 1 );
if(!buf) return FALSE;
......@@ -547,6 +554,7 @@ PPD *PSDRV_ParsePPD(char *fname)
FILE *fp;
PPD *ppd;
PPDTuple tuple;
char *default_pagesize = NULL;
TRACE("file '%s'\n", fname);
......@@ -675,7 +683,16 @@ PPD *PSDRV_ParsePPD(char *fname)
}
}
else if(!strcmp("*ImageableArea", tuple.key)) {
else if(!strcmp("*DefaultPageSize", tuple.key)) {
if(default_pagesize) {
WARN("Already set default pagesize\n");
} else {
default_pagesize = tuple.value;
tuple.value = NULL;
}
}
else if(!strcmp("*ImageableArea", tuple.key)) {
PAGESIZE *page;
page = PSDRV_PPDGetPageSizeInfo(ppd, tuple.option);
......@@ -804,6 +821,23 @@ PPD *PSDRV_ParsePPD(char *fname)
}
ppd->DefaultPageSize = NULL;
if(default_pagesize) {
PAGESIZE *page;
for(page = ppd->PageSizes; page; page = page->next) {
if(!strcmp(page->Name, default_pagesize)) {
ppd->DefaultPageSize = page;
TRACE("DefaultPageSize: %s\n", page->Name);
break;
}
}
HeapFree(PSDRV_Heap, 0, default_pagesize);
}
if(!ppd->DefaultPageSize) {
ppd->DefaultPageSize = ppd->PageSizes;
TRACE("Setting DefaultPageSize to first in list\n");
}
{
FONTNAME *fn;
PAGESIZE *page;
......
......@@ -184,6 +184,7 @@ typedef struct {
char *DefaultFont;
FONTNAME *InstalledFonts; /* ptr to a list of FontNames */
PAGESIZE *PageSizes;
PAGESIZE *DefaultPageSize;
OPTION *InstalledOptions;
CONSTRAINT *Constraints;
INPUTSLOT *InputSlots;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment