summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqmngio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqmngio.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqmngio.cpp464
1 files changed, 0 insertions, 464 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqmngio.cpp b/tqtinterface/qt4/src/kernel/tqmngio.cpp
deleted file mode 100644
index 250fda1..0000000
--- a/tqtinterface/qt4/src/kernel/tqmngio.cpp
+++ /dev/null
@@ -1,464 +0,0 @@
-/****************************************************************************
-**
-** Implementation of MNG TQImage IOHandler
-**
-** Created : 970521
-**
-** Copyright (C) 1997-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the kernel module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#ifndef TQT_CLEAN_NAMESPACE
-#define TQT_CLEAN_NAMESPACE
-#endif
-
-#include "tqdatetime.h"
-
-#ifndef TQT_NO_IMAGEIO_MNG
-
-#include "tqimage.h"
-#include "tqasyncimageio.h"
-#include "tqiodevice.h"
-#include "tqmngio.h"
-
-// Define XMD_H prohibits the included headers of libmng.h to typedef INT32.
-// This is needed for Borland with STL support, since in that case, INT32 is
-// already defined by some Borland header.
-#define XMD_H
-#if defined(TQ_OS_UNIXWARE)
-# define HAVE_BOOLEAN // libjpeg under Unixware seems to need this
-#endif
-#include <libmng.h>
-#include <stdlib.h>
-
-
-#ifndef TQT_NO_ASYNC_IMAGE_IO
-
-class TQMNGFormat : public TQImageFormat {
-public:
- TQMNGFormat();
- virtual ~TQMNGFormat();
-
- int decode(TQImage& img, TQImageConsumer* consumer,
- const uchar* buffer, int length);
-
- bool openstream()
- {
- // ### We should figure out how many loops an MNG has, but for now always assume infinite.
- if (consumer)
- consumer->setLooping(0);
- return TRUE;
- }
- bool closestream( )
- {
- if (consumer)
- consumer->end();
- return TRUE;
- }
- bool readdata( mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead )
- {
- uint m = ndata + nbuffer - ubuffer;
- if ( iBuflen > m ) {
- iBuflen = m;
- }
- *pRead = iBuflen;
- uint n = nbuffer-ubuffer;
- if ( iBuflen < n ) {
- // enough in buffer
- memcpy(pBuf, buffer+ubuffer, iBuflen);
- ubuffer += iBuflen;
- return TRUE;
- }
- if ( n ) {
- // consume buffer
- memcpy(pBuf, buffer+ubuffer, n );
- pBuf = (mng_ptr)((char*)pBuf + n);
- iBuflen -= n;
- ubuffer = nbuffer;
- }
- if ( iBuflen ) {
- // fill from incoming data
- memcpy(pBuf, data, iBuflen);
- data += iBuflen;
- ndata -= iBuflen;
- }
- return TRUE;
- }
- bool errorproc( mng_int32 iErrorcode,
- mng_int8 /*iSeverity*/,
- mng_chunkid iChunkname,
- mng_uint32 /*iChunkseq*/,
- mng_int32 iExtra1,
- mng_int32 iExtra2,
- mng_pchar zErrortext )
- {
- qWarning("MNG error %d: %s; chunk %c%c%c%c; subcode %d:%d",
- iErrorcode, zErrortext ? zErrortext : "",
- (iChunkname>>24)&0xff,
- (iChunkname>>16)&0xff,
- (iChunkname>>8)&0xff,
- (iChunkname>>0)&0xff,
- iExtra1,iExtra2);
- return TRUE;
- }
- bool processheader( mng_uint32 iWidth, mng_uint32 iHeight )
- {
- image->create(iWidth,iHeight,32);
- image->setAlphaBuffer(TRUE);
- memset(image->bits(),0,iWidth*iHeight*4);
- consumer->setSize(iWidth,iHeight);
- mng_set_canvasstyle(handle,
- TQImage::systemByteOrder() == TQImage::LittleEndian
- ? MNG_CANVAS_BGRA8 : MNG_CANVAS_ARGB8 );
- return TRUE;
- }
- mng_ptr getcanvasline( mng_uint32 iLinenr )
- {
- return image->scanLine(iLinenr);
- }
- mng_bool refresh( mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h )
- {
- TQRect r(x,y,w,h);
- consumer->changed(r);
- consumer->setFramePeriod(0);
- consumer->frameDone();
- return TRUE;
- }
- mng_uint32 gettickcount( )
- {
- return timer.elapsed() - losttime;
- }
- bool settimer( mng_uint32 iMsecs )
- {
- consumer->setFramePeriod(iMsecs);
- consumer->frameDone();
- state = Time;
- losingtimer.start();
- losttime -= iMsecs;
- return TRUE;
- }
-
-private:
- // Animation-level information
- enum { MovieStart, Time, Data, Data2 } state;
-
- // Image-level information
- mng_handle handle;
-
- // For storing unused data
- uchar *buffer;
- uint maxbuffer;
- uint nbuffer;
-
- // Timing
- TQTime timer;
- TQTime losingtimer;
- int losttime;
-
- void enlargeBuffer(uint n)
- {
- if ( n > maxbuffer ) {
- maxbuffer = n;
- buffer = (uchar*)realloc(buffer,n);
- }
- }
-
- // Temporary locals during single data-chunk processing
- const uchar* data;
- uint ndata;
- uint ubuffer;
- TQImageConsumer* consumer;
- TQImage* image;
-};
-
-class TQMNGFormatType : public TQImageFormatType
-{
- TQImageFormat* decoderFor(const uchar* buffer, int length);
- const char* formatName() const;
-};
-
-
-/*
- \class TQMNGFormat tqmngio.h
- \brief Incremental image decoder for MNG image format.
-
- \ingroup images
- \ingroup graphics
-
- This subclass of TQImageFormat decodes MNG format images,
- including animated MNGs.
-
- Animated MNG images are standard MNG images. The MNG standard
- defines two extension chunks that are useful for animations:
-
- <dl>
- <dt>gIFg - GIF-like Graphic Control Extension
- <dd>Includes frame disposal, user input flag (we ignore this),
- and inter-frame delay.
- <dt>gIFx - GIF-like Application Extension
- <dd>Multi-purpose, but we just use the Netscape extension
- which specifies looping.
- </dl>
-
- The subimages usually contain a offset chunk (oFFs) but need not.
-
- The first image defines the "screen" size. Any subsequent image that
- doesn't fit is clipped.
-
-TODO: decide on this point. gIFg gives disposal types, so it can be done.
- All images paste (\e not composite, just place all-channel copying)
- over the previous image to produce a subsequent frame.
-*/
-
-/*
- \class TQMNGFormatType tqasyncimageio.h
- \brief Incremental image decoder for MNG image format.
-
- \ingroup images
- \ingroup graphics
- \ingroup io
-
- This subclass of TQImageFormatType recognizes MNG
- format images, creating a TQMNGFormat when required. An instance
- of this class is created automatically before any other factories,
- so you should have no need for such objects.
-*/
-
-TQImageFormat* TQMNGFormatType::decoderFor( const uchar* buffer, int length )
-{
- if (length < 8) return 0;
-
- if (buffer[0]==138 // MNG signature
- && buffer[1]=='M'
- && buffer[2]=='N'
- && buffer[3]=='G'
- && buffer[4]==13
- && buffer[5]==10
- && buffer[6]==26
- && buffer[7]==10
- || buffer[0]==139 // JNG signature
- && buffer[1]=='J'
- && buffer[2]=='N'
- && buffer[3]=='G'
- && buffer[4]==13
- && buffer[5]==10
- && buffer[6]==26
- && buffer[7]==10
-#ifdef TQT_NO_IMAGEIO_PNG // if we don't have native PNG support use libmng
- || buffer[0]==137 // PNG signature
- && buffer[1]=='P'
- && buffer[2]=='N'
- && buffer[3]=='G'
- && buffer[4]==13
- && buffer[5]==10
- && buffer[6]==26
- && buffer[7]==10
-#endif
- )
- return new TQMNGFormat;
- return 0;
-}
-
-const char* TQMNGFormatType::formatName() const
-{
- return "MNG";
-}
-
-
-/*!
- Constructs a TQMNGFormat.
-*/
-TQMNGFormat::TQMNGFormat()
-{
- state = MovieStart;
- handle = 0;
- nbuffer = 0;
- maxbuffer = 0;
- buffer = 0;
- losttime = 0;
-}
-
-/*
- Destroys a TQMNGFormat.
-*/
-TQMNGFormat::~TQMNGFormat()
-{
- // We're setting the consumer to 0 since it may have been
- // deleted by read_async_image in qimage.cpp
- consumer = 0;
- if (handle) mng_cleanup(&handle);
-}
-
-
-// C-callback to C++-member-function conversion
-//
-static mng_bool openstream( mng_handle handle )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->openstream();
-}
-static mng_bool closestream( mng_handle handle )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->closestream();
-}
-static mng_bool readdata( mng_handle handle, mng_ptr pBuf, mng_uint32 iBuflen, mng_uint32p pRead )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->readdata(pBuf,iBuflen,pRead);
-}
-static mng_bool errorproc( mng_handle handle,
- mng_int32 iErrorcode,
- mng_int8 iSeverity,
- mng_chunkid iChunkname,
- mng_uint32 iChunkseq,
- mng_int32 iExtra1,
- mng_int32 iExtra2,
- mng_pchar zErrortext )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->errorproc(iErrorcode,
- iSeverity,iChunkname,iChunkseq,iExtra1,iExtra2,zErrortext);
-}
-static mng_bool processheader( mng_handle handle,
- mng_uint32 iWidth, mng_uint32 iHeight )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->processheader(iWidth,iHeight);
-}
-static mng_ptr getcanvasline( mng_handle handle, mng_uint32 iLinenr )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->getcanvasline(iLinenr);
-}
-static mng_bool refresh( mng_handle handle,
- mng_uint32 iTop,
- mng_uint32 iLeft,
- mng_uint32 iBottom,
- mng_uint32 iRight )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->refresh(iTop,iLeft,iBottom,iRight);
-}
-static mng_uint32 gettickcount( mng_handle handle )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->gettickcount();
-}
-static mng_bool settimer( mng_handle handle, mng_uint32 iMsecs )
-{
- return ((TQMNGFormat*)mng_get_userdata(handle))->settimer(iMsecs);
-}
-
-static mng_ptr memalloc( mng_size_t iLen )
-{
- return calloc(1,iLen);
-}
-static void memfree( mng_ptr iPtr, mng_size_t /*iLen*/ )
-{
- free(iPtr);
-}
-
-/*!
- This function decodes some data into image changes.
-
- Returns the number of bytes consumed.
-*/
-int TQMNGFormat::decode( TQImage& img, TQImageConsumer* cons,
- const uchar* buf, int length )
-{
- consumer = cons;
- image = &img;
-
- data = buf;
- ndata = length;
- ubuffer = 0;
-
- if ( state == MovieStart ) {
- handle = mng_initialize( (mng_ptr)this, ::memalloc, ::memfree, 0 );
- mng_set_suspensionmode( handle, MNG_TRUE );
- mng_setcb_openstream( handle, ::openstream );
- mng_setcb_closestream( handle, ::closestream );
- mng_setcb_readdata( handle, ::readdata );
- mng_setcb_errorproc( handle, ::errorproc );
- mng_setcb_processheader( handle, ::processheader );
- mng_setcb_getcanvasline( handle, ::getcanvasline );
- mng_setcb_refresh( handle, ::refresh );
- mng_setcb_gettickcount( handle, ::gettickcount );
- mng_setcb_settimer( handle, ::settimer );
- state = Data;
- mng_readdisplay(handle);
- losingtimer.start();
- }
-
- losttime += losingtimer.elapsed();
- if ( ndata || !length )
- mng_display_resume(handle);
- losingtimer.start();
-
- image = 0;
-
- nbuffer -= ubuffer;
- if ( nbuffer ) {
- // Move back unused tail
- memcpy(buffer,buffer+ubuffer,nbuffer);
- }
- if ( ndata ) {
- // Not all used.
- enlargeBuffer(nbuffer+ndata);
- memcpy(buffer+nbuffer,data,ndata);
- nbuffer += ndata;
- }
-
- return length;
-}
-
-static TQMNGFormatType* globalMngFormatTypeObject = 0;
-
-#endif // TQT_NO_ASYNC_IMAGE_IO
-
-#ifndef TQT_NO_ASYNC_IMAGE_IO
-void qCleanupMngIO()
-{
- if ( globalMngFormatTypeObject ) {
- delete globalMngFormatTypeObject;
- globalMngFormatTypeObject = 0;
- }
-}
-#endif
-
-void qInitMngIO()
-{
- static bool done = FALSE;
- if ( !done ) {
- done = TRUE;
-#ifndef TQT_NO_ASYNC_IMAGE_IO
- globalMngFormatTypeObject = new TQMNGFormatType;
- qAddPostRoutine( qCleanupMngIO );
-#endif
- }
-}
-
-#endif // TQT_NO_IMAGEIO_MNG