Beispiel #1
0
/*
 * XpGetResolution returns an integer representing the printer resolution
 * in dots-per-inch for the specified print context.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
int
XpGetResolution(
		XpContextPtr pContext)
{
    unsigned long resolution;

    resolution = XpGetCardAttr(pContext, XPPageAttr,
			       xpoid_att_default_printer_resolution,
			       (XpOidCardList*)NULL);
    if(0 == resolution)
	resolution = XpGetCardAttr(pContext, XPDocAttr,
				   xpoid_att_default_printer_resolution,
				   (XpOidCardList*)NULL);
    if(0 == resolution)
    {
	XpOidCardList* resolutions_supported;
	/*
	 * default-printer-resolution not specified; default to 1st entry
	 * in printer-resolutions-supported.
	 */
	resolutions_supported =
	    XpGetCardListAttr(pContext, XPPrinterAttr,
			      xpoid_att_printer_resolutions_supported,
			      (XpOidCardList*)NULL);
	resolution = XpOidCardListGetCard(resolutions_supported, 0);
	XpOidCardListDelete(resolutions_supported);
    }
    return (int)resolution;
}
Beispiel #2
0
void
XpValidateCardListAttr(XpContextPtr pContext,
		       XPAttributes pool,
		       XpOid oid,
		       const XpOidCardList* valid_cards,
		       const XpOidCardList* default_cards)
{
    XpOidCardList* list = XpGetCardListAttr(pContext, pool, oid, valid_cards);
    if(XpOidCardListCount(list) == 0 && (XpOidCardList*)NULL != default_cards)
	XpPutCardListAttr(pContext, pool, oid, default_cards);
    else
	XpPutCardListAttr(pContext, pool, oid, list);
    XpOidCardListDelete(list);
}
Beispiel #3
0
static void
XpValidateDocOrPagePool(XpContextPtr pContext,
			XPAttributes pool, /* XPDocAttr or XPPageAttr */
			const XpOidList* attrs_supported,
			const XpValidatePoolsRec* vpr)
{
    /*
     * content-orientation
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_content_orientation))
    {
	XpOidList* content_orientations_supported;
	content_orientations_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_content_orientations_supported,
			  vpr->valid_content_orientations_supported);
	XpValidateOidAttr(pContext, pool, xpoid_att_content_orientation,
			  content_orientations_supported, xpoid_none);
	XpOidListDelete(content_orientations_supported);
    }
    /*
     * copy-count
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_copy_count))
	XpValidateCardAttr(pContext, pool, xpoid_att_copy_count,
			   (const XpOidCardList*)NULL, 0);
    /*
     * default-printer-resolution
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_printer_resolution))
    {
	XpOidCardList* printer_resolutions_supported;
	printer_resolutions_supported =
	    XpGetCardListAttr(pContext, XPPrinterAttr,
			      xpoid_att_printer_resolutions_supported,
			      vpr->valid_printer_resolutions_supported);
	XpValidateCardAttr(pContext, pool,
			   xpoid_att_default_printer_resolution,
			   printer_resolutions_supported, 0);
	XpOidCardListDelete(printer_resolutions_supported);
    }
    /*
     * default-input-tray
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_input_tray))
    {
	XpOidTrayMediumList* input_trays_medium;
	const char* value_in;
	XpOid value_tray;
	
	input_trays_medium =
	    XpGetTrayMediumListAttr(pContext, XPPrinterAttr,
				    xpoid_att_input_trays_medium,
				    (const XpOidList*)NULL,
				    (const XpOidMediumSS*)NULL);
	value_in =
	    XpGetStringAttr(pContext, pool, xpoid_att_default_input_tray);
	value_tray = XpOidFromString(value_in);
	if(!XpOidTrayMediumListHasTray(input_trays_medium, value_tray))
	    value_tray = xpoid_none;
	XpPutOidAttr(pContext, pool, xpoid_att_default_input_tray, value_tray);
	XpOidTrayMediumListDelete(input_trays_medium);
    }
    /*
     * default-medium
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_medium))
    {
	XpOidMediumSS* msss;
	const char* value_in;
	XpOid value_size;
	
	msss = XpGetMediumSSAttr(pContext, XPPrinterAttr,
				 xpoid_att_medium_source_sizes_supported,
				 (const XpOidList*)NULL,
				 (const XpOidList*)NULL);
	value_in = XpGetStringAttr(pContext, pool, xpoid_att_default_medium);
	value_size = XpOidFromString(value_in);
	if(!XpOidMediumSSHasSize(msss, value_size))
	    value_size = xpoid_none;
	XpPutOidAttr(pContext, pool, xpoid_att_default_medium, value_size);
	XpOidMediumSSDelete(msss);
    }
    /*
     * document-format
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_document_format))
    {
	XpOidDocFmtList* document_formats_supported;
	const char* value_in;
	XpOidDocFmt* document_format;
	const char* value_out;
	
	document_formats_supported =
	    XpGetDocFmtListAttr(pContext, XPPrinterAttr,
				xpoid_att_document_formats_supported,
				vpr->valid_document_formats_supported);
	value_in = XpGetStringAttr(pContext, pool, xpoid_att_document_format);
	document_format = XpOidDocFmtNew(value_in);
	if(XpOidDocFmtListHasFmt(document_formats_supported, document_format))
	    value_out = XpOidDocFmtString(document_format);
	else
	    value_out = XpOidDocFmtString(vpr->default_document_format);
	XpOidDocFmtListDelete(document_formats_supported);
	XpOidDocFmtDelete(document_format);
	XpPutStringAttr(pContext, pool, xpoid_att_document_format, value_out);
	XpOidFree(value_out);
    }
    /*
     * plex
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_plex))
    {
	XpOidList* plexes_supported;
	plexes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported,
			  vpr->valid_plexes_supported);
	XpValidateOidAttr(pContext, pool, xpoid_att_plex,
			  plexes_supported, xpoid_none);
	XpOidListDelete(plexes_supported);
    }
    /*
     * xp-listfonts-modes
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_xp_listfonts_modes))
    {
	XpOidList* xp_listfonts_modes_supported;
	xp_listfonts_modes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_xp_listfonts_modes_supported,
			  vpr->valid_xp_listfonts_modes_supported);
	XpValidateListAttr(pContext, pool, xpoid_att_xp_listfonts_modes,
			   xp_listfonts_modes_supported,
			   (const XpOidList*)NULL);
	XpOidListDelete(xp_listfonts_modes_supported);
    }
}