Added GIF decompressor support to OLE Automation IPictures.
This commit is contained in:
parent
cf5c35bc81
commit
728bedcfc6
|
@ -308,7 +308,7 @@ ac_includes_default="\
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif"
|
#endif"
|
||||||
|
|
||||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS OPTIONS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP TOOLSDIR X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS YACC LEX LEXLIB LEX_OUTPUT_ROOT XYACC XLEX AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES LN_S LN C2MAN LDCONFIG INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LINT LINTFLAGS DB2HTML DB2PDF DB2PS JPEGLIB EGREP XLIB XFILES OPENGLFILES GLU32FILES OPENGL_LIBS NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ft_devel ft_devel2 FREETYPEINCL ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS DLLEXT DLLFLAGS DLLIBS LDDLLFLAGS LDSHARED LIBEXT IMPLIBEXT DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP CROSSTEST CROSSCC LDPATH CRTLIBS LDD ALLOCA LIBOBJS LTLIBOBJS'
|
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS OPTIONS WIN16_FILES WIN16_INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP TOOLSDIR X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS YACC LEX LEXLIB LEX_OUTPUT_ROOT XYACC XLEX AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP WINDRES ac_ct_WINDRES LN_S LN C2MAN LDCONFIG INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LINT LINTFLAGS DB2HTML DB2PDF DB2PS JPEGLIB EGREP GIFLIB XLIB XFILES OPENGLFILES GLU32FILES OPENGL_LIBS NASLIBS CURSESLIBS sane_devel SANELIBS SANEINCL ft_devel ft_devel2 FREETYPEINCL ARTSCCONFIG ARTSLIBS ARTSINCL ALSALIBS AUDIOIOLIBS DLLEXT DLLFLAGS DLLIBS LDDLLFLAGS LDSHARED LIBEXT IMPLIBEXT DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP CROSSTEST CROSSCC LDPATH CRTLIBS LDD ALLOCA LIBOBJS LTLIBOBJS'
|
||||||
ac_subst_files='MAKE_RULES MAKE_DLL_RULES MAKE_TEST_RULES MAKE_PROG_RULES'
|
ac_subst_files='MAKE_RULES MAKE_DLL_RULES MAKE_TEST_RULES MAKE_PROG_RULES'
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
# Initialize some variables set by options.
|
||||||
|
@ -6378,6 +6378,276 @@ fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
GIFLIB=""
|
||||||
|
|
||||||
|
|
||||||
|
for ac_header in gif_lib.h
|
||||||
|
do
|
||||||
|
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
||||||
|
echo "$as_me:$LINENO: checking for $ac_header" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
||||||
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
||||||
|
echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
||||||
|
else
|
||||||
|
# Is the header compilable?
|
||||||
|
echo "$as_me:$LINENO: checking $ac_header usability" >&5
|
||||||
|
echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
#include <$ac_header>
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_header_compiler=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_header_compiler=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest.$ac_ext
|
||||||
|
echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
|
||||||
|
echo "${ECHO_T}$ac_header_compiler" >&6
|
||||||
|
|
||||||
|
# Is the header present?
|
||||||
|
echo "$as_me:$LINENO: checking $ac_header presence" >&5
|
||||||
|
echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <$ac_header>
|
||||||
|
_ACEOF
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
||||||
|
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } >/dev/null; then
|
||||||
|
if test -s conftest.err; then
|
||||||
|
ac_cpp_err=$ac_c_preproc_warn_flag
|
||||||
|
else
|
||||||
|
ac_cpp_err=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ac_cpp_err=yes
|
||||||
|
fi
|
||||||
|
if test -z "$ac_cpp_err"; then
|
||||||
|
ac_header_preproc=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_header_preproc=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_ext
|
||||||
|
echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
|
||||||
|
echo "${ECHO_T}$ac_header_preproc" >&6
|
||||||
|
|
||||||
|
# So? What about this header?
|
||||||
|
case $ac_header_compiler:$ac_header_preproc in
|
||||||
|
yes:no )
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
||||||
|
(
|
||||||
|
cat <<\_ASBOX
|
||||||
|
## ------------------------------------ ##
|
||||||
|
## Report this to bug-autoconf@gnu.org. ##
|
||||||
|
## ------------------------------------ ##
|
||||||
|
_ASBOX
|
||||||
|
) |
|
||||||
|
sed "s/^/$as_me: WARNING: /" >&2
|
||||||
|
;;
|
||||||
|
no:yes )
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
||||||
|
(
|
||||||
|
cat <<\_ASBOX
|
||||||
|
## ------------------------------------ ##
|
||||||
|
## Report this to bug-autoconf@gnu.org. ##
|
||||||
|
## ------------------------------------ ##
|
||||||
|
_ASBOX
|
||||||
|
) |
|
||||||
|
sed "s/^/$as_me: WARNING: /" >&2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "$as_me:$LINENO: checking for $ac_header" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
||||||
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
eval "$as_ac_Header=$ac_header_preproc"
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
||||||
|
echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
||||||
|
|
||||||
|
fi
|
||||||
|
if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
echo "$as_me:$LINENO: checking for DGifOpen in -lungif" >&5
|
||||||
|
echo $ECHO_N "checking for DGifOpen in -lungif... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_lib_ungif_DGifOpen+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lungif $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char DGifOpen ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
DGifOpen ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_lib_ungif_DGifOpen=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_lib_ungif_DGifOpen=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_lib_ungif_DGifOpen" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_lib_ungif_DGifOpen" >&6
|
||||||
|
if test $ac_cv_lib_ungif_DGifOpen = yes; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_LIBGIF 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
GIFLIB="-lungif"
|
||||||
|
else
|
||||||
|
echo "$as_me:$LINENO: checking for DGifOpen in -lgif" >&5
|
||||||
|
echo $ECHO_N "checking for DGifOpen in -lgif... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_lib_gif_DGifOpen+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lgif $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char DGifOpen ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
DGifOpen ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_lib_gif_DGifOpen=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_lib_gif_DGifOpen=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_lib_gif_DGifOpen" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_lib_gif_DGifOpen" >&6
|
||||||
|
if test $ac_cv_lib_gif_DGifOpen = yes; then
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_LIBGIF 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
GIFLIB="-lgif"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -16234,6 +16504,7 @@ s,@DB2PDF@,$DB2PDF,;t t
|
||||||
s,@DB2PS@,$DB2PS,;t t
|
s,@DB2PS@,$DB2PS,;t t
|
||||||
s,@JPEGLIB@,$JPEGLIB,;t t
|
s,@JPEGLIB@,$JPEGLIB,;t t
|
||||||
s,@EGREP@,$EGREP,;t t
|
s,@EGREP@,$EGREP,;t t
|
||||||
|
s,@GIFLIB@,$GIFLIB,;t t
|
||||||
s,@XLIB@,$XLIB,;t t
|
s,@XLIB@,$XLIB,;t t
|
||||||
s,@XFILES@,$XFILES,;t t
|
s,@XFILES@,$XFILES,;t t
|
||||||
s,@OPENGLFILES@,$OPENGLFILES,;t t
|
s,@OPENGLFILES@,$OPENGLFILES,;t t
|
||||||
|
|
|
@ -147,6 +147,15 @@ AC_CHECK_HEADERS(jpeglib.h,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_SUBST(GIFLIB,"")
|
||||||
|
AC_CHECK_HEADERS(gif_lib.h,
|
||||||
|
AC_CHECK_LIB(ungif,DGifOpen,
|
||||||
|
[AC_DEFINE(HAVE_LIBGIF,1,[Define if you have libgif/libungif including devel headers])
|
||||||
|
GIFLIB="-lungif"],
|
||||||
|
[AC_CHECK_LIB(gif,DGifOpen,
|
||||||
|
[AC_DEFINE(HAVE_LIBGIF,1)
|
||||||
|
GIFLIB="-lgif"])]))
|
||||||
|
|
||||||
|
|
||||||
AC_SUBST(XLIB)
|
AC_SUBST(XLIB)
|
||||||
AC_SUBST(XFILES)
|
AC_SUBST(XFILES)
|
||||||
|
|
|
@ -7,7 +7,7 @@ MODULE = oleaut32.dll
|
||||||
IMPORTS = ole32 user32 gdi32 advapi32 kernel32
|
IMPORTS = ole32 user32 gdi32 advapi32 kernel32
|
||||||
DELAYIMPORTS = comctl32
|
DELAYIMPORTS = comctl32
|
||||||
ALTNAMES = ole2disp.dll typelib.dll
|
ALTNAMES = ole2disp.dll typelib.dll
|
||||||
EXTRALIBS = $(LIBUNICODE) $(LIBUUID) @JPEGLIB@
|
EXTRALIBS = $(LIBUNICODE) $(LIBUUID) @GIFLIB@ @JPEGLIB@
|
||||||
|
|
||||||
LDDLLFLAGS = @LDDLLFLAGS@
|
LDDLLFLAGS = @LDDLLFLAGS@
|
||||||
SYMBOLFILE = $(MODULE).tmp.o
|
SYMBOLFILE = $(MODULE).tmp.o
|
||||||
|
|
|
@ -43,6 +43,13 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Must be before wine includes, the header has things conflicting with
|
||||||
|
* WINE headers.
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_LIBGIF
|
||||||
|
# include <gif_lib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define NONAMELESSUNION
|
#define NONAMELESSUNION
|
||||||
#define NONAMELESSSTRUCT
|
#define NONAMELESSSTRUCT
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
@ -813,6 +820,26 @@ static boolean _jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired) {
|
||||||
static void _jpeg_term_source(j_decompress_ptr cinfo) { }
|
static void _jpeg_term_source(j_decompress_ptr cinfo) { }
|
||||||
#endif /* HAVE_LIBJPEG */
|
#endif /* HAVE_LIBJPEG */
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBGIF
|
||||||
|
struct gifdata {
|
||||||
|
unsigned char *data;
|
||||||
|
unsigned int curoff;
|
||||||
|
unsigned int len;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int _gif_inputfunc(GifFileType *gif, GifByteType *data, int len) {
|
||||||
|
struct gifdata *gd = (struct gifdata*)gif->UserData;
|
||||||
|
|
||||||
|
if (len+gd->curoff > gd->len) {
|
||||||
|
FIXME("Trying to read %d bytes, but only %d available.\n",len, gd->len-gd->curoff);
|
||||||
|
len = gd->len - gd->curoff;
|
||||||
|
}
|
||||||
|
memcpy(data, gd->data+gd->curoff, len);
|
||||||
|
gd->curoff += len;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* OLEPictureImpl_IPersistStream_Load (IUnknown)
|
* OLEPictureImpl_IPersistStream_Load (IUnknown)
|
||||||
*
|
*
|
||||||
|
@ -829,30 +856,134 @@ static HRESULT WINAPI OLEPictureImpl_Load(IPersistStream* iface,IStream*pStm) {
|
||||||
BYTE *xbuf;
|
BYTE *xbuf;
|
||||||
DWORD header[2];
|
DWORD header[2];
|
||||||
WORD magic;
|
WORD magic;
|
||||||
|
STATSTG statstg;
|
||||||
ICOM_THIS_From_IPersistStream(OLEPictureImpl, iface);
|
ICOM_THIS_From_IPersistStream(OLEPictureImpl, iface);
|
||||||
|
|
||||||
TRACE("(%p,%p)\n",This,pStm);
|
TRACE("(%p,%p)\n",This,pStm);
|
||||||
|
|
||||||
|
/* Sometimes we have a header, sometimes we don't. Apply some guesses to find
|
||||||
|
* out whether we do.
|
||||||
|
*/
|
||||||
|
hr=IStream_Stat(pStm,&statstg,STATFLAG_NONAME);
|
||||||
|
if (hr)
|
||||||
|
FIXME("Stat failed with hres %lx\n",hr);
|
||||||
hr=IStream_Read(pStm,header,8,&xread);
|
hr=IStream_Read(pStm,header,8,&xread);
|
||||||
if (hr || xread!=8) {
|
if (hr || xread!=8) {
|
||||||
FIXME("Failure while reading picture header (hr is %lx, nread is %ld).\n",hr,xread);
|
FIXME("Failure while reading picture header (hr is %lx, nread is %ld).\n",hr,xread);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
xread = 0;
|
if (header[1] > statstg.cbSize.QuadPart) {/* Incorrect header, assume none. */
|
||||||
xbuf = This->data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,header[1]);
|
xread = 8;
|
||||||
This->datalen = header[1];
|
xbuf = This->data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,statstg.cbSize.QuadPart);
|
||||||
while (xread < header[1]) {
|
memcpy(xbuf,&header,8);
|
||||||
ULONG nread;
|
This->datalen = statstg.cbSize.QuadPart;
|
||||||
hr = IStream_Read(pStm,xbuf+xread,header[1]-xread,&nread);
|
while (xread < This->datalen) {
|
||||||
xread+=nread;
|
ULONG nread;
|
||||||
if (hr || !nread)
|
hr = IStream_Read(pStm,xbuf+xread,This->datalen-xread,&nread);
|
||||||
break;
|
xread+=nread;
|
||||||
|
if (hr || !nread)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (xread != This->datalen)
|
||||||
|
FIXME("Could only read %ld of %d bytes in no-header case?\n",xread,This->datalen);
|
||||||
|
} else {
|
||||||
|
xread = 0;
|
||||||
|
xbuf = This->data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,header[1]);
|
||||||
|
This->datalen = header[1];
|
||||||
|
while (xread < header[1]) {
|
||||||
|
ULONG nread;
|
||||||
|
hr = IStream_Read(pStm,xbuf+xread,header[1]-xread,&nread);
|
||||||
|
xread+=nread;
|
||||||
|
if (hr || !nread)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (xread != header[1])
|
||||||
|
FIXME("Could only read %ld of %ld bytes?\n",xread,header[1]);
|
||||||
}
|
}
|
||||||
if (xread != header[1])
|
|
||||||
FIXME("Could only read %ld of %ld bytes?\n",xread,header[1]);
|
|
||||||
|
|
||||||
magic = xbuf[0] + (xbuf[1]<<8);
|
magic = xbuf[0] + (xbuf[1]<<8);
|
||||||
switch (magic) {
|
switch (magic) {
|
||||||
|
case 0x4947: { /* GIF */
|
||||||
|
#ifdef HAVE_LIBGIF
|
||||||
|
struct gifdata gd;
|
||||||
|
GifFileType *gif;
|
||||||
|
BITMAPINFO *bmi;
|
||||||
|
HDC hdcref;
|
||||||
|
LPBYTE bytes;
|
||||||
|
int i,j,ret;
|
||||||
|
GifImageDesc *gid;
|
||||||
|
SavedImage *si;
|
||||||
|
ColorMapObject *cm;
|
||||||
|
|
||||||
|
gd.data = xbuf;
|
||||||
|
gd.curoff = 0;
|
||||||
|
gd.len = xread;
|
||||||
|
gif = DGifOpen((void*)&gd, _gif_inputfunc);
|
||||||
|
ret = DGifSlurp(gif);
|
||||||
|
if (ret == GIF_ERROR) {
|
||||||
|
FIXME("Failed reading GIF using libgif.\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
TRACE("screen height %d, width %d\n", gif->SWidth, gif->SHeight);
|
||||||
|
TRACE("color res %d, backgcolor %d\n", gif->SColorResolution, gif->SBackGroundColor);
|
||||||
|
TRACE("imgcnt %d\n", gif->ImageCount);
|
||||||
|
if (gif->ImageCount<1) {
|
||||||
|
FIXME("GIF stream does not have images inside?\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
TRACE("curimage: %d x %d, on %dx%d, interlace %d\n",
|
||||||
|
gif->Image.Width, gif->Image.Height,
|
||||||
|
gif->Image.Left, gif->Image.Top,
|
||||||
|
gif->Image.Interlace
|
||||||
|
);
|
||||||
|
/* */
|
||||||
|
bmi = HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+(1<<gif->SColorResolution)*sizeof(RGBQUAD));
|
||||||
|
bytes= HeapAlloc(GetProcessHeap(),0,gif->SWidth*gif->SHeight);
|
||||||
|
si = gif->SavedImages+0;
|
||||||
|
gid = &(si->ImageDesc);
|
||||||
|
cm = gid->ColorMap;
|
||||||
|
if (!cm) cm = gif->SColorMap;
|
||||||
|
for (i=0;i<(1<<gif->SColorResolution);i++) {
|
||||||
|
bmi->bmiColors[i].rgbRed = cm->Colors[i].Red;
|
||||||
|
bmi->bmiColors[i].rgbGreen = cm->Colors[i].Green;
|
||||||
|
bmi->bmiColors[i].rgbBlue = cm->Colors[i].Blue;
|
||||||
|
}
|
||||||
|
/* Map to in picture coordinates */
|
||||||
|
for (i=0;i<gid->Height;i++)
|
||||||
|
for (j=0;j<gid->Width;j++)
|
||||||
|
bytes[(gid->Top+i)*gif->SWidth+gid->Left+j]=si->RasterBits[i*gid->Width+j];
|
||||||
|
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
bmi->bmiHeader.biWidth = gif->SWidth;
|
||||||
|
bmi->bmiHeader.biHeight = gif->SHeight;
|
||||||
|
bmi->bmiHeader.biPlanes = 1;
|
||||||
|
bmi->bmiHeader.biBitCount = 8;
|
||||||
|
bmi->bmiHeader.biCompression = BI_RGB;
|
||||||
|
bmi->bmiHeader.biSizeImage = gif->SWidth*gif->SHeight;
|
||||||
|
bmi->bmiHeader.biXPelsPerMeter = 0;
|
||||||
|
bmi->bmiHeader.biYPelsPerMeter = 0;
|
||||||
|
bmi->bmiHeader.biClrUsed = 1 << gif->SColorResolution;
|
||||||
|
bmi->bmiHeader.biClrImportant = 0;
|
||||||
|
|
||||||
|
hdcref = GetDC(0);
|
||||||
|
This->desc.u.bmp.hbitmap=CreateDIBitmap(
|
||||||
|
hdcref,
|
||||||
|
&bmi->bmiHeader,
|
||||||
|
CBM_INIT,
|
||||||
|
bytes,
|
||||||
|
bmi,
|
||||||
|
DIB_PAL_COLORS
|
||||||
|
);
|
||||||
|
DeleteDC(hdcref);
|
||||||
|
This->desc.picType = PICTYPE_BITMAP;
|
||||||
|
OLEPictureImpl_SetBitmap(This);
|
||||||
|
DGifCloseFile(gif);
|
||||||
|
HeapFree(GetProcessHeap(),0,bytes);
|
||||||
|
return S_OK;
|
||||||
|
#else
|
||||||
|
FIXME("Trying to load GIF, but no support for libgif/libungif compiled in.\n");
|
||||||
|
return E_FAIL;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0xd8ff: { /* JPEG */
|
case 0xd8ff: { /* JPEG */
|
||||||
#ifdef HAVE_LIBJPEG
|
#ifdef HAVE_LIBJPEG
|
||||||
struct jpeg_decompress_struct jd;
|
struct jpeg_decompress_struct jd;
|
||||||
|
@ -1012,10 +1143,19 @@ static HRESULT WINAPI OLEPictureImpl_Load(IPersistStream* iface,IStream*pStm) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
FIXME("Unknown magic %04x\n",magic);
|
{
|
||||||
|
int i;
|
||||||
|
FIXME("Unknown magic %04x, %ld read bytes:\n",magic,xread);
|
||||||
hr=E_FAIL;
|
hr=E_FAIL;
|
||||||
|
for (i=0;i<xread+8;i++) {
|
||||||
|
if (i<8) MESSAGE("%02x ",((unsigned char*)&header)[i]);
|
||||||
|
else MESSAGE("%02x ",xbuf[i-8]);
|
||||||
|
if (i % 10 == 9) MESSAGE("\n");
|
||||||
|
}
|
||||||
|
MESSAGE("\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: this notify is not really documented */
|
/* FIXME: this notify is not really documented */
|
||||||
if (hr==S_OK)
|
if (hr==S_OK)
|
||||||
|
|
|
@ -164,6 +164,9 @@
|
||||||
/* Define to 1 if you have the `getsockopt' function. */
|
/* Define to 1 if you have the `getsockopt' function. */
|
||||||
#undef HAVE_GETSOCKOPT
|
#undef HAVE_GETSOCKOPT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <gif_lib.h> header file. */
|
||||||
|
#undef HAVE_GIF_LIB_H
|
||||||
|
|
||||||
/* Define if the OpenGL headers define extension typedefs */
|
/* Define if the OpenGL headers define extension typedefs */
|
||||||
#undef HAVE_GLEXT_PROTOTYPES
|
#undef HAVE_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
@ -218,6 +221,9 @@
|
||||||
/* Define if you have the curses library (-lcurses) */
|
/* Define if you have the curses library (-lcurses) */
|
||||||
#undef HAVE_LIBCURSES
|
#undef HAVE_LIBCURSES
|
||||||
|
|
||||||
|
/* Define if you have libgif/libungif including devel headers */
|
||||||
|
#undef HAVE_LIBGIF
|
||||||
|
|
||||||
/* Define to 1 if you have the `i386' library (-li386). */
|
/* Define to 1 if you have the `i386' library (-li386). */
|
||||||
#undef HAVE_LIBI386
|
#undef HAVE_LIBI386
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue