mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
6.2 KiB
194 lines
6.2 KiB
/*
|
|
Enhanced NCSA Mosaic from Spyglass
|
|
"Guitar"
|
|
|
|
Copyright 1994 Spyglass, Inc.
|
|
All Rights Reserved
|
|
|
|
Author(s):
|
|
Eric W. Sink [email protected]
|
|
Jim Seidman [email protected]
|
|
Scott Piette [email protected]
|
|
*/
|
|
|
|
#ifndef _IMGCACHE_H_
|
|
#define _IMGCACHE_H_
|
|
|
|
struct ImageInfo
|
|
{
|
|
int refCount;
|
|
int width;
|
|
int height;
|
|
unsigned int flags;
|
|
char src[MAX_URL_STRING + 1];
|
|
|
|
/* This stuff is for progressive display */
|
|
|
|
int nLastRow; /* Last modified row to be updated [0 - N-1] */
|
|
int nPreviousLastRow; /* previous last row. */
|
|
int nPass; /* how many times this has gone on. [0-?] */
|
|
int nPreviousPass; /* previous pass */
|
|
BOOL bFirstPass; /* is this the first pass? */
|
|
|
|
/* TODO (Paul): make sure these are unused, then drop 'em */
|
|
#if 0
|
|
int nStep; /* increment e.g. 8, 4, 2 */
|
|
#endif
|
|
#ifdef UNIX
|
|
BOOL bComplete; /* used by unix to note progressive complete */
|
|
#endif
|
|
|
|
HTList *llElements; /* list of elements which reference */
|
|
/* points to wImageEle below */
|
|
|
|
#ifdef MAC
|
|
GWorldPtr gw;
|
|
GWorldPtr compositeBackground;
|
|
BitMap *mask;
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
/*
|
|
hPalette is NULL if the image is an xbm.
|
|
hPalette is also NULL if the image has been dithered
|
|
*/
|
|
HPALETTE hPalette;
|
|
PBITMAPINFO pbmi;
|
|
unsigned char *data;
|
|
long transparent;
|
|
#endif
|
|
#ifdef UNIX
|
|
XColor *xPalette;
|
|
unsigned char *data;
|
|
int num_colors;
|
|
int depth;
|
|
Pixmap xpix;
|
|
Pixmap clip_pix;
|
|
unsigned char *mask;
|
|
XImage *ximg; /* this was here but not used, so use for prgrsv img */
|
|
long transparent;
|
|
|
|
/* This stuff is special and only used when the background
|
|
** image is < a specified minimum (currently 200x100)
|
|
** Then we make a larger pixmap and store it here.
|
|
**
|
|
** This is cuz the redraws get very slow when we have to
|
|
** copy a small pixmap many times to cover the background.
|
|
*/
|
|
Pixmap bg_xpix;
|
|
int bg_width;
|
|
int bg_height;
|
|
|
|
#endif
|
|
};
|
|
|
|
|
|
/* this little structure is for keeping track of which elements reference
|
|
** the given image. see llElements above.
|
|
*/
|
|
typedef struct _wImageEle {
|
|
struct _www *w3doc;
|
|
int element;
|
|
}wImageEle, *wImageEleP;
|
|
|
|
/* Possible settings of the "flags" field */
|
|
#define IMG_ERROR 0x0001 /* There was an error loading this image */
|
|
#define IMG_MISSING 0x0002 /* The HTTP server said image doesn't exist */
|
|
#define IMG_NOTLOADED 0x0004 /* The image has not yet been loaded */
|
|
#define IMG_PREMATCHED 0x0008 /* The image's pixels correspond to the global palette */
|
|
#define IMG_BW 0x0010 /* The image is a two color image */
|
|
#define IMG_JPEG 0x0020 /* The image is jpeg, and therefore is already dithered when imgcache.c gets it */
|
|
#define IMG_GRAY 0x0040 /* The image is a grayscale, needs another dither */
|
|
#define IMG_24 0x0040 /* The image is stored as 24bit data. The format is 3 byte 0xRRGGBB */
|
|
#define IMG_TRANSPARENT 0x0080 /* The image contains transparent colors. */
|
|
#define IMG_PROGRESS 0x0100 /* The image loading is in progress */
|
|
#define IMG_PARTIAL 0x0200 /* The image was partially loaded & displayed, then cancelled */
|
|
#define IMG_BUILTIN 0x0400 /* The image is built in never remove */
|
|
#define IMG_ISIMAGE 0x0800 /* Hack for unix so I can pass in extra
|
|
** informatoin to Image_SetImageData
|
|
** for inlined image viewer */
|
|
|
|
|
|
#ifdef UNIX
|
|
#define BGIMG_MIN_HEIGHT 200
|
|
#define BGIMG_MIN_WIDTH 100
|
|
#endif
|
|
|
|
|
|
/* Note that if the IMG_NOTLOADED, IMG_MISSING, or IMG_ERROR fields are set,
|
|
the gw field will be NULL, since the drawing code should use a standard image
|
|
or ALT text. */
|
|
|
|
struct Params_Image_Fetch {
|
|
struct ImageInfo * pImg; /* Pointer to placeholder to fill */
|
|
HTRequest * request; /* Request to use to load image */
|
|
struct Mwin * tw; /* Window controlling load */
|
|
TKey key; /* */
|
|
BOOL bOneImage; /* called by LoadOne or LoadALll */
|
|
int nEl; /* Which element we're on */
|
|
|
|
/* Variables used internally */
|
|
int status;
|
|
};
|
|
int Image_Fetch_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
struct Params_GDOC_LoadImages {
|
|
struct Mwin *tw;
|
|
BOOL bLoad;
|
|
BOOL bReload;
|
|
};
|
|
|
|
struct Params_Image_LoadAll {
|
|
struct Mwin * tw; /* Window to load images for */
|
|
BOOL bLoad; /* Only get images with file:/// URLs */
|
|
BOOL bReload; /* Set to true when doing a reload, so we can skip the use of the disk cache */
|
|
|
|
/* Variables used internally */
|
|
int nEl; /* Which element we're on */
|
|
|
|
/*
|
|
Actually, note that this struct is used by Image_LoadAll_Async AND by
|
|
Image_LoadOneImage_Async. In the former, nEl is used as a loop counter,
|
|
internally.
|
|
In the latter, nEL must be set before entry to the routine, as it specifies
|
|
the image to be loaded.
|
|
*/
|
|
};
|
|
int Image_LoadAll_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
int Image_LoadOneImage_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
BOOL Image_NukeImages(struct _www *pdoc, BOOL bNukeMaps);
|
|
|
|
struct ImageInfo *
|
|
Image_CreatePlaceholder (const char *src, int width, int height,
|
|
struct _www *w3doc, int element);
|
|
|
|
int Image_AddElement (struct ImageInfo *myImage,
|
|
struct _www *w3doc, int element);
|
|
int Image_DeleteElement (struct ImageInfo *myImage,
|
|
struct _www *w3doc, int element);
|
|
|
|
|
|
#ifdef WIN32
|
|
|
|
struct ImageInfo *
|
|
Image_SetImageData (HTRequest *request, unsigned char *data, int width,
|
|
int height, HPALETTE hPalette, long transparent, unsigned int flags);
|
|
|
|
#endif
|
|
#ifdef MAC
|
|
|
|
struct ImageInfo *
|
|
Image_SetImageData (HTRequest *request, GWorldPtr gw, BitMap *mask, int width, int height);
|
|
|
|
#endif
|
|
#ifdef UNIX
|
|
|
|
struct ImageInfo *
|
|
Image_SetImageData (HTRequest *request, unsigned char *data,
|
|
unsigned char *mask, int width, int height, XColor *hPalette,
|
|
long transparent, int depth, int flags);
|
|
|
|
#endif
|
|
|
|
#endif /* _IMGCACHE_H_ */
|