diff options
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqiconset.cpp')
-rw-r--r-- | tqtinterface/qt4/src/kernel/tqiconset.cpp | 949 |
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 [email protected]. -** -** 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 |