📄 loader.h
字号:
void checkNotify();
protected:
void clear();
private slots:
/**
* gets called, whenever a QMovie changes frame
*/
void movieUpdated( const QRect &rect );
void movieStatus(int);
void movieResize(const QSize&);
void deleteMovie();
private:
void do_notify(const QPixmap& p, const QRect& r);
QMovie* m;
QPixmap* p;
QPixmap* bg;
QRgb bgColor;
mutable QPixmap* pixPart;
ImageSource* imgSource;
const char* formatType; // Is the name of the movie format type
int width;
int height;
// Is set if movie format type ( incremental/animation) was checked
bool typeChecked : 1;
bool isFullyTransparent : 1;
bool errorOccured : 1;
bool monochrome : 1;
KHTMLSettings::KAnimationAdvice m_showAnimations : 2;
friend class Cache;
#if APPLE_CHANGES
public:
int dataSize() const { return m_dataSize; }
CachedImageCallback *decoderCallback() const { return m_decoderCallback; }
private:
friend class CachedImageCallback;
int m_dataSize;
CachedImageCallback *m_decoderCallback;
#endif
};
#ifdef KHTML_XSLT
class CachedXSLStyleSheet : public CachedObject
{
public:
CachedXSLStyleSheet(DocLoader* dl, const DOM::DOMString &url, KIO::CacheControl cachePolicy, time_t _expireDate);
const DOM::DOMString& sheet() const { return m_sheet; }
virtual void ref(CachedObjectClient *consumer);
virtual void deref(CachedObjectClient *consumer);
virtual void data(QBuffer &buffer, bool eof);
virtual void error(int err, const char *text);
virtual bool schedule() const { return true; }
void checkNotify();
protected:
DOM::DOMString m_sheet;
QTextCodec* m_codec;
};
#endif
#ifndef KHTML_NO_XBL
class CachedXBLDocument : public CachedObject
{
public:
CachedXBLDocument(DocLoader* dl, const DOM::DOMString &url, KIO::CacheControl cachePolicy, time_t _expireDate);
virtual ~CachedXBLDocument();
XBL::XBLDocumentImpl* document() const { return m_document; }
virtual void ref(CachedObjectClient *consumer);
virtual void deref(CachedObjectClient *consumer);
virtual void data( QBuffer &buffer, bool eof );
virtual void error( int err, const char *text );
virtual bool schedule() const { return true; }
void checkNotify();
protected:
XBL::XBLDocumentImpl* m_document;
QTextCodec* m_codec;
};
#endif
/**
* @internal
*
* Manages the loading of scripts/images/stylesheets for a particular document
*/
class DocLoader
OOM_MODIFIED
{
public:
DocLoader(KHTMLPart*, DOM::DocumentImpl*);
~DocLoader();
CachedImage *requestImage( const DOM::DOMString &url);
CachedCSSStyleSheet *requestStyleSheet( const DOM::DOMString &url, const QString& charset);
CachedScript *requestScript( const DOM::DOMString &url, const QString& charset);
#ifdef KHTML_XSLT
CachedXSLStyleSheet* requestXSLStyleSheet(const DOM::DOMString& url);
#endif
#ifndef KHTML_NO_XBL
CachedXBLDocument* requestXBLDocument(const DOM::DOMString &url);
#endif
bool autoloadImages() const { return m_bautoloadImages; }
KIO::CacheControl cachePolicy() const { return m_cachePolicy; }
KHTMLSettings::KAnimationAdvice showAnimations() const { return m_showAnimations; }
time_t expireDate() const { return m_expireDate; }
KHTMLPart* part() const { return m_part; }
DOM::DocumentImpl* doc() const { return m_doc; }
void setExpireDate( time_t );
void setAutoloadImages( bool );
void setCachePolicy( KIO::CacheControl cachePolicy );
void setShowAnimations( KHTMLSettings::KAnimationAdvice );
void removeCachedObject( CachedObject*) const;
private:
bool needReload(const KURL &fullUrl);
friend class Cache;
friend class DOM::DocumentImpl;
QStringList m_reloadedURLs;
mutable QPtrList<CachedObject> m_docObjects;
time_t m_expireDate;
KIO::CacheControl m_cachePolicy;
bool m_bautoloadImages : 1;
KHTMLSettings::KAnimationAdvice m_showAnimations : 2;
KHTMLPart* m_part;
DOM::DocumentImpl* m_doc;
};
/**
* @internal
*/
class Request
OOM_MODIFIED
{
public:
Request(DocLoader* dl, CachedObject *_object, bool _incremental);
~Request();
bool incremental;
QBuffer m_buffer;
CachedObject *object;
DocLoader* m_docLoader;
};
/**
* @internal
*/
class Loader : public QObject
{
Q_OBJECT
public:
Loader();
~Loader();
bool isLoader() const { return true; }
void load(DocLoader* dl, CachedObject *object, bool incremental = true);
int numRequests( DocLoader* dl ) const;
#if NOKIA_CHANGES
int numRequests( DocLoader* dl, CachedObject::Type type ) const;
#endif
void cancelRequests( DocLoader* dl );
#if APPLE_CHANGES
void removeBackgroundDecodingRequest (Request *r);
#endif
// may return 0L
KIO::Job *jobForRequest( const DOM::DOMString &url ) const;
#if APPLE_CHANGES
KWQLoader *kwq;
#endif
signals:
friend class CachedImageCallback;
void requestStarted( khtml::DocLoader* dl, khtml::CachedObject* obj );
void requestDone( khtml::DocLoader* dl, khtml::CachedObject *obj );
void requestFailed( khtml::DocLoader* dl, khtml::CachedObject *obj );
protected slots:
#if NOKIA_CHANGES
void slotFinished( KIO::Job * , const TDesC8 &allData);
void slotData( KIO::Job *, const char *data, int size );
void slotReceivedResponse ( KIO::Job *, MWebCoreUrlResponseHeaderInfo *response );
#else
#if APPLE_CHANGES
void slotFinished( KIO::Job * , NSData *allData);
void slotData( KIO::Job *, const char *data, int size );
void slotReceivedResponse ( KIO::Job *, NSURLResponse *response );
#else
void slotFinished( KIO::Job * );
void slotData( KIO::Job *, const QByteArray & );
#endif
#endif
private:
void servePendingRequests();
QPtrList<Request> m_requestsPending;
QPtrDict<Request> m_requestsLoading;
#if APPLE_CHANGES
QPtrList<Request> m_requestsBackgroundDecoding;
#endif
#ifdef HAVE_LIBJPEG
KJPEGFormatType m_jpegloader;
#endif
};
/**
* @internal
*
* Provides a cache/loader for objects needed for displaying the html page.
* At the moment these are stylesheets, scripts and images
*/
class Cache
{
friend class DocLoader;
public:
/**
* init the cache in case it's not already. This needs to get called once
* before using it.
*/
static void init();
/**
* Ask the cache for some url. Will return a cachedObject, and
* load the requested data in case it's not cahced
* if the DocLoader is zero, the url must be full-qualified.
* Otherwise, it is automatically base-url expanded
*/
static CachedImage *requestImage( DocLoader* l, const DOM::DOMString &url, bool reload=false, time_t _expireDate=0);
static CachedImage *requestImage( DocLoader* l, const KURL &url, bool reload=false, time_t _expireDate=0);
/**
* Ask the cache for some url. Will return a cachedObject, and
* load the requested data in case it's not cached
*/
static CachedCSSStyleSheet *requestStyleSheet( DocLoader* l, const DOM::DOMString &url, bool reload=false, time_t _expireDate=0, const QString& charset = QString::null);
#ifdef KHTML_XSLT
// Ask the cache for an XSL stylesheet.
static CachedXSLStyleSheet* requestXSLStyleSheet(DocLoader* l, const DOM::DOMString &url,
bool reload=false, time_t _expireDate=0);
#endif
#ifndef KHTML_NO_XBL
// Ask the cache for an XBL document.
static CachedXBLDocument* requestXBLDocument(DocLoader* l, const DOM::DOMString &url,
bool reload=false, time_t _expireDate=0);
#endif
/**
* Pre-loads a stylesheet into the cache.
*/
static void preloadStyleSheet(const QString &url, const QString &stylesheet_data);
/**
* Ask the cache for some url. Will return a cachedObject, and
* load the requested data in case it's not cahced
*/
static CachedScript *requestScript( DocLoader* l, const DOM::DOMString &url, bool reload=false, time_t _expireDate=0, const QString& charset=QString::null);
/**
* Pre-loads a script into the cache.
*/
static void preloadScript(const QString &url, const QString &script_data);
/**
* sets the size of the cache. This will only hod approximately, since the size some
* cached objects (like stylesheets) take up in memory is not exaclty known.
*/
static void setSize( int bytes );
/**
* returns the size of the cache
*/
static int size() { return maxSize; };
static int maxCacheableObjectSize() { return maxCacheable; }
/**
* prints some statistics to stdout
*/
static void statistics();
/**
* clean up cache
*/
static void flush(bool force=false);
/**
* clears the cache
* Warning: call this only at the end of your program, to clean
* up memory (useful for finding memory holes)
*/
static void clear();
static Loader *loader() { return m_loader; }
static QPixmap *nullPixmap;
static QPixmap *brokenPixmap;
static void removeCacheEntry( CachedObject *object );
#if APPLE_CHANGES
struct TypeStatistic {
int count;
int size;
TypeStatistic() : count(0), size(0) { }
};
struct Statistics {
TypeStatistic images;
TypeStatistic movies;
TypeStatistic styleSheets;
TypeStatistic scripts;
#ifdef KHTML_XSLT
TypeStatistic xslStyleSheets;
#endif
#ifndef KHTML_NO_XBL
TypeStatistic xblDocs;
#endif
TypeStatistic other;
};
static Statistics getStatistics();
static void flushAll();
static void setCacheDisabled(bool);
#endif
static void insertInLRUList(CachedObject *);
static void removeFromLRUList(CachedObject *);
static bool adjustSize(CachedObject *, int sizeDelta);
static LRUList* getLRUListFor(CachedObject* o);
static void checkLRUAndUncacheableListIntegrity();
static QDict<CachedObject> *cache;
public:
static QPtrList<DocLoader>* docloader;
static int maxSize;
static int maxCacheable;
static int flushCount;
static Loader *m_loader;
static unsigned long s_ulRefCnt;
static void moveToHeadOfLRUList(CachedObject *);
static LRUList *m_LRULists;
static int m_totalSizeOfLRULists;
static CachedObject *m_headOfUncacheableList;
static int m_countOfLRUAndUncacheableLists;
};
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -