mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 08:54:05 +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;
|
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;
|
TW_ARRAY *a;
|
||||||
static const UINT16 supported_caps[] = { CAP_SUPPORTEDCAPS, CAP_XFERCOUNT, CAP_UICONTROLLABLE,
|
TW_UINT32 *p32;
|
||||||
CAP_AUTOFEED, CAP_FEEDERENABLED,
|
TW_UINT16 *p16;
|
||||||
ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_UNITS, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR,
|
|
||||||
ICAP_XRESOLUTION, ICAP_YRESOLUTION, ICAP_PHYSICALHEIGHT, ICAP_PHYSICALWIDTH, ICAP_SUPPORTEDSIZES };
|
|
||||||
|
|
||||||
pCapability->hContainer = GlobalAlloc (0, FIELD_OFFSET( TW_ARRAY, ItemList[sizeof(supported_caps)] ));
|
pCapability->hContainer = 0;
|
||||||
pCapability->ConType = TWON_ARRAY;
|
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)
|
if (pCapability->hContainer)
|
||||||
{
|
{
|
||||||
UINT16 *u;
|
|
||||||
TW_UINT32 i;
|
TW_UINT32 i;
|
||||||
a = GlobalLock (pCapability->hContainer);
|
a = GlobalLock (pCapability->hContainer);
|
||||||
a->ItemType = TWTY_UINT16;
|
a->ItemType = type;
|
||||||
a->NumItems = ARRAY_SIZE(supported_caps);
|
a->NumItems = value_count;
|
||||||
u = (UINT16 *) a->ItemList;
|
p16 = (TW_UINT16 *) a->ItemList;
|
||||||
|
p32 = (TW_UINT32 *) a->ItemList;
|
||||||
for (i = 0; i < a->NumItems; i++)
|
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);
|
GlobalUnlock (pCapability->hContainer);
|
||||||
return TWCC_SUCCESS;
|
return TWCC_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -171,6 +179,16 @@ static TW_UINT16 TWAIN_GetSupportedCaps(pTW_CAPABILITY pCapability)
|
||||||
return TWCC_LOWMEMORY;
|
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 */
|
/* ICAP_XFERMECH */
|
||||||
static TW_UINT16 SANE_ICAPXferMech (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
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;
|
int current_resolution;
|
||||||
TW_FIX32 *default_res;
|
TW_FIX32 *default_res;
|
||||||
const char *best_option_name;
|
const char *best_option_name;
|
||||||
int minval, maxval, quantval;
|
struct option_descriptor opt;
|
||||||
|
|
||||||
TRACE("ICAP_%cRESOLUTION\n", cap == ICAP_XRESOLUTION ? 'X' : 'Y');
|
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;
|
break;
|
||||||
|
|
||||||
case MSG_GET:
|
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)
|
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;
|
break;
|
||||||
|
|
||||||
case MSG_SET:
|
case MSG_SET:
|
||||||
|
|
|
@ -107,18 +107,9 @@ TW_UINT16 sane_option_set_str(const char *option_name, char *val, BOOL *needs_re
|
||||||
return rc;
|
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;
|
return sane_find_option(option_name, TYPE_INT, 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TW_UINT16 sane_option_probe_mode(TW_UINT16 *current, TW_UINT32 *choices, int *count)
|
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_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_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_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_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_get_bool( const char *option_name, BOOL *val ) DECLSPEC_HIDDEN;
|
||||||
TW_UINT16 sane_option_set_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