Author: laplace Date: 2010-10-25 16:46:26 +0200 (Mon, 25 Oct 2010) New Revision: 39142 Changeset: http://dev.haiku-os.org/changeset/39142 Modified: haiku/trunk/headers/libs/print/libprint/JobData.h haiku/trunk/src/libs/print/libprint/JobData.cpp haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp Log: * Store resolution ID in libprint specific field in JobData; as the pair of x/y resolutions might not be unique in all supported Gutenprint printer models Modified: haiku/trunk/headers/libs/print/libprint/JobData.h =================================================================== --- haiku/trunk/headers/libs/print/libprint/JobData.h 2010-10-25 14:21:09 UTC (rev 39141) +++ haiku/trunk/headers/libs/print/libprint/JobData.h 2010-10-25 14:46:26 UTC (rev 39142) @@ -226,6 +226,7 @@ private: bool fShowPreview; Paper fPaper; + int32 fResolutionID; int32 fXRes; int32 fYRes; Orientation fOrientation; @@ -271,6 +272,9 @@ Paper getPaper() const { return fPaper; } void setPaper(Paper paper) { fPaper = paper; } + int32 getResolutionID() const { return fResolutionID; } + void setResolutionID(int32 resolution) { fResolutionID = resolution; } + int32 getXres() const { return fXRes; } void setXres(int32 xres) { fXRes = xres; } Modified: haiku/trunk/src/libs/print/libprint/JobData.cpp =================================================================== --- haiku/trunk/src/libs/print/libprint/JobData.cpp 2010-10-25 14:21:09 UTC (rev 39141) +++ haiku/trunk/src/libs/print/libprint/JobData.cpp 2010-10-25 14:46:26 UTC (rev 39142) @@ -38,6 +38,7 @@ static const char* kJDMarginUnit = "JJJJ_margin_unit"; static const char* kJDPhysicalRect = "JJJJ_physical_rect"; static const char* kJDScaledPhysicalRect = "JJJJ_scaled_physical_rect"; +static const char* kJDResolution = "JJJJ_resolution"; JobData::JobData(BMessage *msg, const PrinterCap *cap, Settings settings) { @@ -52,6 +53,7 @@ { fShowPreview = job_data.fShowPreview; fPaper = job_data.fPaper; + fResolutionID = job_data.fResolutionID; fXRes = job_data.fXRes; fYRes = job_data.fYRes; fOrientation = job_data.fOrientation; @@ -86,6 +88,7 @@ { fShowPreview = job_data.fShowPreview; fPaper = job_data.fPaper; + fResolutionID = job_data.fResolutionID; fXRes = job_data.fXRes; fYRes = job_data.fYRes; fOrientation = job_data.fOrientation; @@ -137,6 +140,17 @@ } else fPaper = kA4; + if (msg->HasInt32(kJDResolution)) { + int32 resolution; + msg->FindInt32(kJDResolution, &resolution); + fResolutionID = resolution; + } else if (cap->isSupport(PrinterCap::kResolution)) { + fResolutionID = cap->getDefaultCap(PrinterCap::kResolution)->ID(); + } else { + // should not reach here! + fResolutionID = 0; + } + if (msg->HasInt64(kJDXRes)) { int64 xres64; msg->FindInt64(kJDXRes, &xres64); @@ -311,6 +325,9 @@ msg->RemoveName(kJDPaper); msg->AddInt32(kJDPaper, fPaper); + msg->RemoveName(kJDResolution); + msg->AddInt32(kJDResolution, fResolutionID); + msg->RemoveName(kJDXRes); msg->AddInt64(kJDXRes, fXRes); Modified: haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp =================================================================== --- haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp 2010-10-25 14:21:09 UTC (rev 39141) +++ haiku/trunk/src/libs/print/libprint/PageSetupDlg.cpp 2010-10-25 14:46:26 UTC (rev 39142) @@ -14,6 +14,7 @@ #include <Bitmap.h> #include <Box.h> #include <Button.h> +#include <Debug.h> #include <Font.h> #include <GridView.h> #include <GroupLayout.h> @@ -266,18 +267,14 @@ BRect physical_rect = paperCap->fPhysicalRect; fJobData->setPaper(paperCap->fPaper); - int count; - - count = fPrinterCap->countCap(PrinterCap::kResolution); - ResolutionCap **resolution_cap = (ResolutionCap **)fPrinterCap->enumCap(PrinterCap::kResolution); - const char *resolution_label = fResolution->FindMarked()->Label(); - while (count--) { - if (!strcmp((*resolution_cap)->fLabel.c_str(), resolution_label)) { - fJobData->setXres((*resolution_cap)->fXResolution); - fJobData->setYres((*resolution_cap)->fYResolution); - break; - } - resolution_cap++; + const char *resolutionLabel = fResolution->FindMarked()->Label(); + const ResolutionCap* resolution = static_cast<const ResolutionCap*>( + fPrinterCap->findCap(PrinterCap::kResolution, resolutionLabel)); + ASSERT(resolution != NULL); + if (resolution != NULL) { + fJobData->setXres(resolution->fXResolution); + fJobData->setYres(resolution->fYResolution); + fJobData->setResolutionID(resolution->ID()); } // rotate paper and physical rectangle if landscape orientation