mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 07:27:12 +00:00
sane.ds: Add array of resolutions support.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55378
This commit is contained in:
parent
26e72a7580
commit
b43ba81e17
|
@ -143,27 +143,35 @@ static TW_UINT16 msg_get_range(pTW_CAPABILITY pCapability, TW_UINT16 type,
|
|||
return TWCC_SUCCESS;
|
||||
}
|
||||
|
||||
static TW_UINT16 TWAIN_GetSupportedCaps(pTW_CAPABILITY pCapability)
|
||||
static TW_UINT16 msg_get_array(pTW_CAPABILITY pCapability, TW_UINT16 type, const int *values, int value_count)
|
||||
{
|
||||
TW_ARRAY *a;
|
||||
static const UINT16 supported_caps[] = { CAP_SUPPORTEDCAPS, CAP_XFERCOUNT, CAP_UICONTROLLABLE,
|
||||
CAP_AUTOFEED, CAP_FEEDERENABLED,
|
||||
ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_UNITS, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR,
|
||||
ICAP_XRESOLUTION, ICAP_YRESOLUTION, ICAP_PHYSICALHEIGHT, ICAP_PHYSICALWIDTH, ICAP_SUPPORTEDSIZES };
|
||||
TW_UINT32 *p32;
|
||||
TW_UINT16 *p16;
|
||||
|
||||
pCapability->hContainer = GlobalAlloc (0, FIELD_OFFSET( TW_ARRAY, ItemList[sizeof(supported_caps)] ));
|
||||
pCapability->hContainer = 0;
|
||||
pCapability->ConType = TWON_ARRAY;
|
||||
|
||||
if (type == TWTY_INT16 || type == TWTY_UINT16)
|
||||
pCapability->hContainer = GlobalAlloc (0, FIELD_OFFSET( TW_ARRAY, ItemList[value_count * sizeof(TW_UINT16)]));
|
||||
else if (type == TWTY_INT32 || type == TWTY_UINT32)
|
||||
pCapability->hContainer = GlobalAlloc (0, FIELD_OFFSET( TW_ARRAY, ItemList[value_count * sizeof(TW_UINT32)]));
|
||||
|
||||
if (pCapability->hContainer)
|
||||
{
|
||||
UINT16 *u;
|
||||
TW_UINT32 i;
|
||||
a = GlobalLock (pCapability->hContainer);
|
||||
a->ItemType = TWTY_UINT16;
|
||||
a->NumItems = ARRAY_SIZE(supported_caps);
|
||||
u = (UINT16 *) a->ItemList;
|
||||
a->ItemType = type;
|
||||
a->NumItems = value_count;
|
||||
p16 = (TW_UINT16 *) a->ItemList;
|
||||
p32 = (TW_UINT32 *) a->ItemList;
|
||||
for (i = 0; i < a->NumItems; i++)
|
||||
u[i] = supported_caps[i];
|
||||
{
|
||||
if (type == TWTY_INT16 || type == TWTY_UINT16)
|
||||
p16[i] = values[i];
|
||||
else if (type == TWTY_INT32 || type == TWTY_UINT32)
|
||||
p32[i] = values[i];
|
||||
}
|
||||
GlobalUnlock (pCapability->hContainer);
|
||||
return TWCC_SUCCESS;
|
||||
}
|
||||
|
@ -171,6 +179,16 @@ static TW_UINT16 TWAIN_GetSupportedCaps(pTW_CAPABILITY pCapability)
|
|||
return TWCC_LOWMEMORY;
|
||||
}
|
||||
|
||||
static TW_UINT16 TWAIN_GetSupportedCaps(pTW_CAPABILITY pCapability)
|
||||
{
|
||||
static const int supported_caps[] = { CAP_SUPPORTEDCAPS, CAP_XFERCOUNT, CAP_UICONTROLLABLE,
|
||||
CAP_AUTOFEED, CAP_FEEDERENABLED,
|
||||
ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_UNITS, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR,
|
||||
ICAP_XRESOLUTION, ICAP_YRESOLUTION, ICAP_PHYSICALHEIGHT, ICAP_PHYSICALWIDTH, ICAP_SUPPORTEDSIZES };
|
||||
|
||||
return msg_get_array(pCapability, TWTY_UINT16, supported_caps, sizeof(supported_caps) / sizeof(supported_caps[0]));
|
||||
}
|
||||
|
||||
|
||||
/* ICAP_XFERMECH */
|
||||
static TW_UINT16 SANE_ICAPXferMech (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
||||
|
@ -518,7 +536,7 @@ static TW_UINT16 SANE_ICAPResolution (pTW_CAPABILITY pCapability, TW_UINT16 acti
|
|||
int current_resolution;
|
||||
TW_FIX32 *default_res;
|
||||
const char *best_option_name;
|
||||
int minval, maxval, quantval;
|
||||
struct option_descriptor opt;
|
||||
|
||||
TRACE("ICAP_%cRESOLUTION\n", cap == ICAP_XRESOLUTION ? 'X' : 'Y');
|
||||
|
||||
|
@ -565,10 +583,20 @@ static TW_UINT16 SANE_ICAPResolution (pTW_CAPABILITY pCapability, TW_UINT16 acti
|
|||
break;
|
||||
|
||||
case MSG_GET:
|
||||
twCC = sane_option_probe_resolution(best_option_name, &minval, &maxval, &quantval);
|
||||
twCC = sane_option_probe_resolution(best_option_name, &opt);
|
||||
if (twCC == TWCC_SUCCESS)
|
||||
twCC = msg_get_range(pCapability, TWTY_FIX32,
|
||||
minval, maxval, quantval == 0 ? 1 : quantval, default_res->Whole, current_resolution);
|
||||
{
|
||||
if (opt.constraint_type == CONSTRAINT_RANGE)
|
||||
twCC = msg_get_range(pCapability, TWTY_FIX32,
|
||||
opt.constraint.range.min, opt.constraint.range.max,
|
||||
opt.constraint.range.quant == 0 ? 1 : opt.constraint.range.quant,
|
||||
default_res->Whole, current_resolution);
|
||||
else if (opt.constraint_type == CONSTRAINT_WORD_LIST)
|
||||
twCC = msg_get_array(pCapability, TWTY_UINT32, &(opt.constraint.word_list[1]),
|
||||
opt.constraint.word_list[0]);
|
||||
else
|
||||
twCC = TWCC_CAPUNSUPPORTED;
|
||||
}
|
||||
break;
|
||||
|
||||
case MSG_SET:
|
||||
|
|
|
@ -107,18 +107,9 @@ TW_UINT16 sane_option_set_str(const char *option_name, char *val, BOOL *needs_re
|
|||
return rc;
|
||||
}
|
||||
|
||||
TW_UINT16 sane_option_probe_resolution(const char *option_name, int *minval, int *maxval, int *quant)
|
||||
TW_UINT16 sane_option_probe_resolution(const char *option_name, struct option_descriptor *opt)
|
||||
{
|
||||
struct option_descriptor opt;
|
||||
TW_UINT16 rc = sane_find_option(option_name, TYPE_INT, &opt);
|
||||
|
||||
if (rc != TWCC_SUCCESS) return rc;
|
||||
if (opt.constraint_type != CONSTRAINT_RANGE) return TWCC_CAPUNSUPPORTED;
|
||||
|
||||
*minval = opt.constraint.range.min;
|
||||
*maxval = opt.constraint.range.max;
|
||||
*quant = opt.constraint.range.quant;
|
||||
return rc;
|
||||
return sane_find_option(option_name, TYPE_INT, opt);
|
||||
}
|
||||
|
||||
TW_UINT16 sane_option_probe_mode(TW_UINT16 *current, TW_UINT32 *choices, int *count)
|
||||
|
|
|
@ -200,7 +200,7 @@ TW_UINT16 sane_option_get_int( const char *option_name, int *val ) DECLSPEC_HIDD
|
|||
TW_UINT16 sane_option_set_int( const char *option_name, int val, BOOL *reload ) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_get_str( const char *option_name, char *val, int len ) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_set_str( const char *option_name, char *val, BOOL *reload ) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_probe_resolution( const char *option_name, int *minval, int *maxval, int *quant) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_probe_resolution( const char *option_name, struct option_descriptor *opt ) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_probe_mode(TW_UINT16 *current, TW_UINT32 *choices, int *count) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_get_bool( const char *option_name, BOOL *val ) DECLSPEC_HIDDEN;
|
||||
TW_UINT16 sane_option_set_bool( const char *option_name, BOOL val ) DECLSPEC_HIDDEN;
|
||||
|
|
Loading…
Reference in a new issue