summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqmovie.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqmovie.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqmovie.cpp1082
1 files changed, 0 insertions, 1082 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqmovie.cpp b/tqtinterface/qt4/src/kernel/tqmovie.cpp
deleted file mode 100644
index 68d3a5c..0000000
--- a/tqtinterface/qt4/src/kernel/tqmovie.cpp
+++ /dev/null
@@ -1,1082 +0,0 @@
-/****************************************************************************
-**
-** Implementation of movie classes
-**
-** Created : 970617
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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.
-**
-**********************************************************************/
-
-// #define TQT_SAVE_MOVIE_HACK
-
-#include "tqtimer.h"
-#include "tqpainter.h"
-#include "tqptrlist.h"
-#include "tqbitmap.h"
-#include "tqmovie.h"
-#include "tqfile.h"
-#include "tqbuffer.h"
-#include "tqobject.h"
-#include "tqpixmapcache.h"
-
-#ifndef TQT_NO_MOVIE
-
-#ifdef TQ_WS_TQWS
-#include "tqgfx_qws.h"
-#endif
-
-#include "tqasyncio.h"
-#include "tqasyncimageio.h"
-
-#include <stdlib.h>
-
-/*!
- \class TQMovie tqmovie.h
- \brief The TQMovie class provides incremental loading of animations or images, signalling as it progresses.
-
- \ingroup images
- \ingroup graphics
- \ingroup multimedia
- \mainclass
-
- The simplest way to display a TQMovie is to use a TQLabel and
- TQLabel::setMovie().
-
- A TQMovie provides a TQPixmap as the framePixmap(); connections can
- be made via connectResize() and connectUpdate() to receive
- notification of size and pixmap changes. All decoding is driven
- by the normal event-processing mechanisms.
-
- The movie begins playing as soon as the TQMovie is created
- (actually, once control returns to the event loop). When the last
- frame in the movie has been played, it may loop back to the start
- if such looping is defined in the input source.
-
- TQMovie objects are explicitly shared. This means that a TQMovie
- copied from another TQMovie will be displaying the same frame at
- all times. If one shared movie pauses, all pause. To make \e
- independent movies, they must be constructed separately.
-
- The set of data formats supported by TQMovie is determined by the
- decoder factories that have been installed; the format of the
- input is determined as the input is decoded.
-
- The supported formats are MNG (if TQt is configured with MNG
- support enabled) and GIF (if TQt is configured with GIF support
- enabled, see tqgif.h).
-
- If TQt is configured to support GIF reading, we are required to
- state that "The Graphics Interchange Format(c) is the Copyright
- property of CompuServe Incorporated. GIF(sm) is a Service Mark
- property of CompuServe Incorporated.
-
- \warning If you are in a country that recognizes software patents
- and in which Unisys holds a patent on LZW compression and/or
- decompression and you want to use GIF, Unisys may require you to
- license that technology. Such countries include Canada, Japan,
- the USA, France, Germany, Italy and the UK.
-
- GIF support may be removed completely in a future version of TQt.
- We recommend using the MNG or PNG format.
-
- \img qmovie.png TQMovie
-
- \sa TQLabel::setMovie()
-*/
-
-/*!
- \enum TQMovie::tqStatus
-
- \value SourceEmpty
- \value UnrecognizedFormat
- \value Paused
- \value EndOfFrame
- \value EndOfLoop
- \value EndOfMovie
- \value SpeedChanged
-*/
-
-class TQMoviePrivate : public TQObject, public TQShared,
- private TQDataSink, private TQImageConsumer
-{
- Q_OBJECT
- TQ_OBJECT
-
-public: // for TQMovie
-
- // Creates a null Private
- TQMoviePrivate();
-
- // NOTE: The ownership of the TQDataSource is transferred to the Private
- TQMoviePrivate(TQDataSource* src, TQMovie* movie, int bufsize);
-
- virtual ~TQMoviePrivate();
-
- bool isNull() const;
-
- // Initialize, possibly to the null state
- void init(bool fully);
- void flushBuffer();
- void updatePixmapFromImage();
- void updatePixmapFromImage(const TQPoint& off, const TQRect& area);
- void showChanges();
-
- // This as TQImageConsumer
- void changed(const TQRect& rect);
- void end();
- void preFrameDone(); //util func
- void frameDone();
- void frameDone(const TQPoint&, const TQRect& rect);
- void restartTimer();
- void setLooping(int l);
- void setFramePeriod(int milliseconds);
- void setSize(int w, int h);
-
- // This as TQDataSink
- int readyToReceive();
- void receive(const uchar* b, int bytecount);
- void eof();
- void pause();
-
-Q_SIGNALS:
- void sizeChanged(const TQSize&);
- void areaChanged(const TQRect&);
- void datatqStatus(int);
-
-public Q_SLOTS:
- void refresh();
-
-public:
- TQMovie *that;
- TQWidget * display_widget;
-
- TQImageDecoder *decoder;
-
- // Cyclic buffer
- int buf_size;
- uchar *buffer;
- int buf_r, buf_w, buf_usage;
-
- int framenumber;
- int frameperiod;
- int speed;
- TQTimer *frametimer;
- int lasttimerinterval;
- int loop;
- bool movie_ended;
- bool dirty_cache;
- bool waitingForFrameTick;
- int stepping;
- TQRect changed_area;
- TQRect valid_area;
- TQDataPump *pump;
- TQDataSource *source;
- TQPixmap mypixmap;
- TQBitmap mymask;
- TQColor bg;
-
- int error;
- bool empty;
-
-#ifdef TQT_SAVE_MOVIE_HACK
- bool save_image;
- int image_number;
-#endif
-};
-
-
-TQMoviePrivate::TQMoviePrivate()
-{
- dirty_cache = FALSE;
- buffer = 0;
- pump = 0;
- source = 0;
- decoder = 0;
- display_widget=0;
- buf_size = 0;
- init(FALSE);
-}
-
-// NOTE: The ownership of the TQDataSource is transferred to the Private
-TQMoviePrivate::TQMoviePrivate(TQDataSource* src, TQMovie* movie, int bufsize) :
- that(movie),
- buf_size(bufsize)
-{
- frametimer = new TQTimer(this);
- pump = src ? new TQDataPump(src, this) : 0;
- TQObject::connect(frametimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(refresh()));
- dirty_cache = FALSE;
- source = src;
- buffer = 0;
- decoder = 0;
- speed = 100;
- display_widget=0;
- init(TRUE);
-}
-
-TQMoviePrivate::~TQMoviePrivate()
-{
- if ( buffer ) // Avoid purify complaint
- delete [] buffer;
- delete pump;
- delete decoder;
- delete source;
-
- // Too bad.. but better be safe than sorry
- if ( dirty_cache )
- TQPixmapCache::clear();
-}
-
-bool TQMoviePrivate::isNull() const
-{
- return !buf_size;
-}
-
-// Initialize. Only actually allocate any space if \a fully is TRUE,
-// otherwise, just enough to be a valid null Private.
-void TQMoviePrivate::init(bool fully)
-{
-#ifdef TQT_SAVE_MOVIE_HACK
- save_image = TRUE;
- image_number = 0;
-#endif
-
- buf_usage = buf_r = buf_w = 0;
- if ( buffer ) // Avoid purify complaint
- delete [] buffer;
- buffer = fully ? new uchar[buf_size] : 0;
- if ( buffer )
- memset( buffer, 0, buf_size );
-
- delete decoder;
- decoder = fully ? new TQImageDecoder(this) : 0;
-
-#ifdef AVOID_OPEN_FDS
- if ( source && !source->isOpen() )
- source->open(IO_ReadOnly);
-#endif
-
- waitingForFrameTick = FALSE;
- stepping = -1;
- framenumber = 0;
- frameperiod = -1;
- if (fully) frametimer->stop();
- lasttimerinterval = -1;
- changed_area.setRect(0,0,-1,-1);
- valid_area = changed_area;
- loop = -1;
- movie_ended = FALSE;
- error = 0;
- empty = TRUE;
-}
-
-void TQMoviePrivate::flushBuffer()
-{
- int used;
- while (buf_usage && !waitingForFrameTick && stepping != 0 && !error) {
- used = decoder->decode(buffer + buf_r, TQMIN(buf_usage, buf_size - buf_r));
- if (used <= 0) {
- if ( used < 0 ) {
- error = 1;
- emit datatqStatus(TQMovie::UnrecognizedFormat);
- }
- break;
- }
- buf_r = (buf_r + used) % buf_size;
- buf_usage -= used;
- }
-
- // Some formats, like MNG, can make stuff happen without any extra data.
- // Only do this if the movie hasn't ended, however or we'll never get the end of loop signal.
- if (!movie_ended) {
- used = decoder->decode(buffer + buf_r, 0);
- if (used <= 0) {
- if ( used < 0 ) {
- error = 1;
- emit datatqStatus(TQMovie::UnrecognizedFormat);
- }
- }
- }
-
- if (error)
- frametimer->stop();
- maybeReady();
-}
-
-void TQMoviePrivate::updatePixmapFromImage()
-{
- if (changed_area.isEmpty()) return;
- updatePixmapFromImage(TQPoint(0,0),changed_area);
-}
-
-void TQMoviePrivate::updatePixmapFromImage(const TQPoint& off,
- const TQRect& area)
-{
- // Create temporary TQImage to hold the part we want
- const TQImage& gimg = decoder->image();
- TQImage img = gimg.copy(area);
-
-#ifdef TQT_SAVE_MOVIE_HACK
- if ( save_image ) {
- TQString name;
- name.sprintf("movie%i.ppm",image_number++);
- gimg.save( name, "PPM" );
- }
-#endif
-
- // Resize to size of image
- if (mypixmap.width() != gimg.width() || mypixmap.height() != gimg.height())
- mypixmap.resize(gimg.width(), gimg.height());
-
- // Convert to pixmap and paste that onto myself
- TQPixmap lines;
-
-#ifndef TQT_NO_SPRINTF
- if (!(frameperiod < 0 && loop == -1)) {
- // its an animation, lets see if we converted
- // this frame already.
- TQString key;
- key.sprintf( "%08lx:%04d", ( long )this, framenumber );
- if ( !TQPixmapCache::find( key, lines ) ) {
- lines.convertFromImage(img, TQt::ColorOnly);
- TQPixmapCache::insert( key, lines );
- dirty_cache = TRUE;
- }
- } else
-#endif
- {
- lines.convertFromImage(img, TQt::ColorOnly);
- }
-
- if (bg.isValid()) {
- TQPainter p;
- p.begin(&mypixmap);
- p.fillRect(area, bg);
- p.drawPixmap(area, lines);
- p.end();
- } else {
- if (gimg.hasAlphaBuffer()) {
- // Resize to size of image
- if (mymask.isNull()) {
- mymask.resize(gimg.width(), gimg.height());
- mymask.fill( TQt::color1 );
- }
- }
- mypixmap.setMask(TQBitmap()); // Remove reference to my mask
- copyBlt( &mypixmap, area.left(), area.top(),
- &lines, off.x(), off.y(), area.width(), area.height() );
- }
-
-#ifdef TQ_WS_TQWS
- if(display_widget) {
- TQGfx * mygfx=display_widget->graphicsContext();
- if(mygfx) {
- double xscale,yscale;
- xscale=display_widget->width();
- yscale=display_widget->height();
- xscale=xscale/((double)mypixmap.width());
- yscale=yscale/((double)mypixmap.height());
- double xh,yh;
- xh=xscale*((double)area.left());
- yh=yscale*((double)area.top());
- mygfx->setSource(&mypixmap);
- mygfx->setAlphaType(TQGfx::IgnoreAlpha);
- mygfx->stretchBlt(0,0,display_widget->width(),
- display_widget->height(),mypixmap.width(),
- mypixmap.height());
- delete mygfx;
- }
- }
-#endif
-}
-
-void TQMoviePrivate::showChanges()
-{
- if (changed_area.isValid()) {
- updatePixmapFromImage();
-
- valid_area = valid_area.unite(changed_area);
- emit areaChanged(changed_area);
-
- changed_area.setWidth(-1); // make empty
- }
-}
-
-// Private as TQImageConsumer
-void TQMoviePrivate::changed(const TQRect& rect)
-{
- if (!frametimer->isActive())
- frametimer->start(0);
- changed_area = changed_area.unite(rect);
-}
-
-void TQMoviePrivate::end()
-{
- movie_ended = TRUE;
-}
-
-void TQMoviePrivate::preFrameDone()
-{
- if (stepping > 0) {
- stepping--;
- if (!stepping) {
- frametimer->stop();
- emit datatqStatus( TQMovie::Paused );
- }
- } else {
- waitingForFrameTick = TRUE;
- restartTimer();
- }
-}
-void TQMoviePrivate::frameDone()
-{
- preFrameDone();
- showChanges();
- emit datatqStatus(TQMovie::EndOfFrame);
- framenumber++;
-}
-void TQMoviePrivate::frameDone(const TQPoint& p,
- const TQRect& rect)
-{
- preFrameDone();
- const TQImage& gimg = decoder->image();
- TQPoint point = p - gimg.offset();
- if (framenumber==0)
- emit sizeChanged(gimg.size());
- valid_area = valid_area.unite(TQRect(point,rect.size()));
- updatePixmapFromImage(point,rect);
- emit areaChanged(TQRect(point,rect.size()));
- emit datatqStatus(TQMovie::EndOfFrame);
- framenumber++;
-}
-
-void TQMoviePrivate::restartTimer()
-{
- if (speed > 0) {
- int i = frameperiod >= 0 ? frameperiod * 100/speed : 0;
- if ( i != lasttimerinterval || !frametimer->isActive() ) {
- lasttimerinterval = i;
- frametimer->start( i );
- }
- } else {
- frametimer->stop();
- }
-}
-
-void TQMoviePrivate::setLooping(int nloops)
-{
- if (loop == -1) { // Only if we don't already know how many loops!
- if (source && source->rewindable()) {
- source->enableRewind(TRUE);
- loop = nloops;
- } else {
- // Cannot loop from this source
- loop = -2;
- }
- }
-}
-
-void TQMoviePrivate::setFramePeriod(int milliseconds)
-{
- // Animation: only show complete frame
- frameperiod = milliseconds;
- if (stepping<0 && frameperiod >= 0) restartTimer();
-}
-
-void TQMoviePrivate::setSize(int w, int h)
-{
- if (mypixmap.width() != w || mypixmap.height() != h) {
- mypixmap.resize(w, h);
- emit sizeChanged(TQSize(w, h));
- }
-}
-
-
-// Private as TQDataSink
-
-int TQMoviePrivate::readyToReceive()
-{
- // Could pre-fill buffer, but more efficient to just leave the
- // data back at the source.
- return (waitingForFrameTick || !stepping || buf_usage || error)
- ? 0 : buf_size;
-}
-
-void TQMoviePrivate::receive(const uchar* b, int bytecount)
-{
- if ( bytecount ) empty = FALSE;
-
- while (bytecount && !waitingForFrameTick && stepping != 0) {
- int used = decoder->decode(b, bytecount);
- if (used<=0) {
- if ( used < 0 ) {
- error = 1;
- emit datatqStatus(TQMovie::UnrecognizedFormat);
- }
- break;
- }
- b+=used;
- bytecount-=used;
- }
-
- // Append unused to buffer
- while (bytecount--) {
- buffer[buf_w] = *b++;
- buf_w = (buf_w+1)%buf_size;
- buf_usage++;
- }
-}
-
-void TQMoviePrivate::eof()
-{
- if ( !movie_ended )
- return;
-
- if ( empty )
- emit datatqStatus(TQMovie::SourceEmpty);
-
-#ifdef TQT_SAVE_MOVIE_HACK
- save_image = FALSE;
-#endif
-
- emit datatqStatus(TQMovie::EndOfLoop);
-
- if (loop >= 0) {
- if (loop) {
- loop--;
- if (!loop) return;
- }
- delete decoder;
- decoder = new TQImageDecoder(this);
- source->rewind();
- framenumber = 0;
- movie_ended = FALSE;
- } else {
- delete decoder;
- decoder = 0;
- if ( buffer ) // Avoid purify complaint
- delete [] buffer;
- buffer = 0;
- emit datatqStatus(TQMovie::EndOfMovie);
-#ifdef AVOID_OPEN_FDS
- if ( source )
- source->close();
-#endif
- }
-}
-
-void TQMoviePrivate::pause()
-{
- if ( stepping ) {
- stepping = 0;
- frametimer->stop();
- emit datatqStatus( TQMovie::Paused );
- }
-}
-
-void TQMoviePrivate::refresh()
-{
- if (!decoder) {
- frametimer->stop();
- return;
- }
-
- if (frameperiod < 0 && loop == -1) {
- // Only show changes if probably not an animation
- showChanges();
- }
-
- if (!buf_usage) {
- frametimer->stop();
- }
-
- waitingForFrameTick = FALSE;
- flushBuffer();
-}
-
-///////////////// End of Private /////////////////
-
-
-
-
-
-/*!
- Constructs a null TQMovie. The only interesting thing to do with
- such a movie is to assign another movie to it.
-
- \sa isNull()
-*/
-TQMovie::TQMovie()
-{
- d = new TQMoviePrivate();
-}
-
-/*!
- Constructs a TQMovie with an external data source. You should later
- call pushData() to send incoming animation data to the movie.
-
- The \a bufsize argument sets the maximum amount of data the movie
- will transfer from the data source per event loop. The lower this
- value, the better interleaved the movie playback will be with
- other event processing, but the slower the overall processing will
- be.
-
- \sa pushData()
-*/
-TQMovie::TQMovie(int bufsize)
-{
- d = new TQMoviePrivate(0, this, bufsize);
-}
-
-/*!
- Returns the maximum amount of data that can currently be pushed
- into the movie by a call to pushData(). This is affected by the
- initial buffer size, but varies as the movie plays and data is
- consumed.
-*/
-int TQMovie::pushSpace() const
-{
- return d->readyToReceive();
-}
-
-/*!
- Pushes \a length bytes from \a data into the movie. \a length must
- be no more than the amount returned by pushSpace() since the
- previous call to pushData().
-*/
-void TQMovie::pushData(const uchar* data, int length)
-{
- d->receive(data,length);
-}
-
-#ifdef TQ_WS_TQWS // ##### Temporary performance experiment
-/*!
- \internal
-*/
-void TQMovie::setDisplayWidget(TQWidget * w)
-{
- d->display_widget=w;
-}
-#endif
-
-/*!
- Constructs a TQMovie that reads an image sequence from the given
- data source, \a src. The source must be allocated dynamically,
- because TQMovie will take ownership of it and will destroy it when
- the movie is destroyed. The movie starts playing as soon as event
- processing continues.
-
- The \a bufsize argument sets the maximum amount of data the movie
- will transfer from the data source per event loop. The lower this
- value, the better interleaved the movie playback will be with
- other event processing, but the slower the overall processing will
- be.
-*/
-TQMovie::TQMovie(TQDataSource* src, int bufsize)
-{
- d = new TQMoviePrivate(src, this, bufsize);
-}
-
-/*!
- Constructs a TQMovie that reads an image sequence from the file, \a
- fileName.
-
- The \a bufsize argument sets the maximum amount of data the movie
- will transfer from the data source per event loop. The lower this
- value, the better interleaved the movie playback will be with
- other event processing, but the slower the overall processing will
- be.
-*/
-TQMovie::TQMovie(const TQString &fileName, int bufsize)
-{
- TQFile* file = new TQFile(fileName);
- if ( !fileName.isEmpty() )
- file->open(IO_ReadOnly);
- d = new TQMoviePrivate(new TQIODeviceSource(TQT_TQIODEVICE(file), bufsize), this, bufsize);
-}
-
-/*!
- Constructs a TQMovie that reads an image sequence from the byte
- array, \a data.
-
- The \a bufsize argument sets the maximum amount of data the movie
- will transfer from the data source per event loop. The lower this
- value, the better interleaved the movie playback will be with
- other event processing, but the slower the overall processing will
- be.
-*/
-TQMovie::TQMovie(TQByteArray data, int bufsize)
-{
- TQBuffer* buffer = new TQBuffer(data);
- buffer->open(IO_ReadOnly);
- d = new TQMoviePrivate(new TQIODeviceSource(TQT_TQIODEVICE(buffer), bufsize), this, bufsize);
-}
-
-/*!
- Constructs a movie that uses the same data as movie \a movie.
- TQMovies use explicit sharing, so operations on the copy will
- affect both.
-*/
-TQMovie::TQMovie(const TQMovie& movie)
-{
- d = movie.d;
- d->ref();
-}
-
-/*!
- Destroys the TQMovie. If this is the last reference to the data of
- the movie, the data is deallocated.
-*/
-TQMovie::~TQMovie()
-{
- if (d->deref()) delete d;
-}
-
-/*!
- Returns TRUE if the movie is null; otherwise returns FALSE.
-*/
-bool TQMovie::isNull() const
-{
- return d->isNull();
-}
-
-/*!
- Makes this movie use the same data as movie \a movie. TQMovies use
- explicit sharing.
-*/
-TQMovie& TQMovie::operator=(const TQMovie& movie)
-{
- movie.d->ref();
- if (d->deref()) delete d;
- d = movie.d;
- return *this;
-}
-
-
-/*!
- Sets the background color of the pixmap to \a c. If the background
- color isValid(), the pixmap will never have a mask because the
- background color will be used in transparent regions of the image.
-
- \sa backgroundColor()
-*/
-void TQMovie::setBackgroundColor(const TQColor& c)
-{
- d->bg = c;
-}
-
-/*!
- Returns the background color of the movie set by
- setBackgroundColor().
-*/
-const TQColor& TQMovie::backgroundColor() const
-{
- return d->bg;
-}
-
-/*!
- Returns the area of the pixmap for which pixels have been
- generated.
-*/
-const TQRect& TQMovie::getValidRect() const
-{
- return d->valid_area;
-}
-
-/*!
- Returns the current frame of the movie, as a TQPixmap. It is not
- generally useful to keep a copy of this pixmap. It is better to
- keep a copy of the TQMovie and get the framePixmap() only when
- needed for drawing.
-
- \sa frameImage()
-*/
-const TQPixmap& TQMovie::framePixmap() const
-{
- return d->mypixmap;
-}
-
-/*!
- Returns the current frame of the movie, as a TQImage. It is not
- generally useful to keep a copy of this image. Also note that you
- must not call this function if the movie is finished(), since by
- then the image will not be available.
-
- \sa framePixmap()
-*/
-const TQImage& TQMovie::frameImage() const
-{
- return d->decoder->image();
-}
-
-/*!
- Returns the number of steps remaining after a call to step(). If
- the movie is paused, steps() returns 0. If it's running normally
- or is finished, steps() returns a negative number.
-*/
-int TQMovie::steps() const
-{
- return d->stepping;
-}
-
-/*!
- Returns the number of times EndOfFrame has been emitted since the
- start of the current loop of the movie. Thus, before any
- EndOfFrame has been emitted the value will be 0; within Q_SLOTS
- processing the first signal, frameNumber() will be 1, and so on.
-*/
-int TQMovie::frameNumber() const { return d->framenumber; }
-
-/*!
- Returns TRUE if the image is paused; otherwise returns FALSE.
-*/
-bool TQMovie::paused() const
-{
- return d->stepping == 0;
-}
-
-/*!
- Returns TRUE if the image is no longer playing: this happens when
- all loops of all frames are complete; otherwise returns FALSE.
-*/
-bool TQMovie::finished() const
-{
- return !d->decoder;
-}
-
-/*!
- Returns TRUE if the image is not single-stepping, not paused, and
- not finished; otherwise returns FALSE.
-*/
-bool TQMovie::running() const
-{
- return d->stepping<0 && d->decoder;
-}
-
-/*!
- Pauses the progress of the animation.
-
- \sa unpause()
-*/
-void TQMovie::pause()
-{
- d->pause();
-}
-
-/*!
- Unpauses the progress of the animation.
-
- \sa pause()
-*/
-void TQMovie::unpause()
-{
- if ( d->stepping >= 0 ) {
- if (d->isNull())
- return;
- d->stepping = -1;
- d->restartTimer();
- }
-}
-
-/*!
- \overload
-
- Steps forward, showing \a steps frames, and then pauses.
-*/
-void TQMovie::step(int steps)
-{
- if (d->isNull())
- return;
- d->stepping = steps;
- d->frametimer->start(0);
- d->waitingForFrameTick = FALSE; // Full speed ahead!
-}
-
-/*!
- Steps forward 1 frame and then pauses.
-*/
-void TQMovie::step()
-{
- step(1);
-}
-
-/*!
- Rewinds the movie to the beginning. If the movie has not been
- paused, it begins playing again.
-*/
-void TQMovie::restart()
-{
- if (d->isNull())
- return;
- if (d->source->rewindable()) {
- d->source->enableRewind(TRUE);
- d->source->rewind();
- int s = d->stepping;
- d->init(TRUE);
- if ( s>0 )
- step(s);
- else if ( s==0 )
- pause();
- }
-}
-
-/*!
- Returns the movie's play speed as a percentage. The default is 100
- percent.
-
- \sa setSpeed()
-*/
-int TQMovie::speed() const
-{
- return d->speed;
-}
-
-/*!
- Sets the movie's play speed as a percentage, to \a percent. This
- is a percentage of the speed dictated by the input data format.
- The default is 100 percent.
-*/
-void TQMovie::setSpeed(int percent)
-{
- int oldspeed = d->speed;
- if ( oldspeed != percent && percent >= 0 ) {
- d->speed = percent;
- // Restart timer only if really needed
- if (d->stepping < 0) {
- if ( !percent || !oldspeed // To or from zero
- || oldspeed*4 / percent > 4 // More than 20% slower
- || percent*4 / oldspeed > 4 // More than 20% faster
- )
- d->restartTimer();
- }
- }
-}
-
-/*!
- Connects the \a{receiver}'s \a member of type \c{void member(const
- TQSize&)} so that it is signalled when the movie changes size.
-
- Note that due to the explicit sharing of TQMovie objects, these
- connections persist until they are explicitly disconnected with
- disconnectResize() or until \e every shared copy of the movie is
- deleted.
-*/
-void TQMovie::connectResize(TQT_BASE_OBJECT_NAME* receiver, const char *member)
-{
- TQObject::connect(d, TQT_SIGNAL(sizeChanged(const TQSize&)), TQT_TQOBJECT(receiver), member);
-}
-
-/*!
- Disconnects the \a{receiver}'s \a member (or all members if \a
- member is zero) that were previously connected by connectResize().
-*/
-void TQMovie::disconnectResize(TQT_BASE_OBJECT_NAME* receiver, const char *member)
-{
- TQObject::disconnect(d, TQT_SIGNAL(sizeChanged(const TQSize&)), TQT_TQOBJECT(receiver), member);
-}
-
-/*!
- Connects the \a{receiver}'s \a member of type \c{void member(const
- TQRect&)} so that it is signalled when an area of the framePixmap()
- has changed since the previous frame.
-
- Note that due to the explicit sharing of TQMovie objects, these
- connections persist until they are explicitly disconnected with
- disconnectUpdate() or until \e every shared copy of the movie is
- deleted.
-*/
-void TQMovie::connectUpdate(TQT_BASE_OBJECT_NAME* receiver, const char *member)
-{
- TQObject::connect(d, TQT_SIGNAL(areaChanged(const TQRect&)), TQT_TQOBJECT(receiver), member);
-}
-
-/*!
- Disconnects the \a{receiver}'s \a member (or all members if \q
- member is zero) that were previously connected by connectUpdate().
-*/
-void TQMovie::disconnectUpdate(TQT_BASE_OBJECT_NAME* receiver, const char *member)
-{
- TQObject::disconnect(d, TQT_SIGNAL(areaChanged(const TQRect&)), TQT_TQOBJECT(receiver), member);
-}
-
-/*!
- Connects the \a{receiver}'s \a member, of type \c{void
- member(int)} so that it is signalled when the movie changes
- status. The status codes are negative for errors and positive for
- information.
-
- \table
- \header \i tqStatus Code \i Meaning
- \row \i TQMovie::SourceEmpty
- \i signalled if the input cannot be read.
- \row \i TQMovie::UnrecognizedFormat
- \i signalled if the input data is unrecognized.
- \row \i TQMovie::Paused
- \i signalled when the movie is paused by a call to paused()
- or by after \link step() stepping \endlink pauses.
- \row \i TQMovie::EndOfFrame
- \i signalled at end-of-frame after any update and Paused Q_SIGNALS.
- \row \i TQMovie::EndOfLoop
- \i signalled at end-of-loop, after any update Q_SIGNALS,
- EndOfFrame - but before EndOfMovie.
- \row \i TQMovie::EndOfMovie
- \i signalled when the movie completes and is not about to loop.
- \endtable
-
- More status messages may be added in the future, so a general test
- for errors would test for negative.
-
- Note that due to the explicit sharing of TQMovie objects, these
- connections persist until they are explicitly disconnected with
- disconnectqStatus() or until \e every shared copy of the movie is
- deleted.
-*/
-void TQMovie::connectqStatus(TQObject* receiver, const char *member)
-{
- TQObject::connect(d, TQT_SIGNAL(datatqStatus(int)), receiver, member);
-}
-
-/*!
- Disconnects the \a{receiver}'s \a member (or all members if \a
- member is zero) that were previously connected by connectqStatus().
-*/
-void TQMovie::disconnectqStatus(TQObject* receiver, const char *member)
-{
- TQObject::disconnect(d, TQT_SIGNAL(datatqStatus(int)), receiver, member);
-}
-
-
-#include "tqmovie.tqmoc"
-
-#endif // TQT_NO_MOVIE