зеркало из https://github.com/mozilla/gecko-dev.git
128 строки
3.9 KiB
C++
128 строки
3.9 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#ifndef CXIcon_H
|
|
#define CXIcon_H
|
|
#include "cxdc.h"
|
|
void Icon_GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
|
|
class CXIcon;
|
|
|
|
class CCustomImageObject
|
|
{
|
|
protected:
|
|
CPtrList loadingImagesList; // A list of images that this window is still waiting for.
|
|
|
|
public:
|
|
virtual void LoadComplete(HT_Resource r) = 0;
|
|
|
|
virtual CRDFImage* LookupImage(const char* url, HT_Resource r);
|
|
|
|
virtual ~CCustomImageObject();
|
|
|
|
virtual void AddLoadingImage(CRDFImage* pImage);
|
|
virtual void RemoveLoadingImage(CRDFImage* pImage);
|
|
};
|
|
|
|
struct CIconCallbackInfo
|
|
{
|
|
HT_Resource pResource;
|
|
CCustomImageObject* pObject;
|
|
|
|
CIconCallbackInfo(CCustomImageObject* pObj, HT_Resource pRes)
|
|
:pObject(pObj), pResource(pRes) {}
|
|
};
|
|
|
|
|
|
class CRDFImage
|
|
{
|
|
public:
|
|
char *pUrl; // The URL at which the image can be found.
|
|
|
|
BOOL m_bCompletelyLoaded; // Whether or not the image has completely finished loading.
|
|
BOOL m_bFrameLoaded; // Whether or not a single frame of the image is available yet.
|
|
// (Lets you know whether or not you can start drawing something.)
|
|
|
|
BITMAPINFO *bmpInfo; // The current bits of the image.
|
|
void XP_HUGE *bits;
|
|
void XP_HUGE *maskbits;
|
|
HDC hSubDC;
|
|
|
|
BOOL m_BadImage; // Whether or not to use the bad image bitmap.
|
|
static HBITMAP m_hBadImageBitmap; // A bitmap to use if the image is not obtainable.
|
|
|
|
static int refCount; // A reference counter for the total # of RDF images that currently exist.
|
|
|
|
CXIcon* iconContext; // The context that is performing the load.
|
|
|
|
CPtrList resourceList; // The observers of this image.
|
|
int m_nRefCount; // The # of observers.
|
|
|
|
int pairCount; // Specifies whether or not the mask and the image bits are ready.
|
|
|
|
public:
|
|
CRDFImage(const char * pUrl);
|
|
virtual ~CRDFImage();
|
|
|
|
void ProcessIcon();
|
|
void CompleteCallback();
|
|
void CompleteFrameCallback();
|
|
|
|
BOOL FrameLoaded(); // Whether or not a single frame is ready (either good or bad).
|
|
BOOL FrameSuccessfullyLoaded(); // Whether or not a good frame is ready.
|
|
|
|
BOOL CompletelyLoaded(); // Whether or not the entire image is ready (either good or bad).
|
|
|
|
void DestroyContext();
|
|
|
|
void RemoveListener(CCustomImageObject* pObject);
|
|
void RemoveListenerForSpecificResource(CCustomImageObject *pObject, HT_Resource r);
|
|
void AddListener(CCustomImageObject* pObject, HT_Resource r);
|
|
};
|
|
|
|
class CXIcon : public CDCCX {
|
|
|
|
public:
|
|
CXIcon(){}
|
|
CXIcon(CRDFImage* image);
|
|
virtual ~CXIcon();
|
|
|
|
private:
|
|
CPtrList imageList;
|
|
HDC m_hDC;
|
|
NI_Pixmap* m_image;
|
|
NI_Pixmap* m_mask;
|
|
|
|
CRDFImage* m_icon;
|
|
|
|
public:
|
|
virtual HDC GetContextDC() { return m_hDC; }
|
|
void SubstituteDC(HDC hdc) { m_hDC = hdc; }
|
|
virtual BOOL IsDeviceDC() { return TRUE; }
|
|
virtual HDC GetAttribDC() { return m_hDC; }
|
|
virtual BITMAPINFO *NewPixmap(NI_Pixmap *pImage, BOOL mask);
|
|
void DeleteContextDC() { DeleteDC(m_hDC); }
|
|
void ReleaseContextDC(HDC pDC) {}
|
|
virtual void ImageComplete(NI_Pixmap* image);
|
|
// Don't display partial images.
|
|
virtual void AllConnectionsComplete(MWContext *pContext);
|
|
void NiceDestruction();
|
|
virtual int DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect);
|
|
};
|
|
|
|
#endif
|