summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqiconset.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqiconset.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqiconset.cpp949
1 files changed, 0 insertions, 949 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqiconset.cpp b/tqtinterface/qt4/src/kernel/tqiconset.cpp
deleted file mode 100644
index 95656c0..0000000
--- a/tqtinterface/qt4/src/kernel/tqiconset.cpp
+++ /dev/null
@@ -1,949 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQIconSet class
-**
-** Created : 980318
-**
-** 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.
-**
-**********************************************************************/
-
-#include "tqiconset.h"
-
-#ifndef TQT_NO_ICONSET
-
-#include "tqapplication.h"
-#include "tqbitmap.h"
-#include "tqcleanuphandler.h"
-#include "tqimage.h"
-#include "tqpainter.h"
-
-enum { NumSizes = 2, NumModes = 3, NumStates = 2 };
-
-static TQIconFactory *defaultFac = 0;
-static TQSingleCleanupHandler<TQIconFactory> q_cleanup_icon_factory;
-
-static short widths[2] = { 22, 32 };
-static short heights[2] = { 22, 32 };
-
-enum TQIconSetIconOrigin {
- SuppliedFileName, // 'fileName' contains the name of the file
- SuppliedPixmap, // 'pixmap' is a pointer to the user-supplied pixmap
- Manufactured, // 'pixmap' is a factory-generated pixmap (or 0)
- Generated // 'pixmap' is a TQIconSet-generated pixmap (or 0)
-};
-
-struct TQIconSetIcon
-{
- TQIconSetIconOrigin origin;
- union {
- TQString *fileName;
- TQPixmap *pixmap;
- };
-
- TQIconSetIcon() : origin( Generated ) { pixmap = 0; }
- TQIconSetIcon( const TQIconSetIcon& other )
- : origin( Generated ) {
- pixmap = 0;
- operator=( other );
- }
- ~TQIconSetIcon() {
- if ( origin == SuppliedFileName ) {
- delete fileName;
- } else {
- delete pixmap;
- }
- }
-
- TQIconSetIcon& operator=( const TQIconSetIcon& other );
-
- void clearCached() {
- if ( pixmap && (origin == Manufactured || origin == Generated) ) {
- origin = Generated;
- delete pixmap;
- pixmap = 0;
- }
- }
-};
-
-TQIconSetIcon& TQIconSetIcon::operator=( const TQIconSetIcon& other )
-{
- TQPixmap *oldPixmap = 0;
- TQString *oldFileName = 0;
- if ( origin == SuppliedFileName ) {
- oldFileName = fileName;
- } else {
- oldPixmap = pixmap;
- }
-
- origin = other.origin;
- if ( other.origin == SuppliedFileName ) {
- fileName = new TQString( *other.fileName );
- } else {
- if ( other.pixmap ) {
- pixmap = new TQPixmap( *other.pixmap );
- } else {
- pixmap = 0;
- }
- }
- delete oldPixmap;
- delete oldFileName;
- return *this;
-}
-
-class TQIconSetPrivate : public TQShared
-{
-public:
- TQIconSetIcon icons[NumSizes][NumModes][NumStates];
- TQPixmap defaultPix;
- TQIconFactory *factory;
-
- TQIconSetPrivate() : factory( 0 ) { }
- TQIconSetPrivate( const TQIconSetPrivate& other ) : TQShared() {
- count = 1;
- for ( int i = 0; i < NumSizes; i++ ) {
- for ( int j = 0; j < NumModes; j++ ) {
- for ( int k = 0; k < NumStates; k++ ) {
- icons[i][j][k] = other.icons[i][j][k];
- }
- }
- }
- defaultPix = other.defaultPix;
- factory = other.factory;
- if ( factory )
- factory->ref();
- }
- ~TQIconSetPrivate() {
- setFactory( 0 );
- }
-
- TQIconSetIcon *icon( const TQIconSet *iconSet, TQIconSet::Size size,
- TQIconSet::Mode mode, TQIconSet::State state );
- void setFactory( TQIconFactory *newFactory ) {
- if ( newFactory )
- newFactory->ref();
- if ( factory && factory->deref() && factory->autoDelete() )
- delete factory;
- factory = newFactory;
- }
-
- TQ_DUMMY_COMPARISON_OPERATOR( TQIconSetPrivate )
-};
-
-TQIconSetIcon *TQIconSetPrivate::icon( const TQIconSet *iconSet,
- TQIconSet::Size size, TQIconSet::Mode mode,
- TQIconSet::State state )
-{
- TQIconSetIcon *ik = &icons[(int) size - 1][(int) mode][(int) state];
-
- if ( iconSet ) {
- if ( ik->origin == SuppliedFileName ) {
- TQPixmap *newPixmap = new TQPixmap( *ik->fileName );
- delete ik->fileName;
-
- if ( newPixmap->isNull() ) {
- delete newPixmap;
- ik->origin = Generated;
- ik->pixmap = 0;
- } else {
- ik->origin = SuppliedPixmap;
- ik->pixmap = newPixmap;
- }
- }
-
- if ( !ik->pixmap && ik->origin == Generated ) {
- TQIconFactory *f = factory;
- if ( !f )
- f = defaultFac;
-
- if ( f ) {
- /*
- We set 'origin' to Manufactured half a second too
- early to prevent recursive calls to this function.
- (This can happen if createPixmap() calls
- TQIconSet::pixmap(), which in turn calls this
- function.)
- */
- ik->origin = Manufactured;
- ik->pixmap = f->createPixmap( *iconSet, size, mode, state );
- if ( !ik->pixmap )
- ik->origin = Generated;
- }
- }
- }
- return ik;
-}
-
-/*! \class TQIconSet
-
- \brief The TQIconSet class provides a set of icons with different
- styles and sizes.
-
- \ingroup graphics
- \ingroup images
- \ingroup shared
- \mainclass
-
- A TQIconSet can generate smaller, larger, active, and disabled pixmaps
- from the set of icons it is given. Such pixmaps are used by
- TQToolButton, TQHeader, TQPopupMenu, etc. to show an icon representing a
- particular action.
-
- The simplest use of TQIconSet is to create one from a TQPixmap and then
- use it, allowing TQt to work out all the required icon styles and
- sizes. For example:
-
- \code
- TQToolButton *but = new TQToolButton( TQIconSet( TQPixmap("open.xpm") ), ... );
- \endcode
-
- Using whichever pixmaps you specify as a base, TQIconSet provides a
- set of six icons, each with a \l Size and a \l Mode: Small Normal,
- Small Disabled, Small Active, Large Normal, Large Disabled, and
- Large Active.
-
- An additional set of six icons can be provided for widgets that have
- an "On" or "Off" state, like checkable menu items or toggleable
- toolbuttons. If you provide pixmaps for the "On" state, but not for
- the "Off" state, the TQIconSet will provide the "Off" pixmaps. You may
- specify icons for both states in you wish.
-
- You can set any of the icons using setPixmap().
-
- When you retrieve a pixmap using pixmap(Size, Mode, State),
- TQIconSet will return the icon that has been set or previously
- generated for that size, mode and state combination. If none is
- available, TQIconSet will ask the icon factory. If the icon factory
- cannot provide any (the default), TQIconSet generates a pixmap based
- on the pixmaps it has been given and returns it.
-
- The \c Disabled appearance is computed using an algorithm that
- produces results very similar to those used in Microsoft Windows
- 95. The \c Active appearance is identical to the \c Normal
- appearance unless you use setPixmap() to set it to something
- special.
-
- When scaling icons, TQIconSet uses \link TQImage::smoothScale()
- smooth scaling\endlink, which can partially blend the color component
- of pixmaps. If the results look poor, the best solution
- is to supply pixmaps in both large and small sizes.
-
- You can use the static function setIconSize() to set the preferred
- size of the generated large/small icons. The default small size is
- 22 x 22, while the default large size is 32 x 32. These sizes only
- affect generated icons.
-
- The isGenerated() function returns TRUE if an icon was generated by
- TQIconSet or by a factory; clearGenerated() clears all cached
- pixmaps.
-
- \section1 Making Classes that Use TQIconSet
-
- If you write your own widgets that have an option to set a small
- pixmap, consider allowing a TQIconSet to be set for that pixmap. The
- TQt class TQToolButton is an example of such a widget.
-
- Provide a method to set a TQIconSet, and when you draw the icon, choose
- whichever icon is appropriate for the current state of your widget.
- For example:
- \code
- void MyWidget::drawIcon( TQPainter* p, TQPoint pos )
- {
- p->drawPixmap( pos, icons->pixmap(
- TQIconSet::Small,
- isEnabled() ? TQIconSet::Normal :
- TQIconSet::Disabled,
- isEnabled() ? TQIconSet::On :
- TQIconSet::Off));
- }
- \endcode
-
- You might also make use of the \c Active mode, perhaps making your
- widget \c Active when the mouse is over the widget (see \l
- TQWidget::enterEvent()), while the mouse is pressed pending the
- release that will activate the function, or when it is the currently
- selected item. If the widget can be toggled, the "On" mode might be
- used to draw a different icon.
-
- \img iconset.png TQIconSet
-
- \sa TQIconFactory TQPixmap TQMainWindow::setUsesBigPixmaps()
- \link guibooks.html#fowler GUI Design Handbook: Iconic Label \endlink
-*/
-
-
-/*!
- \enum TQIconSet::Size
-
- This enum type describes the size at which a pixmap is intended to be
- used.
- The currently defined sizes are:
-
- \value Automatic The size of the pixmap is determined from its
- pixel size. This is a useful default.
- \value Small The pixmap is the smaller of two.
- \value Large The pixmap is the larger of two.
-
- If a Small pixmap is not set by TQIconSet::setPixmap(), the Large
- pixmap will be automatically scaled down to the size of a small pixmap
- to generate the Small pixmap when required. Similarly, a Small pixmap
- will be automatically scaled up to generate a Large pixmap. The
- preferred sizes for large/small generated icons can be set using
- setIconSize().
-
- \sa setIconSize() iconSize() setPixmap() pixmap() TQMainWindow::setUsesBigPixmaps()
-*/
-
-/*!
- \enum TQIconSet::Mode
-
- This enum type describes the mode for which a pixmap is intended to be
- used.
- The currently defined modes are:
-
- \value Normal
- Display the pixmap when the user is
- not interacting with the icon, but the
- functionality represented by the icon is available.
- \value Disabled
- Display the pixmap when the
- functionality represented by the icon is not available.
- \value Active
- Display the pixmap when the
- functionality represented by the icon is available and
- the user is interacting with the icon, for example, moving the
- mouse over it or clicking it.
-*/
-
-/*!
- \enum TQIconSet::State
-
- This enum describes the state for which a pixmap is intended to be
- used. The \e state can be:
-
- \value Off Display the pixmap when the widget is in an "off" state
- \value On Display the pixmap when the widget is in an "on" state
-
- \sa setPixmap() pixmap()
-*/
-
-/*!
- Constructs a null icon set.
-
- \sa setPixmap(), reset()
-*/
-TQIconSet::TQIconSet()
- : d( 0 )
-{
-}
-
-/*!
- Constructs an icon set for which the Normal pixmap is \a pixmap,
- which is assumed to be of size \a size.
-
- The default for \a size is \c Automatic, which means that TQIconSet
- will determine whether the pixmap is Small or Large from its pixel
- size. Pixmaps less than the width of a small generated icon are
- considered to be Small. You can use setIconSize() to set the
- preferred size of a generated icon.
-
- \sa setIconSize() reset()
-*/
-TQIconSet::TQIconSet( const TQPixmap& pixmap, Size size )
- : d( 0 )
-{
- reset( pixmap, size );
-}
-
-/*! Creates an iconset which uses the pixmap \a smallPix for for
- displaying a small icon, and the pixmap \a largePix for displaying a
- large icon.
-*/
-TQIconSet::TQIconSet( const TQPixmap& smallPix, const TQPixmap& largePix )
- : d( 0 )
-{
- reset( smallPix, Small );
- reset( largePix, Large );
-}
-
-/*!
- Constructs a copy of \a other. This is very fast.
-*/
-TQIconSet::TQIconSet( const TQIconSet& other )
- : d( other.d )
-{
- if ( d )
- d->ref();
-}
-
-/*!
- Destroys the icon set and frees any allocated resources.
-*/
-TQIconSet::~TQIconSet()
-{
- if ( d && d->deref() )
- delete d;
-}
-
-/*!
- Sets this icon set to use pixmap \a pixmap for the Normal pixmap,
- assuming it to be of size \a size.
-
- This is equivalent to assigning TQIconSet(\a pixmap, \a size) to this
- icon set.
-
- This function does nothing if \a pixmap is a null pixmap.
-*/
-void TQIconSet::reset( const TQPixmap& pixmap, Size size )
-{
- if ( pixmap.isNull() )
- return;
-
- detach();
- normalize( size, pixmap.size() );
- setPixmap( pixmap, size, Normal );
- d->defaultPix = pixmap;
- d->setFactory( 0 );
-}
-
-/*!
- Sets this icon set to provide pixmap \a pixmap for size \a size, mode \a
- mode and state \a state. The icon set may also use \a pixmap for
- generating other pixmaps if they are not explicitly set.
-
- The \a size can be one of Automatic, Large or Small. If Automatic is
- used, TQIconSet will determine if the pixmap is Small or Large from its
- pixel size.
-
- Pixmaps less than the width of a small generated icon are
- considered to be Small. You can use setIconSize() to set the preferred
- size of a generated icon.
-
- This function does nothing if \a pixmap is a null pixmap.
-
- \sa reset()
-*/
-void TQIconSet::setPixmap( const TQPixmap& pixmap, Size size, Mode mode,
- State state )
-{
- if ( pixmap.isNull() )
- return;
-
- normalize( size, pixmap.size() );
-
- detach();
- clearGenerated();
-
- TQIconSetIcon *icon = d->icon( 0, size, mode, state );
- if ( icon->origin == SuppliedFileName ) {
- delete icon->fileName;
- icon->pixmap = 0;
- }
- icon->origin = SuppliedPixmap;
- if ( icon->pixmap == 0 ) {
- icon->pixmap = new TQPixmap( pixmap );
- } else {
- *icon->pixmap = pixmap;
- }
-}
-
-/*!
- \overload
-
- The pixmap is loaded from \a fileName when it becomes necessary.
-*/
-void TQIconSet::setPixmap( const TQString& fileName, Size size, Mode mode,
- State state )
-{
- if ( size == Automatic ) {
- setPixmap( TQPixmap(fileName), size, mode, state );
- } else {
- detach();
- clearGenerated();
-
- TQIconSetIcon *icon = d->icon( 0, size, mode, state );
- if ( icon->origin == SuppliedFileName ) {
- *icon->fileName = fileName;
- } else {
- delete icon->pixmap;
- icon->fileName = new TQString( fileName );
- icon->origin = SuppliedFileName;
- }
- }
-}
-
-/*!
- Returns a pixmap with size \a size, mode \a mode and state \a
- state, generating one if necessary. Generated pixmaps are cached.
-*/
-TQPixmap TQIconSet::pixmap( Size size, Mode mode, State state ) const
-{
- if ( !d ) {
- if ( defaultFac ) {
- TQIconSet *that = (TQIconSet *) this;
- that->detach();
- } else {
- return TQPixmap();
- }
- }
-
- if ( size == Automatic )
- size = Small;
-
- TQIconSetIcon *icon = d->icon( this, size, mode, state );
- if ( icon->pixmap )
- return *icon->pixmap;
- if ( icon->origin == Manufactured ) {
- /*
- This can only occur during the half a second's time when
- the icon is being manufactured. If TQIconFactory somehow
- tries to access the pixmap it's supposed to be creating, it
- will get a null pixmap.
- */
- return TQPixmap();
- }
-
- if ( mode == Active )
- return pixmap( size, Normal, state );
-
- Size otherSize = ( size == Large ) ? Small : Large;
- TQIconSetIcon *otherSizeIcon = d->icon( this, otherSize, mode, state );
-
- if ( state == Off ) {
- if ( mode == Disabled &&
- d->icon(this, size, Normal, Off)->origin != Generated ) {
- icon->pixmap = createDisabled( size, Off );
- } else if ( otherSizeIcon->origin != Generated ) {
- icon->pixmap = createScaled( size, otherSizeIcon->pixmap );
- } else if ( mode == Disabled ) {
- icon->pixmap = createDisabled( size, Off );
- } else if ( !d->defaultPix.isNull() ) {
- icon->pixmap = new TQPixmap( d->defaultPix );
- } else {
- /*
- No icons are available for { TRUE, Normal, Off } and
- { FALSE, Normal, Off }. Try the other 10 combinaisons,
- best ones first.
- */
- const int N = 10;
- static const struct {
- bool sameSize;
- Mode mode;
- State state;
- } tryList[N] = {
- { TRUE, Active, Off },
- { TRUE, Normal, On },
- { TRUE, Active, On },
- { FALSE, Active, Off },
- { FALSE, Normal, On },
- { FALSE, Active, On },
- { TRUE, Disabled, Off },
- { TRUE, Disabled, On },
- { FALSE, Disabled, Off },
- { FALSE, Disabled, On }
- };
-
- for ( int i = 0; i < N; i++ ) {
- bool sameSize = tryList[i].sameSize;
- TQIconSetIcon *tryIcon =
- d->icon( this, sameSize ? size : otherSize,
- tryList[i].mode, tryList[i].state );
- if ( tryIcon->origin != Generated ) {
- if ( sameSize ) {
- if ( tryIcon->pixmap )
- icon->pixmap = new TQPixmap( *tryIcon->pixmap );
- } else {
- icon->pixmap = createScaled( size, tryIcon->pixmap );
- }
- break;
- }
- }
- }
- } else { /* ( state == On ) */
- if ( mode == Normal ) {
- if ( otherSizeIcon->origin != Generated ) {
- icon->pixmap = createScaled( size, otherSizeIcon->pixmap );
- } else {
- icon->pixmap = new TQPixmap( pixmap(size, mode, Off) );
- }
- } else { /* ( mode == Disabled ) */
- TQIconSetIcon *offIcon = d->icon( this, size, mode, Off );
- TQIconSetIcon *otherSizeOffIcon = d->icon( this, otherSize, mode,
- Off );
-
- if ( offIcon->origin != Generated ) {
- if ( offIcon->pixmap )
- icon->pixmap = new TQPixmap( *offIcon->pixmap );
- } else if ( d->icon(this, size, Normal, On)->origin != Generated ) {
- icon->pixmap = createDisabled( size, On );
- } else if ( otherSizeIcon->origin != Generated ) {
- icon->pixmap = createScaled( size, otherSizeIcon->pixmap );
- } else if ( otherSizeOffIcon->origin != Generated ) {
- icon->pixmap = createScaled( size, otherSizeOffIcon->pixmap );
- } else {
- icon->pixmap = createDisabled( size, On );
- }
- }
- }
- if ( icon->pixmap ) {
- return *icon->pixmap;
- } else {
- return TQPixmap();
- }
-}
-
-/*! \overload
- \obsolete
-
- This is the same as pixmap(\a size, \a enabled, \a state).
-*/
-TQPixmap TQIconSet::pixmap( Size size, bool enabled, State state ) const
-{
- return pixmap( size, enabled ? Normal : Disabled, state );
-}
-
-/*!
- \overload
-
- Returns the pixmap originally provided to the constructor or to
- reset(). This is the Normal pixmap of unspecified Size.
-
- \sa reset()
-*/
-TQPixmap TQIconSet::pixmap() const
-{
- if ( !d )
- return TQPixmap();
- return d->defaultPix;
-}
-
-/*!
- Returns TRUE if the pixmap with size \a size, mode \a mode and
- state \a state is generated from other pixmaps; otherwise returns
- FALSE.
-
- A pixmap obtained from a TQIconFactory is considered non-generated.
-*/
-bool TQIconSet::isGenerated( Size size, Mode mode, State state ) const
-{
- if ( !d )
- return TRUE;
- return d->icon( this, size, mode, state )->origin == Generated;
-}
-
-/*!
- Clears all cached pixmaps, including those obtained from an
- eventual TQIconFactory.
-*/
-void TQIconSet::clearGenerated()
-{
- if ( !d )
- return;
-
- for ( int i = 0; i < NumSizes; i++ ) {
- for ( int j = 0; j < NumModes; j++ ) {
- for ( int k = 0; k < NumStates; k++ ) {
- d->icons[i][j][k].clearCached();
- }
- }
- }
-}
-
-/*!
- Installs \a factory as the icon factory for this iconset. The
- icon factory is used to generates pixmaps not set by the user.
-
- If no icon factory is installed, TQIconFactory::defaultFactory()
- is used.
-*/
-void TQIconSet::installIconFactory( TQIconFactory *factory )
-{
- detach();
- d->setFactory( factory );
-}
-
-/*!
- Returns TRUE if the icon set is empty; otherwise returns FALSE.
-*/
-bool TQIconSet::isNull() const
-{
- return !d;
-}
-
-/*!
- Detaches this icon set from others with which it may share data.
-
- You will never need to call this function; other TQIconSet functions
- call it as necessary.
-*/
-void TQIconSet::detach()
-{
- if ( !d ) {
- d = new TQIconSetPrivate;
- return;
- }
- if ( d->count != 1 ) {
- d->deref();
- d = new TQIconSetPrivate( *d );
- }
-}
-
-/*!
- Assigns \a other to this icon set and returns a reference to this
- icon set.
-
- \sa detach()
-*/
-TQIconSet& TQIconSet::operator=( const TQIconSet& other )
-{
- if ( other.d )
- other.d->ref();
-
- if ( d && d->deref() )
- delete d;
- d = other.d;
- return *this;
-}
-
-/*!
- Set the preferred size for all small or large icons that are
- generated after this call. If \a which is Small, sets the preferred
- size of small generated icons to \a size. Similarly, if \a which is
- Large, sets the preferred size of large generated icons to \a size.
-
- Note that cached icons will not be regenerated, so it is recommended
- that you set the preferred icon sizes before generating any icon sets.
- Also note that the preferred icon sizes will be ignored for icon sets
- that have been created using both small and large pixmaps.
-
- \sa iconSize()
-*/
-void TQIconSet::setIconSize( Size which, const TQSize& size )
-{
- widths[(int) which - 1] = size.width();
- heights[(int) which - 1] = size.height();
-}
-
-/*!
- If \a which is Small, returns the preferred size of a small
- generated icon; if \a which is Large, returns the preferred size
- of a large generated icon.
-
- \sa setIconSize()
-*/
-const TQSize& TQIconSet::iconSize( Size which )
-{
- // ### replace 'const TQSize&' with TQSize in TQt 4 and simply this code
- static TQSize size;
- size = TQSize( widths[(int) which - 1], heights[(int) which - 1] );
- return size;
-}
-
-void TQIconSet::normalize( Size& which, const TQSize& pixSize )
-{
- if ( which == Automatic )
- which = pixSize.width() > iconSize( Small ).width() ? Large : Small;
-}
-
-/*!
- Returns a new pixmap that is a copy of \a suppliedPix, scaled to
- the icon size \a size.
-*/
-TQPixmap *TQIconSet::createScaled( Size size, const TQPixmap *suppliedPix ) const
-{
- if ( !suppliedPix || suppliedPix->isNull() )
- return 0;
-
- TQImage img = suppliedPix->convertToImage();
- TQSize imgSize = iconSize( size );
- if ( size == Small ) {
- imgSize = imgSize.boundedTo( img.size() );
- } else {
- imgSize = imgSize.expandedTo( img.size() );
- }
- img = img.smoothScale( imgSize );
-
- TQPixmap *pixmap = new TQPixmap( img );
- if ( !pixmap->mask() ) {
- TQBitmap mask;
- mask.convertFromImage( img.createHeuristicMask(),
- TQt::MonoOnly | TQt::ThresholdDither );
- pixmap->setMask( mask );
- }
- return pixmap;
-}
-
-/*!
- Returns a new pixmap that has a 'disabled' look, taking as its
- base the iconset's icon with size \a size and state \a state.
-*/
-TQPixmap *TQIconSet::createDisabled( Size size, State state ) const
-{
- TQPixmap normalPix = pixmap( size, Normal, state );
- if ( normalPix.isNull() )
- return 0;
-
- TQImage img;
- TQPixmap *pixmap = 0;
- TQBitmap normalMask;
- if ( normalPix.mask() ) {
- normalMask = *normalPix.mask();
- } else {
- img = normalPix.convertToImage();
- normalMask.convertFromImage( img.createHeuristicMask(),
- TQt::MonoOnly | TQt::ThresholdDither );
- }
-
- pixmap = new TQPixmap( normalPix.width() + 1,
- normalPix.height() + 1 );
- const TQColorGroup &dis = TQApplication::tqpalette().disabled();
- pixmap->fill( dis.background() );
-
- TQPainter painter;
- painter.begin( pixmap );
- painter.setPen( dis.base() );
- painter.drawPixmap( 1, 1, normalMask );
- painter.setPen( dis.foreground() );
- painter.drawPixmap( 0, 0, normalMask );
- painter.end();
-
- if ( !normalMask.mask() )
- normalMask.setMask( normalMask );
-
- TQBitmap mask( pixmap->size() );
- mask.fill( TQt::color0 );
- painter.begin( &mask );
- painter.drawPixmap( 0, 0, normalMask );
- painter.drawPixmap( 1, 1, normalMask );
- painter.end();
- pixmap->setMask( mask );
- return pixmap;
-}
-
-/*! \class TQIconFactory
- \ingroup advanced
- \brief The TQIconFactory class is used to create pixmaps for a TQIconSet.
-
- By reimplementing createPixmap(), you can override TQIconSet's
- default algorithm for computing pixmaps not supplied by the user.
-
- Call setAutoDelete(TRUE) if you want the factory to automatically
- delete itself when it is no longer needed by TQIconSet.
-
- \sa TQIconSet
-*/
-
-/*!
- Constructs an icon factory.
-*/
-TQIconFactory::TQIconFactory()
- : autoDel( 0 )
-{
- count = 0;
-}
-
-/*!
- Destroys the object and frees any allocated resources.
-*/
-TQIconFactory::~TQIconFactory()
-{
-}
-
-/*!
- Ceates a pixmap for \a iconSet with a certain \a size, \a mode, and
- \a state. Returns 0 if the default TQIconSet algorithm should be
- used to create a pixmap that wasn't supplied by the user.
-
- It is the caller's responsibility to delete the returned pixmap.
-
- The default implementation always returns 0.
-*/
-TQPixmap *TQIconFactory::createPixmap( const TQIconSet& /* iconSet */,
- TQIconSet::Size /* size */,
- TQIconSet::Mode /* mode */,
- TQIconSet::State /* state */ )
-{
- return 0;
-}
-
-/*!
- \fn void TQIconFactory::setAutoDelete( bool autoDelete )
-
- If \a autoDelete is TRUE, sets the icon factory to automatically
- delete itself when it is no longer referenced by any TQIconSet and
- isn't the default factory. If \a autoDelete is FALSE (the default)
- auto-deletion is disabled.
-
- \sa autoDelete(), defaultFactory()
-*/
-
-/*!
- \fn bool TQIconFactory::autoDelete() const
-
- Returns TRUE if auto-deletion is enabled; otherwise returns FALSE.
-
- \sa setAutoDelete()
-*/
-
-/*!
- Returns the default icon factory.
-
- \sa installDefaultFactory()
-*/
-TQIconFactory *TQIconFactory::defaultFactory()
-{
- if ( !defaultFac ) {
- defaultFac = new TQIconFactory;
- defaultFac->setAutoDelete( TRUE );
- defaultFac->ref();
- q_cleanup_icon_factory.set( &defaultFac );
- }
- return defaultFac;
-}
-
-/*!
- Replaces the default icon factory with \a factory.
-*/
-void TQIconFactory::installDefaultFactory( TQIconFactory *factory )
-{
- if ( !factory )
- return;
-
- factory->ref();
- if ( defaultFac && defaultFac->deref() && defaultFac->autoDelete() )
- delete defaultFac;
- defaultFac = factory;
- q_cleanup_icon_factory.set( &defaultFac );
-}
-
-#endif // TQT_NO_ICONSET