Windows NT 4.0 source code leak
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

/*
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_ */