sane.ds: Added support for ICAP_UNITS.
diff --git a/dlls/sane.ds/capability.c b/dlls/sane.ds/capability.c index bbd0590..f8a300c 100644 --- a/dlls/sane.ds/capability.c +++ b/dlls/sane.ds/capability.c
@@ -154,7 +154,7 @@ { TW_ARRAY *a; static const UINT16 supported_caps[] = { CAP_SUPPORTEDCAPS, CAP_XFERCOUNT, CAP_UICONTROLLABLE, - ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR, + ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_UNITS, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR, ICAP_XRESOLUTION, ICAP_YRESOLUTION }; pCapability->hContainer = GlobalAlloc (0, FIELD_OFFSET( TW_ARRAY, ItemList[sizeof(supported_caps)] )); @@ -311,6 +311,49 @@ return twCC; } +/* ICAP_UNITS */ +static TW_UINT16 SANE_ICAPUnits (pTW_CAPABILITY pCapability, TW_UINT16 action) +{ + TW_UINT32 val; + TW_UINT16 twCC = TWCC_BADCAP; + + TRACE("ICAP_UNITS\n"); + + switch (action) + { + case MSG_QUERYSUPPORT: + twCC = set_onevalue(pCapability, TWTY_INT32, + TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET ); + break; + + case MSG_GET: + twCC = set_onevalue(pCapability, TWTY_UINT16, TWUN_INCHES); + break; + + case MSG_SET: + twCC = msg_set(pCapability, &val); + if (twCC == TWCC_SUCCESS) + { + if (val != TWUN_INCHES) + { + ERR("Sane supports only SANE_UNIT_DPI\n"); + twCC = TWCC_BADVALUE; + } + } + break; + + case MSG_GETDEFAULT: + case MSG_RESET: + /* .. fall through intentional .. */ + + case MSG_GETCURRENT: + twCC = set_onevalue(pCapability, TWTY_UINT16, TWUN_INCHES); + break; + } + + return twCC; +} + /* ICAP_BITDEPTH */ static TW_UINT16 SANE_ICAPBitDepth(pTW_CAPABILITY pCapability, TW_UINT16 action) { @@ -581,6 +624,10 @@ twCC = SANE_ICAPPixelType (pCapability, action); break; + case ICAP_UNITS: + twCC = SANE_ICAPUnits (pCapability, action); + break; + case ICAP_BITDEPTH: twCC = SANE_ICAPBitDepth(pCapability, action); break;
diff --git a/dlls/twain_32/tests/dsm.c b/dlls/twain_32/tests/dsm.c index 9e7dd8d..fb438ab 100644 --- a/dlls/twain_32/tests/dsm.c +++ b/dlls/twain_32/tests/dsm.c
@@ -109,6 +109,9 @@ TW_ONEVALUE *onev = (TW_ONEVALUE *) p; ok(onev->Item == orig_value || !(actual_support & TWQC_GETCURRENT), "MSG_GET of 0x%x returned 0x%x, expecting 0x%x\n", pCapability->Cap, onev->Item, orig_value); + trace("MSG_GET of 0x%x returned val 0x%x, type %d\n", pCapability->Cap, onev->Item, onev->ItemType); + if (suggested_set_value) + *suggested_set_value = onev->Item; } else if (pCapability->ConType == TWON_ENUMERATION) { @@ -473,8 +476,10 @@ if (capabilities[ICAP_PIXELTYPE]) test_onevalue_cap(appid, source, ICAP_PIXELTYPE, TWTY_UINT16, TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET); - todo_wine ok(capabilities[ICAP_UNITS], "ICAP_UNITS not supported\n"); + if (capabilities[ICAP_UNITS]) + test_onevalue_cap(appid, source, ICAP_UNITS, TWTY_UINT16, + TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET); ok(capabilities[ICAP_XFERMECH], "ICAP_XFERMECH not supported\n"); if (capabilities[ICAP_XFERMECH]) test_onevalue_cap(appid, source, ICAP_XFERMECH, TWTY_UINT16,