summaryrefslogtreecommitdiffstats
path: root/kstyles/kthemestyle/kthemebase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kstyles/kthemestyle/kthemebase.cpp')
-rw-r--r--kstyles/kthemestyle/kthemebase.cpp1828
1 files changed, 0 insertions, 1828 deletions
diff --git a/kstyles/kthemestyle/kthemebase.cpp b/kstyles/kthemestyle/kthemebase.cpp
deleted file mode 100644
index adbf49084..000000000
--- a/kstyles/kthemestyle/kthemebase.cpp
+++ /dev/null
@@ -1,1828 +0,0 @@
-/*
- $Id$
-
- This file is part of the KDE libraries
- Copyright (C) 1999 Daniel M. Duley <mosfet@kde.org>
-
- KDE3 port (C) 2001-2002 Maksim Orlovich <mo002j@mail.rochester.edu>
- Port version 0.9.7
-
- Palette setup code is from TDEApplication,
- Copyright (C) 1997 Matthias Kalle Dalheimer (kalle@kde.org)
- Copyright (C) 1998, 1999, 2000 KDE Team
-
- Includes code portions from the KDE HighColor style.
-
- KDE3 HighColor Style
- Copyright (C) 2001 Karol Szwed <gallium@kde.org>
- (C) 2001 Fredrik H�glund <fredrik@kde.org>
-
- Drawing routines adapted from the KDE2 HCStyle,
- Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org>
- (C) 2000 Dirk Mueller <mueller@kde.org>
- (C) 2001 Martijn Klingens <klingens@kde.org>
-
-
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kthemebase.h"
-#include <kpixmapeffect.h>
-#include <tqimage.h>
-#include <tqpainter.h>
-#include <tqbitmap.h>
-#include <stdlib.h>
-
-#include <tqsettings.h>
-#include <tqapplication.h>
-#include <tqscrollbar.h>
-
-typedef TQMap<TQString, TQString> Prop;
-
-template class TQIntCache<KThemePixmap>
-;
-
-/*
-Bugs:
-Can't delete old slider image when calculating the rotated one for some reason.
-*/
-
-//Shamelessly stolen from TDEConfigBase
-static TQColor readColorEntry( TQSettings* s, const char *pKey,
- const TQColor* pDefault )
-{
- TQColor aRetColor;
- int nRed = 0, nGreen = 0, nBlue = 0;
-
- TQString aValue = s->readEntry( pKey );
- if ( !aValue.isEmpty() )
- {
- if ( aValue.at( 0 ) == '#' )
- {
- aRetColor.setNamedColor( aValue );
- }
- else
- {
- bool bOK;
- // find first part (red)
- int nIndex = aValue.find( ',' );
- if ( nIndex == -1 )
- {
- // return a sensible default -- Bernd
- if ( pDefault )
- aRetColor = *pDefault;
- return aRetColor;
- }
-
- nRed = aValue.left( nIndex ).toInt( &bOK );
-
- // find second part (green)
- int nOldIndex = nIndex;
- nIndex = aValue.find( ',', nOldIndex + 1 );
-
- if ( nIndex == -1 )
- {
- // return a sensible default -- Bernd
- if ( pDefault )
- aRetColor = *pDefault;
- return aRetColor;
- }
- nGreen = aValue.mid( nOldIndex + 1,
- nIndex - nOldIndex - 1 ).toInt( &bOK );
-
- // find third part (blue)
- nBlue = aValue.right( aValue.length() - nIndex - 1 ).toInt( &bOK );
-
- aRetColor.setRgb( nRed, nGreen, nBlue );
- }
- }
- else
- {
-
- if ( pDefault )
- aRetColor = *pDefault;
- }
-
- return aRetColor;
-}
-
-
-static const char * const widgetEntries[] =
- { // unsunken widgets (see header)
- "PushButton", "ComboBox", "HSBarSlider", "VSBarSlider", "Bevel", "ToolButton",
- "ScrollButton", "HScrollDeco", "VScrollDeco", "ComboDeco", "MenuItem", "Tab",
- "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight",
- // sunken widgets
- "PushButtonDown", "ComboBoxDown", "HSBarSliderDown", "VSBarSliderDown",
- "BevelDown", "ToolButtonDown", "ScrollButtonDown", "HScrollDecoDown",
- "VScrollDecoDown", "ComboDecoDown", "MenuItemDown", "TabDown", "SunkenArrowUp",
- "SunkenArrowDown", "SunkenArrowLeft", "SunkenArrowRight",
- // everything else
- "HScrollGroove", "VScrollGroove", "Slider", "SliderGroove", "CheckBoxDown",
- "CheckBox", "CheckBoxTri", "RadioDown", "Radio", "HBarHandle", "VBarHandle",
- "ToolBar", "Splitter", "CheckMark", "MenuBar", "DisableArrowUp",
- "DisableArrowDown", "DisableArrowLeft", "DisableArrowRight", "ProgressBar",
- "ProgressBackground", "MenuBarItem", "Background", "RotSlider",
- "RotInactiveTab", "RotActiveTab",
- };
-
-#define INHERIT_ITEMS 16
-
-
-class KThemeBasePrivate
-{
-public:
- /** Color overrides flags..*/
- bool overrideForeground;
- bool overrideBackground;
- bool overrideSelectForeground;
- bool overrideSelectBackground;
- bool overrideWindowForeground;
- bool overrideWindowBackground;
-
- /**
- * Colors to override defaults with..
- */
- TQColor overrideForegroundCol;
- TQColor overrideBackgroundCol;
- TQColor overrideSelectForegroundCol;
- TQColor overrideSelectBackgroundCol;
- TQColor overrideWindowForegroundCol;
- TQColor overrideWindowBackgroundCol;
-
- int contrast;
-
-
- TQMap <TQString, TQMap<TQString, TQString> > props;
-
- TQMap<const TQPixmap*, TQColor> colorCache;
-
- /*
- A heuristic routine that tries to determine the avergae color of the image
- Wouldn't work for things like sliders, etc.
- */
- TQColor pixmapAveColor( const TQPixmap* p )
- {
- if ( colorCache.contains( p ) )
- return colorCache[ p ];
-
- TQImage to_ave = p->convertToImage();
- double h = 0, s = 0, v = 0;
- int count = 0;
- int dh, ds, dv;
- for ( int x = 0; x < p->width(); x++ )
- {
- TQColor pix( to_ave.pixel( x, p->height() / 2 ) );
- pix.hsv( &dh, &ds, &dv );
- h += dh;
- s += ds;
- v += dv;
- count++;
- }
-
- for ( int y = 0; y < p->height(); y++ )
- {
- TQColor pix( to_ave.pixel( p->width() / 2, y ) );
- pix.hsv( &dh, &ds, &dv );
- h += dh;
- s += ds;
- v += dv;
- count++;
- }
- colorCache[ p ] = TQColor( int( h / count + 0.5 ), int( s / count + 0.5 ), int( v / count + 0.5 ), TQColor::Hsv );
- return colorCache[ p ];
- }
-};
-
-
-
-// This is used to encode the keys. I used to use masks but I think this
-// bitfield is nicer :) I don't know why C++ coders don't use these more..
-// (mosfet)
-struct kthemeKeyData
-{
-unsigned int id :
- 6;
-unsigned int width :
- 12;
-unsigned int height :
- 12;
-unsigned int border :
- 1;
-unsigned int mask :
- 1;
-};
-
-union kthemeKey{
- kthemeKeyData data;
- unsigned int cacheKey;
-};
-
-#define KDE_TQBITMAP_TO_TQPAINTDEVICE(x) TQT_TQPAINTDEVICE_CONST(static_cast<const TQPixmap*>(static_cast<const TQBitmap*>(x)))
-
-void KThemeBase::generateBorderPix( int i )
-{
- // separate pixmap into separate components
- if ( pbPixmaps[ i ] )
- {
- // evidently I have to do masks manually...
- const TQBitmap * srcMask = pbPixmaps[ i ] ->mask();
- TQBitmap destMask( pbWidth[ i ], pbWidth[ i ] );
- TQPixmap tmp( pbWidth[ i ], pbWidth[ i ] );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), 0, 0, pbWidth[ i ], pbWidth[ i ],
- TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0, pbWidth[ i ], pbWidth[ i ],
- TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::TopLeft, tmp );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), pbPixmaps[ i ] ->width() - pbWidth[ i ], 0,
- pbWidth[ i ], pbWidth[ i ], TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), pbPixmaps[ i ] ->width() - pbWidth[ i ],
- 0, pbWidth[ i ], pbWidth[ i ], TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::TopRight, tmp );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
- pbWidth[ i ], pbWidth[ i ], TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
- pbWidth[ i ], pbWidth[ i ], TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::BottomLeft, tmp );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), pbPixmaps[ i ] ->width() - pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
- TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), pbPixmaps[ i ] ->width() - pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
- TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::BottomRight, tmp );
-
- tmp.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
- destMask.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), pbWidth[ i ], 0,
- pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), pbWidth[ i ], 0,
- pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ],
- TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::Top, tmp );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ],
- pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ],
- pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::Bottom, tmp );
-
- tmp.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
- destMask.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), 0, pbWidth[ i ], pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, pbWidth[ i ], pbWidth[ i ],
- pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
-
- pbPixmaps[ i ] ->setBorder( KThemePixmap::Left, tmp );
-
- bitBlt( TQT_TQPAINTDEVICE(&tmp), 0, 0, TQT_TQPAINTDEVICE(pbPixmaps[ i ]), pbPixmaps[ i ] ->width() - pbWidth[ i ],
- pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
- TQt::CopyROP, false );
- if ( srcMask )
- {
- bitBlt( TQT_TQPAINTDEVICE(&destMask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), pbPixmaps[ i ] ->width() - pbWidth[ i ],
- pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
- TQt::CopyROP, false );
- tmp.setMask( destMask );
- }
- pbPixmaps[ i ] ->setBorder( KThemePixmap::Right, tmp );
- }
- else
- tqWarning( "KThemeBase: Tried making border from empty pixmap\n" );
-}
-
-
-void KThemeBase::copyWidgetConfig( int sourceID, int destID, TQString *pixnames,
- TQString *brdnames )
-{
- scaleHints[ destID ] = scaleHints[ sourceID ];
- gradients[ destID ] = gradients[ sourceID ];
- blends[ destID ] = blends[ sourceID ];
- bContrasts[ destID ] = bContrasts[ sourceID ];
- borders[ destID ] = borders[ sourceID ];
- highlights[ destID ] = highlights[ sourceID ];
-
- if ( grLowColors[ sourceID ] )
- grLowColors[ destID ] = new TQColor( *grLowColors[ sourceID ] );
- else
- grLowColors[ destID ] = NULL;
-
- if ( grHighColors[ sourceID ] )
- grHighColors[ destID ] = new TQColor( *grHighColors[ sourceID ] );
- else
- grHighColors[ destID ] = NULL;
-
- if ( colors[ sourceID ] )
- colors[ destID ] = new TQColorGroup( *colors[ sourceID ] );
- else
- colors[ destID ] = NULL;
-
- // pixmap
- pixnames[ destID ] = pixnames[ sourceID ];
- duplicate[ destID ] = false;
- pixmaps[ destID ] = NULL;
- images[ destID ] = NULL;
- if ( !pixnames[ destID ].isEmpty() )
- {
- if ( scaleHints[ sourceID ] == TileScale && blends[ sourceID ] == 0.0 )
- {
- pixmaps[ destID ] = pixmaps[ sourceID ];
- duplicate[ destID ] = true;
- }
- if ( !duplicate[ destID ] )
- {
- pixmaps[ destID ] = loadPixmap( pixnames[ destID ] );
- if ( scaleHints[ destID ] == TileScale && blends[ destID ] == 0.0 )
- images[ destID ] = NULL;
- else
- images[ destID ] = loadImage( pixnames[ destID ] );
- }
- }
-
- // border pixmap
- pbDuplicate[ destID ] = false;
- pbPixmaps[ destID ] = NULL;
- pbWidth[ destID ] = pbWidth[ sourceID ];
- brdnames[ destID ] = brdnames[ sourceID ];
- if ( !brdnames[ destID ].isEmpty() )
- {
- pbPixmaps[ destID ] = pbPixmaps[ sourceID ];
- pbDuplicate[ destID ] = true;
- }
-
- if ( sourceID == ActiveTab && destID == InactiveTab )
- aTabLine = iTabLine;
- else if ( sourceID == InactiveTab && destID == ActiveTab )
- iTabLine = aTabLine;
-}
-
-void KThemeBase::readConfig( TQt::GUIStyle /*style*/ )
-{
-#define PREBLEND_ITEMS 12
- static const WidgetType preBlend[] =
- {
- Slider, IndicatorOn, IndicatorOff,
- ExIndicatorOn, ExIndicatorOff, HScrollDeco, VScrollDeco, HScrollDecoDown,
- VScrollDecoDown, ComboDeco, ComboDecoDown, CheckMark
- };
-
- int i;
- TQString tmpStr;
- TQString pixnames[ WIDGETS ]; // used for duplicate check
- TQString brdnames[ WIDGETS ];
- bool loaded[ WIDGETS ]; // used for preloading for CopyWidget
-
- TQSettings config;
- if (configDirName.isEmpty() || configDirName == ".")
- {
- TDEStyleDirs::dirs()->addToSearch( "themerc", config );
- }
- else config.insertSearchPath( TQSettings::Unix, configDirName );
-
- applyConfigFile( config );
-
- d->contrast = config.readNumEntry( configFileName + "KDE/contrast", 7 );
-
-
-
- for ( i = 0; i < INHERIT_ITEMS; ++i )
- applyResourceGroup( &config, i );
- for ( ; i < INHERIT_ITEMS*2; ++i )
- {
- if ( config.entryList( configFileName + widgetEntries[ i ] ).size() )
- applyResourceGroup( &config, i );
-#ifndef Q_WS_QWS //FIXME
-
- else
- {
- Prop& copyProp = d->props[ widgetEntries[ i ] ];
- copyProp[ "CopyWidget" ] = TQString( widgetEntries[ i - INHERIT_ITEMS ] );
- }
-#endif
-
- }
- for ( ; i < WIDGETS; ++i )
- applyResourceGroup( &config, i );
- applyMiscResourceGroup( &config );
-
- // initialize defaults that may not be read
- for ( i = 0; i < WIDGETS; ++i )
- loaded[ i ] = false;
- btnXShift = btnYShift = focus3DOffset = 0;
- aTabLine = iTabLine = true;
- roundedButton = roundedCombo = roundedSlider = focus3D = false;
- splitterWidth = 10;
-
- //Handle the rotated background separately..
- d->props[ widgetEntries[ RotSliderGroove ] ] = d->props[ widgetEntries[ SliderGroove ] ];
- d->props[ widgetEntries[ RotInactiveTab ] ] = d->props[ widgetEntries[ InactiveTab ] ];
- d->props[ widgetEntries[ RotActiveTab ] ] = d->props[ widgetEntries[ ActiveTab ] ];
-
- // misc items
- readMiscResourceGroup();
-
-
- for ( i = 0; i < WIDGETS; ++i )
- readResourceGroup( i, pixnames, brdnames, loaded );
-
- if ( pixmaps[ RotSliderGroove ] )
- {
- TQWMatrix r270; //TODO: 90 if reverse?
- r270.rotate( 270 );
- KThemePixmap* bf = new KThemePixmap( pixmaps[ RotSliderGroove ], pixmaps[ RotSliderGroove ] ->xForm( r270 ) ); //
- pixmaps[ RotSliderGroove ] = bf;
- if ( images[ RotSliderGroove ] )
- {
- delete images[ RotSliderGroove ];
- images[ RotSliderGroove ] = new TQImage( bf->convertToImage() );
- }
- }
-
- if ( pixmaps[ RotActiveTab ] )
- {
- TQWMatrix r180;
- r180.rotate( 180 );
- KThemePixmap* bf = new KThemePixmap( pixmaps[ RotActiveTab ], pixmaps[ RotActiveTab ] ->xForm( r180 ) );
-
- pixmaps[ RotActiveTab ] = bf;
- if ( images[ RotActiveTab ] )
- {
- delete images[ RotActiveTab ];
- images[ RotActiveTab ] = new TQImage( bf->convertToImage() );
- }
- }
-
- if ( pixmaps[ RotInactiveTab ] )
- {
- TQWMatrix r180;
- r180.rotate( 180 );
- KThemePixmap* bf = new KThemePixmap( pixmaps[ RotInactiveTab ], pixmaps[ RotInactiveTab ] ->xForm( r180 ) );
-
- pixmaps[ RotInactiveTab ] = bf;
- if ( images[ RotInactiveTab ] )
- {
- delete images[ RotInactiveTab ];
- images[ RotInactiveTab ] = new TQImage( bf->convertToImage() );
- }
- }
-
- // Handle preblend items
- for ( i = 0; i < PREBLEND_ITEMS; ++i )
- {
- if ( pixmaps[ preBlend[ i ] ] != NULL && blends[ preBlend[ i ] ] != 0.0 )
- blend( preBlend[ i ] );
- }
-
- d->props.clear();
-}
-
-KThemeBase::KThemeBase( const TQString& dir, const TQString & configFile )
- : TDEStyle( FilledFrameWorkaround ), configFileName( configFile )
-{
- d = new KThemeBasePrivate;
- if ( configFileName.isEmpty() )
- configFileName = "kstylerc";
-
-
- configDirName = dir;
- //Strip of rc from the configFileName
- if ( configFileName.endsWith( "rc" ) )
- {
- configFileName.truncate( configFileName.length() - 2 ); //Get rid of rc..
- }
- //else SCREAM!!
-
-
- configFileName = "/" + configFileName + "/";
-
- readConfig( TQt::WindowsStyle );
- cache = new KThemeCache( cacheSize );
-
- switch ( scrollBarLayout() )
- {
- case SBBottomLeft:
- setScrollBarType( NextStyleScrollBar );
- break;
- case SBBottomRight:
- setScrollBarType( PlatinumStyleScrollBar );
- break;
- case SBOpposite:
- break;
- //Do nothing, this type already set..
- }
- ;
-}
-
-void KThemeBase::applyConfigFile( TQSettings& config )
-{
- TQStringList keys = config.entryList( configFileName );
-
- if ( keys.contains( "foreground" ) )
- {
- d->overrideForeground = true;
- d->overrideForegroundCol = readColorEntry( &config, ( configFileName + "foreground" ).latin1(), 0 );
- }
- else
- d->overrideForeground = false;
-
- if ( keys.contains( "background" ) )
- {
- d->overrideBackground = true;
- d->overrideBackgroundCol = readColorEntry( &config, ( configFileName + "background" ).latin1(), 0 );
- }
- else
- d->overrideBackground = false;
-
-
-
- if ( keys.contains( "selectForeground" ) )
- {
- d->overrideSelectForeground = true;
- d->overrideSelectForegroundCol = readColorEntry( &config, ( configFileName + "selectForeground" ).latin1(), 0 );
- }
- else
- d->overrideSelectForeground = false;
-
- if ( keys.contains( "selectBackground" ) )
- {
- d->overrideSelectBackground = true;
- d->overrideSelectBackgroundCol = readColorEntry( &config, ( configFileName + "selectBackground" ).latin1(), 0 );
- }
- else
- d->overrideSelectBackground = false;
-
- if ( keys.contains( "windowBackground" ) )
- {
- d->overrideWindowBackground = true;
- d->overrideWindowBackgroundCol = readColorEntry( &config, ( configFileName + "windowBackground" ).latin1(), 0 );
- }
- else
- d->overrideWindowBackground = false;
-
-
- if ( keys.contains( "windowForeground" ) )
- {
- d->overrideWindowForeground = true;
- d->overrideWindowForegroundCol = readColorEntry( &config, ( configFileName + "windowForeground" ).latin1(), 0 );
- }
- else
- d->overrideWindowForeground = false;
-
-
-#ifndef Q_WS_QWS //FIXME
-
- for ( int input = 0; input < WIDGETS; ++input )
- {
- d->props.erase( widgetEntries[ input ] );
- }
- d->props.erase( "Misc" );
-#endif
-}
-
-KThemeBase::~KThemeBase()
-{
- int i;
- for ( i = 0; i < WIDGETS; ++i )
- {
- if ( !duplicate[ i ] )
- {
- if ( images[ i ] )
- delete images[ i ];
- if ( pixmaps[ i ] )
- delete pixmaps[ i ];
- }
- if ( !pbDuplicate[ i ] && pbPixmaps[ i ] )
- delete pbPixmaps[ i ];
- if ( colors[ i ] )
- delete( colors[ i ] );
- if ( grLowColors[ i ] )
- delete( grLowColors[ i ] );
- if ( grHighColors[ i ] )
- delete( grHighColors[ i ] );
- }
- TDEStyleDirs::release();
- delete cache;
- delete d;
-}
-
-TQImage* KThemeBase::loadImage( const TQString &name )
-{
- TQImage * image = new TQImage;
- TQString path = TDEStyleDirs::dirs()->findResource( "themepixmap",name );
- image->load( path );
- if ( !image->isNull() )
- return ( image );
- tqWarning( "KThemeBase: Unable to load image %s\n", name.latin1() );
- delete image;
- return ( NULL );
-}
-
-KThemePixmap* KThemeBase::loadPixmap( const TQString &name )
-{
- KThemePixmap * pixmap = new KThemePixmap( false );
- TQString path = TDEStyleDirs::dirs()->findResource( "themepixmap", name );
- pixmap->load( path );
- if ( !pixmap->isNull() )
- return pixmap;
- tqWarning( "KThemeBase: Unable to load pixmap %s\n", name.latin1() );
- delete pixmap;
- return ( NULL );
-}
-
-
-KThemePixmap* KThemeBase::scale( int w, int h, WidgetType widget ) const
-{
- if ( scaleHints[ widget ] == FullScale )
- {
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
- pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->pixmap( w, h, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale,
- widget );
- else
- tqWarning( "We would have inserted a null pixmap!\n" );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale, widget );
- TQImage tmpImg = images[ widget ] ->smoothScale( w, h );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->convertFromImage( tmpImg );
- if ( blends[ widget ] != 0.0 )
- blend( widget );
- }
- }
- }
- else if ( scaleHints[ widget ] == HorizontalScale )
- {
- if ( pixmaps[ widget ] ->width() != w )
- {
- KThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::HorizontalScale, widget );
- else
- tqWarning( "We would have inserted a null pixmap!\n" );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- cache->insert( pixmaps[ widget ], KThemeCache::HorizontalScale, widget );
- TQImage tmpImg = images[ widget ] ->
- smoothScale( w, images[ widget ] ->height() );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->convertFromImage( tmpImg );
- if ( blends[ widget ] != 0.0 )
- blend( widget );
- }
- }
- }
- else if ( scaleHints[ widget ] == VerticalScale )
- {
- if ( pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->verticalPixmap( w, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::VerticalScale, widget );
- else
- tqWarning( "We would have inserted a null pixmap!\n" );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- cache->insert( pixmaps[ widget ], KThemeCache::VerticalScale, widget );
- TQImage tmpImg =
- images[ widget ] ->smoothScale( images[ widget ] ->width(), h );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->convertFromImage( tmpImg );
- if ( blends[ widget ] != 0.0 )
- blend( widget );
- }
- }
- }
- // If blended tile here so the blend is scaled properly
- else if ( scaleHints[ widget ] == TileScale && blends[ widget ] != 0.0 )
- {
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
- pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->pixmap( w, h, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale, widget );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale, widget );
- TQPixmap tile;
- tile.convertFromImage( *images[ widget ] );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->resize( w, h );
- TQPainter p( pixmaps[ widget ] );
- p.drawTiledPixmap( 0, 0, w, h, tile );
- if ( blends[ widget ] != 0.0 )
- blend( widget );
- }
- }
- }
- return ( pixmaps[ widget ] );
-}
-
-KThemePixmap* KThemeBase::scaleBorder( int w, int h, WidgetType widget ) const
-{
- KThemePixmap * pixmap = NULL;
- if ( !pbPixmaps[ widget ] && !pbWidth[ widget ] )
- return ( NULL );
- pixmap = cache->pixmap( w, h, widget, true );
- if ( pixmap )
- {
- pixmap = new KThemePixmap( *pixmap );
- }
- else
- {
- pixmap = new KThemePixmap();
- pixmap->resize( w, h );
- TQBitmap mask;
- mask.resize( w, h );
- mask.fill( color0 );
- TQPainter mPainter;
- mPainter.begin( &mask );
-
- TQPixmap *tmp = borderPixmap( widget ) ->border( KThemePixmap::TopLeft );
- const TQBitmap *srcMask = tmp->mask();
- int bdWidth = tmp->width();
-
- bitBlt( TQT_TQPAINTDEVICE(pixmap), 0, 0, TQT_TQPAINTDEVICE(tmp), 0, 0, bdWidth, bdWidth,
- TQt::CopyROP, false );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), 0, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0, bdWidth, bdWidth,
- TQt::CopyROP, false );
- else
- mPainter.fillRect( 0, 0, bdWidth, bdWidth, color1 );
-
-
- tmp = borderPixmap( widget ) ->border( KThemePixmap::TopRight );
- srcMask = tmp->mask();
- bitBlt( TQT_TQPAINTDEVICE(pixmap), w - bdWidth, 0, TQT_TQPAINTDEVICE(tmp), 0, 0, bdWidth,
- bdWidth, TQt::CopyROP, false );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), w - bdWidth, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0, bdWidth,
- bdWidth, TQt::CopyROP, false );
- else
- mPainter.fillRect( w - bdWidth, 0, bdWidth, bdWidth, color1 );
-
- tmp = borderPixmap( widget ) ->border( KThemePixmap::BottomLeft );
- srcMask = tmp->mask();
- bitBlt( TQT_TQPAINTDEVICE(pixmap), 0, h - bdWidth, TQT_TQPAINTDEVICE(tmp), 0, 0, bdWidth,
- bdWidth, TQt::CopyROP, false );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), 0, h - bdWidth, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0, bdWidth,
- bdWidth, TQt::CopyROP, false );
- else
- mPainter.fillRect( 0, h - bdWidth, bdWidth, bdWidth, color1 );
-
- tmp = borderPixmap( widget ) ->border( KThemePixmap::BottomRight );
- srcMask = tmp->mask();
- bitBlt( TQT_TQPAINTDEVICE(pixmap), w - bdWidth, h - bdWidth, TQT_TQPAINTDEVICE(tmp), 0, 0,
- bdWidth, bdWidth, TQt::CopyROP, false );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), w - bdWidth, h - bdWidth, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0,
- bdWidth, bdWidth, TQt::CopyROP, false );
- else
- mPainter.fillRect( w - bdWidth, h - bdWidth, bdWidth, bdWidth, color1 );
-
- TQPainter p;
- p.begin( pixmap );
- if ( w - bdWidth * 2 > 0 )
- {
- tmp = borderPixmap( widget ) ->border( KThemePixmap::Top );
- srcMask = tmp->mask();
- p.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *tmp );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), bdWidth, 0, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0,
- w - bdWidth * 2, bdWidth, TQt::CopyROP, false );
- else
- mPainter.fillRect( bdWidth, 0, w - bdWidth * 2, bdWidth, color1 );
-
- tmp = borderPixmap( widget ) ->border( KThemePixmap::Bottom );
- srcMask = tmp->mask();
- p.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
- *tmp );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), bdWidth, h - bdWidth, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0,
- w - bdWidth * 2, bdWidth, TQt::CopyROP, false );
- else
- mPainter.fillRect( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
- color1 );
- }
- if ( h - bdWidth * 2 > 0 )
- {
- tmp = borderPixmap( widget ) ->border( KThemePixmap::Left );
- srcMask = tmp->mask();
- p.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *tmp );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), 0, bdWidth, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0,
- bdWidth, h - bdWidth * 2, TQt::CopyROP, false );
- else
- mPainter.fillRect( 0, bdWidth, bdWidth, h - bdWidth * 2, color1 );
-
- tmp = borderPixmap( widget ) ->border( KThemePixmap::Right );
- srcMask = tmp->mask();
- p.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2,
- *tmp );
- if ( srcMask )
- bitBlt( TQT_TQPAINTDEVICE(&mask), w - bdWidth, bdWidth, KDE_TQBITMAP_TO_TQPAINTDEVICE(srcMask), 0, 0,
- bdWidth, h - bdWidth * 2, TQt::CopyROP, false );
- else
- mPainter.fillRect( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, color1 );
- }
- p.end();
- mPainter.end();
- pixmap->setMask( mask );
- cache->insert( pixmap, KThemeCache::FullScale, widget, true );
- if ( !pixmap->mask() )
- tqWarning( "No mask for border pixmap!\n" );
- }
- return ( pixmap );
-}
-
-
-KThemePixmap* KThemeBase::blend( WidgetType widget ) const
-{
- KPixmapEffect::GradientType g;
- switch ( gradients[ widget ] )
- {
- case GrHorizontal:
- g = KPixmapEffect::HorizontalGradient;
- break;
- case GrVertical:
- g = KPixmapEffect::VerticalGradient;
- break;
- case GrPyramid:
- g = KPixmapEffect::PyramidGradient;
- break;
- case GrRectangle:
- g = KPixmapEffect::RectangleGradient;
- break;
- case GrElliptic:
- g = KPixmapEffect::EllipticGradient;
- break;
- default:
- g = KPixmapEffect::DiagonalGradient;
- break;
- }
- KPixmapEffect::blend( *pixmaps[ widget ], blends[ widget ], *grLowColors[ widget ],
- g, false );
- return ( pixmaps[ widget ] );
-}
-
-KThemePixmap* KThemeBase::gradient( int w, int h, WidgetType widget ) const
-{
- if ( gradients[ widget ] == GrVertical )
- {
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->verticalPixmap( h, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::VerticalScale,
- widget );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::VerticalScale,
- widget );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->resize( w, h );
- KPixmapEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
- *grLowColors[ widget ],
- KPixmapEffect::VerticalGradient );
- }
- }
- }
- else if ( gradients[ widget ] == GrHorizontal )
- {
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w )
- {
- KThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ],
- KThemeCache::HorizontalScale, widget );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ],
- KThemeCache::HorizontalScale, widget );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->resize( w, h );
- KPixmapEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
- *grLowColors[ widget ],
- KPixmapEffect::HorizontalGradient );
- }
- }
- }
- else if ( gradients[ widget ] == GrReverseBevel )
- {
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
- pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->pixmap( w, h, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale,
- widget );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale,
- widget );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->resize( w, h );
-
- KPixmap s;
- int offset = decoWidth( widget );
- s.resize( w - offset * 2, h - offset * 2 );
- TQColor lc( *grLowColors[ widget ] );
- TQColor hc( *grHighColors[ widget ] );
- if ( bevelContrast( widget ) )
- {
- int bc = bevelContrast( widget );
- // want single increments, not factors like light()/dark()
- lc.setRgb( lc.red() - bc, lc.green() - bc, lc.blue() - bc );
- hc.setRgb( hc.red() + bc, hc.green() + bc, hc.blue() + bc );
- }
- KPixmapEffect::gradient( *pixmaps[ widget ],
- lc, hc,
- KPixmapEffect::DiagonalGradient );
- KPixmapEffect::gradient( s, *grHighColors[ widget ],
- *grLowColors[ widget ],
- KPixmapEffect::DiagonalGradient );
- bitBlt( pixmaps[ widget ], offset, offset, &s, 0, 0, w - offset * 2,
- h - offset * 2, TQt::CopyROP );
- }
- }
- }
- else
- {
- KPixmapEffect::GradientType g;
- switch ( gradients[ widget ] )
- {
- case GrPyramid:
- g = KPixmapEffect::PyramidGradient;
- break;
- case GrRectangle:
- g = KPixmapEffect::RectangleGradient;
- break;
- case GrElliptic:
- g = KPixmapEffect::EllipticGradient;
- break;
- default:
- g = KPixmapEffect::DiagonalGradient;
- break;
- }
- if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
- pixmaps[ widget ] ->height() != h )
- {
- KThemePixmap * cachePix = cache->pixmap( w, h, widget );
- if ( cachePix )
- {
- cachePix = new KThemePixmap( *cachePix );
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale,
- widget );
- pixmaps[ widget ] = cachePix;
- }
- else
- {
- if ( pixmaps[ widget ] )
- cache->insert( pixmaps[ widget ], KThemeCache::FullScale,
- widget );
- pixmaps[ widget ] = new KThemePixmap;
- pixmaps[ widget ] ->resize( w, h );
- KPixmapEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
- *grLowColors[ widget ], g );
- }
- }
- }
- return ( pixmaps[ widget ] );
-}
-
-KThemePixmap* KThemeBase::scalePixmap( int w, int h, WidgetType widget ) const
-{
-
- if ( gradients[ widget ] && blends[ widget ] == 0.0 )
- return ( gradient( w, h, widget ) );
-
- return ( scale( w, h, widget ) );
-}
-
-TQColorGroup* KThemeBase::makeColorGroup( const TQColor &fg, const TQColor &bg,
- TQt::GUIStyle )
-{
- if ( shading == Motif )
- {
- int highlightVal, lowlightVal;
- highlightVal = 100 + ( 2 * d->contrast + 4 ) * 16 / 10;
- lowlightVal = 100 + ( ( 2 * d->contrast + 4 ) * 10 );
- return ( new TQColorGroup( fg, bg, bg.light( highlightVal ),
- bg.dark( lowlightVal ), bg.dark( 120 ),
- fg, TQApplication::palette().active().base() ) );
- }
- else
- return ( new TQColorGroup( fg, bg, bg.light( 150 ), bg.dark(),
- bg.dark( 120 ), fg,
- TQApplication::palette().active().base() ) );
-}
-
-
-void KThemeBase::applyMiscResourceGroup( TQSettings *config )
-{
-#ifndef Q_WS_QWS //FIXME
- d->props.erase( "Misc" ); // clear the old property
-
- TQString base = configFileName + "Misc/";
-
- Prop& prop = d->props[ "Misc" ];
- TQString tmpStr;
-
- tmpStr = config->readEntry( base + "SButtonPosition" );
- if ( tmpStr == "BottomLeft" )
- prop[ "SButtonPosition" ] = TQString::number( ( int ) SBBottomLeft );
- else if ( tmpStr == "BottomRight" )
- prop[ "SButtonPosition" ] = TQString::number( ( int ) SBBottomRight );
- else
- {
- if ( tmpStr != "Opposite" && !tmpStr.isEmpty() )
- tqWarning( "KThemeBase: Unrecognized sb button option %s, using Opposite.\n", tmpStr.latin1() );
- ;
- prop[ "SButtonPosition" ] = TQString::number( ( int ) SBOpposite );
- }
- tmpStr = config->readEntry( base + "ArrowType" );
- if ( tmpStr == "Small" )
- prop[ "ArrowType" ] = TQString::number( ( int ) SmallArrow );
- else if ( tmpStr == "3D" )
- prop[ "ArrowType" ] = TQString::number( ( int ) MotifArrow );
- else
- {
- if ( tmpStr != "Normal" && !tmpStr.isEmpty() )
- tqWarning( "KThemeBase: Unrecognized arrow option %s, using Normal.\n", tmpStr.latin1() );
- prop[ "ArrowType" ] = TQString::number( ( int ) LargeArrow );
- }
- tmpStr = config->readEntry( base + "ShadeStyle" );
- if ( tmpStr == "Motif" )
- prop[ "ShadeStyle" ] = TQString::number( ( int ) Motif );
- else if ( tmpStr == "Next" )
- prop[ "ShadeStyle" ] = TQString::number( ( int ) Next );
- else if ( tmpStr == "KDE" )
- prop[ "ShadeStyle" ] = TQString::number( ( int ) KDE );
- else
- prop[ "ShadeStyle" ] = TQString::number( ( int ) Windows );
-
- prop[ "FrameWidth" ] = TQString::number( config->readNumEntry( base + "FrameWidth", 2 ) );
- prop[ "Cache" ] = TQString::number( config->readNumEntry( base + "Cache", 1024 ) );
- prop[ "ScrollBarExtent" ] = TQString::number( config->readNumEntry( base + "ScrollBarExtent", 16 ) );
-#endif
-}
-
-static int readNumEntry( Prop& prop, TQString setting, int def )
-{
- bool ok;
- TQString s_val = prop[ setting ];
- int val = s_val.toInt( &ok );
- if ( ok )
- return val;
- return def;
-}
-
-static TQColor readColorEntry( Prop& prop, TQString setting, const TQColor& def )
-{
- TQString s_val = prop[ setting ];
- if ( !s_val.isEmpty() )
- {
- TQColor c( s_val );
- return c;
- }
- return def;
-}
-
-void KThemeBase::readMiscResourceGroup()
-{
-#ifndef Q_WS_QWS //FIXME
- Prop & prop = d->props[ "Misc" ];
-
- sbPlacement = ( SButton ) readNumEntry( prop, "SButtonPosition",
- ( int ) SBOpposite );
- arrowStyle = ( ArrowStyle ) readNumEntry( prop, "ArrowType",
- ( int ) LargeArrow );
- shading = ( ShadeStyle ) readNumEntry( prop, "ShadeStyle", ( int ) Windows );
- defaultFrame = readNumEntry( prop, "FrameWidth", 2 );
- cacheSize = readNumEntry( prop, "Cache", 1024 );
- sbExtent = readNumEntry( prop, "ScrollBarExtent", 16 );
-#endif
-}
-
-
-void KThemeBase::applyResourceGroup( TQSettings *config, int i )
-{
-#ifndef Q_WS_QWS //FIXME
- TQString tmpStr;
- int tmpVal;
-
- // clear the old property
- d->props.erase( widgetEntries[ i ] );
-
- TQString base = configFileName + widgetEntries[ i ] + "/";
-
- Prop& prop = d->props[ widgetEntries[ i ] ];
-
- tmpStr = config->readEntry( base + "CopyWidget", "" );
- prop[ "CopyWidget" ] = tmpStr;
- if ( !tmpStr.isEmpty() )
- {
- return ;
- }
-
- tmpStr = config->readEntry( base + "Scale" );
- if ( tmpStr == "Full" )
- tmpVal = ( int ) FullScale;
- else if ( tmpStr == "Horizontal" )
- tmpVal = ( int ) HorizontalScale;
- else if ( tmpStr == "Vertical" )
- tmpVal = ( int ) VerticalScale;
- else
- {
- if ( tmpStr != "Tile" && !tmpStr.isEmpty() )
- tqWarning( "KThemeBase: Unrecognized scale option %s, using Tile.\n", tmpStr.latin1() );
- tmpVal = ( int ) TileScale;
- }
- prop[ "ScaleHint" ] = TQString::number( tmpVal );
-
- // Gradient type
- tmpStr = config->readEntry( base + "Gradient" );
- if ( tmpStr == "Diagonal" )
- tmpVal = ( int ) GrDiagonal;
- else if ( tmpStr == "Horizontal" )
- tmpVal = ( int ) GrHorizontal;
- else if ( tmpStr == "Vertical" )
- tmpVal = ( int ) GrVertical;
- else if ( tmpStr == "Pyramid" )
- tmpVal = ( int ) GrPyramid;
- else if ( tmpStr == "Rectangle" )
- tmpVal = ( int ) GrRectangle;
- else if ( tmpStr == "Elliptic" )
- tmpVal = ( int ) GrElliptic;
- else if ( tmpStr == "ReverseBevel" )
- tmpVal = ( int ) GrReverseBevel;
- else
- {
- if ( tmpStr != "None" && !tmpStr.isEmpty() )
- tqWarning( "KThemeBase: Unrecognized gradient option %s, using None.\n", tmpStr.latin1() );
- tmpVal = ( int ) GrNone;
- }
- prop[ "Gradient" ] = TQString::number( tmpVal );
-
- // Blend intensity
- tmpStr.setNum( config->readDoubleEntry( base + "BlendIntensity", 0.0 ) );
- prop[ "Blend" ] = tmpStr;
-
- // Bevel contrast
- prop[ "BContrast" ] = TQString::number( config->readNumEntry( base + "BevelContrast", 0 ) );
-
- // Border width
- prop[ "Border" ] = TQString::number( config->readNumEntry( base + "Border", 1 ) );
-
- // Highlight width
- prop[ "Highlight" ] = TQString::number( config->readNumEntry( base + "Highlight", 1 ) );
-
- TQStringList keys = config->entryList( base );
-
- // Gradient low color or blend background
- if ( keys.contains( "GradientLow" ) )
- prop[ "GrLow" ] = readColorEntry( config, TQString( base + "GradientLow" ).latin1(),
- &TQApplication::palette().active().background() ).name();
-
- // Gradient high color
- if ( keys.contains( "GradientHigh" ) )
- prop[ "GrHigh" ] = readColorEntry( config, TQString( base + "GradientHigh" ).latin1(),
- &TQApplication::palette().active().foreground() ).name();
-
- // Extended color attributes
- if ( keys.contains( "Foreground" ) || keys.contains( "Background" ) )
- {
- TQColor fg, bg;
- if ( keys.contains( "Background" ) )
- bg = readColorEntry( config, TQString( base + "Background" ).latin1(), &bg );
- if ( keys.contains( "Foreground" ) )
- fg = readColorEntry( config, TQString( base + "Foreground" ).latin1(), &fg );
- prop[ "Foreground" ] = fg.name();
- prop[ "Background" ] = bg.name();
-
- }
- else
- colors[ i ] = NULL;
-
- // Pixmap
- tmpStr = config->readEntry( base + "Pixmap", "" );
- if ( !tmpStr.isEmpty() )
- prop[ "Pixmap" ] = tmpStr;
- // Pixmap border
- tmpStr = config->readEntry( base + "PixmapBorder", "" );
- if ( !tmpStr.isEmpty() )
- {
- prop[ "PixmapBorder" ] = tmpStr;
- prop[ "PixmapBWidth" ] = TQString::number(
- config->readNumEntry( base + "PixmapBWidth", 0 ) );
- }
-
- // Various widget specific settings. This was more efficient when bunched
- // together in the misc group, but this makes an easier to read config.
- if ( i == SliderGroove )
- prop[ "SmallGroove" ] = TQString::number(
- config->readBoolEntry( base + "SmallGroove", false ) );
- else if ( i == ActiveTab || i == InactiveTab )
- prop[ "BottomLine" ] = TQString::number(
- config->readBoolEntry( base + "BottomLine", true ) );
- else if ( i == Splitter )
- prop[ "Width" ] = TQString::number( config->readNumEntry( base + "Width", 10 ) );
- else if ( i == ComboBox || i == ComboBoxDown )
- {
- if ( keys.contains( "Round" ) )
- prop[ "Round" ] = TQString::number( config->readBoolEntry( base + "Round", false ) );
- else
- prop[ "Round" ] = "5000"; // invalid, used w/multiple groups
-
- }
- else if ( i == PushButton || i == PushButtonDown )
- {
- if ( keys.contains( "XShift" ) )
- prop[ "XShift" ] = TQString::number( config->readNumEntry( base + "XShift", 0 ) );
- else
- prop[ "XShift" ] = "5000";
- if ( keys.contains( "YShift" ) )
- prop[ "YShift" ] = TQString::number( config->readNumEntry( base + "YShift", 0 ) );
- else
- prop[ "YShift" ] = "5000";
- if ( keys.contains( "3DFocusRect" ) )
- prop[ "3DFRect" ] = TQString::number( config->
- readBoolEntry( base + "3DFocusRect", false ) );
- else
- prop[ "3DFRect" ] = "5000";
- if ( keys.contains( "3DFocusOffset" ) )
- prop[ "3DFOffset" ] = TQString::number( config->
- readBoolEntry( base + "3DFocusOffset", 0 ) );
- else
- prop[ "3DFOffset" ] = "5000";
- if ( keys.contains( "Round" ) )
- prop[ "Round" ] = TQString::number( config->readBoolEntry( base + "Round", false ) );
- else
- prop[ "Round" ] = "5000";
- }
-#endif
-}
-
-void KThemeBase::readResourceGroup( int i, TQString *pixnames, TQString *brdnames,
- bool *loadArray )
-{
-#ifndef Q_WS_QWS //FIXME
- if ( loadArray[ i ] == true )
- {
- return ; // already been preloaded.
- }
-
- int tmpVal;
- Prop prop = d->props[ widgetEntries[ i ] ];
- TQString tmpStr;
-
- tmpStr = prop[ "CopyWidget" ];
- if ( !tmpStr.isEmpty() )
- { // Duplicate another widget's config
- int sIndex;
- loadArray[ i ] = true;
- for ( sIndex = 0; sIndex < WIDGETS; ++sIndex )
- {
- if ( tmpStr == widgetEntries[ sIndex ] )
- {
- if ( !loadArray[ sIndex ] ) // hasn't been loaded yet
- readResourceGroup( sIndex, pixnames, brdnames,
- loadArray );
- break;
- }
- }
- if ( loadArray[ sIndex ] )
- {
- copyWidgetConfig( sIndex, i, pixnames, brdnames );
- }
- else
- tqWarning( "KThemeBase: Unable to identify source widget for %s\n", widgetEntries[ i ] );
- return ;
- }
- // special inheritance for disabled arrows (these are tri-state unlike
- // the rest of what we handle).
- for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal )
- {
- if ( tmpVal == i )
- {
- tmpStr = prop[ "Pixmap" ];
- if ( tmpStr.isEmpty() )
- {
- copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames,
- brdnames );
- return ;
- }
- }
- }
-
- // Scale hint
- scaleHints[ i ] = ( ScaleHint ) readNumEntry( prop, "ScaleHint", ( int ) TileScale );
- gradients[ i ] = ( Gradient ) readNumEntry( prop, "Gradient", ( int ) GrNone );
-
- // Blend intensity
- tmpStr = prop[ "Blend" ];
- if ( tmpStr.isEmpty() )
- tmpStr = TQString::fromLatin1( "0.0" );
- blends[ i ] = tmpStr.toFloat();
-
- // Bevel contrast
- bContrasts[ i ] = readNumEntry( prop, "BContrast", 0 );
-
- // Border width
- borders[ i ] = readNumEntry( prop, "Border", 1 );
-
- // Highlight width
- highlights[ i ] = readNumEntry( prop, "Highlight", 1 );
-
- // Gradient low color or blend background
- if ( gradients[ i ] != GrNone || blends[ i ] != 0.0 )
- grLowColors[ i ] =
- new TQColor( readColorEntry( prop, "GrLow",
- TQApplication::palette().active().
- background() ) );
- else
- grLowColors[ i ] = NULL;
-
- // Gradient high color
- if ( gradients[ i ] != GrNone )
- grHighColors[ i ] =
- new TQColor( readColorEntry( prop, "GrHigh",
- TQApplication::palette().active().
- background() ) );
- else
- grHighColors[ i ] = NULL;
-
- // Extended color attributes
- TQColor fg, bg;
- fg = readColorEntry( prop, "Foreground", fg );
- bg = readColorEntry( prop, "Background", bg );
- if ( fg.isValid() || bg.isValid() )
- {
- if ( !fg.isValid() )
- fg = TQApplication::palette().active().foreground();
- if ( !bg.isValid() )
- bg = TQApplication::palette().active().background();
- colors[ i ] = makeColorGroup( fg, bg, TQt::WindowsStyle );
- }
- else
- colors[ i ] = NULL;
-
- // Pixmap
- int existing;
- tmpStr = prop[ "Pixmap" ];
- pixnames[ i ] = tmpStr;
- duplicate[ i ] = false;
- pixmaps[ i ] = NULL;
- images[ i ] = NULL;
- // Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend,
- // no pixmapped border)
- if ( !tmpStr.isEmpty() )
- {
- for ( existing = 0; existing < i; ++existing )
- {
- if ( tmpStr == pixnames[ existing ] && scaleHints[ i ] == TileScale &&
- scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 &&
- blends[ i ] == 0.0 )
- {
- pixmaps[ i ] = pixmaps[ existing ];
- duplicate[ i ] = true;
- break;
- }
- }
- }
- // load
- if ( !duplicate[ i ] && !tmpStr.isEmpty() )
- {
- pixmaps[ i ] = loadPixmap( tmpStr );
- // load and save images for scaled/blended widgets for speed.
- if ( scaleHints[ i ] == TileScale && blends[ i ] == 0.0 )
- images[ i ] = NULL;
- else
- images[ i ] = loadImage( tmpStr );
- }
-
- // Pixmap border
- tmpStr = prop[ "PixmapBorder" ];
- brdnames[ i ] = tmpStr;
- pbDuplicate[ i ] = false;
- pbPixmaps[ i ] = NULL;
- pbWidth[ i ] = 0;
- if ( !tmpStr.isEmpty() )
- {
- pbWidth[ i ] = readNumEntry( prop, "PixmapBWidth", 0 );
- if ( pbWidth[ i ] == 0 )
- {
- tqWarning( "KThemeBase: No border width specified for pixmapped border widget %s\n",
- widgetEntries[ i ] );
- tqWarning( "KThemeBase: Using default of 2.\n" );
- pbWidth[ i ] = 2;
- }
- // duplicate check
- for ( existing = 0; existing < i; ++existing )
- {
- if ( tmpStr == brdnames[ existing ] )
- {
- pbPixmaps[ i ] = pbPixmaps[ existing ];
- pbDuplicate[ i ] = true;
- break;
- }
- }
- }
- // load
- if ( !pbDuplicate[ i ] && !tmpStr.isEmpty() )
- pbPixmaps[ i ] = loadPixmap( tmpStr );
-
- if ( pbPixmaps[ i ] && !pbDuplicate[ i ] )
- generateBorderPix( i );
-
- // Various widget specific settings. This was more efficient when bunched
- // together in the misc group, but this makes an easier to read config.
- if ( i == SliderGroove )
- roundedSlider = readNumEntry( prop, "SmallGroove", false );
- else if ( i == ActiveTab )
- aTabLine = readNumEntry( prop, "BottomLine", true );
- else if ( i == InactiveTab )
- iTabLine = readNumEntry( prop, "BottomLine", true );
- else if ( i == Splitter )
- splitterWidth = readNumEntry( prop, "Width", 10 );
- else if ( i == ComboBox || i == ComboBoxDown )
- {
- tmpVal = readNumEntry( prop, "Round", 5000 );
- if ( tmpVal != 5000 )
- roundedCombo = tmpVal;
- }
- else if ( i == PushButton || i == PushButtonDown )
- {
- tmpVal = readNumEntry( prop, "XShift", 0 );
- if ( tmpVal != 5000 )
- btnXShift = tmpVal;
- tmpVal = readNumEntry( prop, "YShift", 0 );
- if ( tmpVal != 5000 )
- btnYShift = tmpVal;
- tmpVal = readNumEntry( prop, "3DFRect", false );
- if ( tmpVal != 5000 )
- focus3D = tmpVal;
- tmpVal = readNumEntry( prop, "3DFOffset", 0 );
- if ( tmpVal != 5000 )
- focus3DOffset = tmpVal;
- tmpVal = readNumEntry( prop, "Round", false );
- if ( tmpVal != 5000 )
- roundedButton = tmpVal;
- }
- loadArray[ i ] = true;
-#endif
-}
-
-
-TQPalette KThemeBase::overridePalette( const TQPalette& pal )
-{
-
- //Read current settings for colors..
- TQColor background = pal.active().background();
- TQColor foreground = pal.active().foreground();
- TQColor button = background; //CHECKME
- TQColor highlight = pal.active().highlight();
- TQColor highlightedText = pal.active().highlightedText(); //CHECKME
- TQColor base = pal.active().base(); //config->readColorEntry( "windowBackground", &white );
- TQColor baseText = pal.active().text(); //CHECKME
-
- //See whether there are any immediate overrides.
- if ( d->overrideBackground )
- background = d->overrideBackgroundCol;
-
- if ( d->overrideForeground )
- foreground = d->overrideForegroundCol;
-
- if ( d->overrideSelectBackground )
- highlight = d->overrideSelectBackgroundCol;
- if ( d->overrideSelectForeground )
- highlightedText = d->overrideSelectForegroundCol;
-
- if ( d->overrideWindowBackground )
- base = d->overrideWindowBackgroundCol;
- if ( d->overrideWindowForeground )
- baseText = d->overrideWindowForegroundCol;
-
- //Now, try to get the button color from the pixmap
- if ( uncached( Bevel ) )
- button = d->pixmapAveColor( uncached( Bevel ) );
-
- TQColor buttonText = foreground;
-
- int highlightVal, lowlightVal;
- highlightVal = 100 + ( 2 * d->contrast + 4 ) * 16 / 10;
- lowlightVal = 100 + ( 2 * d->contrast + 4 ) * 10;
-
-
- if ( isPixmap( Background ) || isColor( Background ) )
- {
- if ( isColor( Background ) )
- {
- background = colorGroup( pal.active(), Background )
- ->background();
- }
- if ( isPixmap( Background ) )
- {
- background = d->pixmapAveColor( uncached( Background ) );
- }
-
-
- TQColorGroup pre( foreground, button, background.light( highlightVal ),
- background.dark( lowlightVal ), background.dark( 120 ),
- baseText, buttonText /*CHECKME: BrightText*/, base, background );
-
- buttonText = colorGroup( pre, PushButton ) ->foreground();
- }
-
- TQColor disfg = foreground;
- int h, s, v;
- disfg.hsv( &h, &s, &v );
- if ( v > 128 )
- // dark bg, light fg - need a darker disabled fg
- disfg = disfg.dark( lowlightVal );
- else if ( disfg != black )
- // light bg, dark fg - need a lighter disabled fg - but only if !black
- disfg = disfg.light( highlightVal );
- else
- // black fg - use darkgray disabled fg
- disfg = Qt::darkGray;
-
-
- TQColorGroup disabledgrp( disfg, background, //TODO:Convert this to the new ctor.
- background.light( highlightVal ),
- background.dark( lowlightVal ),
- background.dark( 120 ),
- background.dark( 120 ), base );
-
-
- TQColorGroup colgrp( foreground, button, background.light( highlightVal ),
- background.dark( lowlightVal ), background.dark( 120 ),
- baseText, buttonText /*CHECKME: BrightText*/, base, background );
-
-
-
- colgrp.setColor( TQColorGroup::Highlight, highlight );
- colgrp.setColor( TQColorGroup::HighlightedText, highlightedText );
- colgrp.setColor( TQColorGroup::ButtonText, buttonText );
- colgrp.setColor( TQColorGroup::Midlight, button.light( 110 ) );
-
-
- disabledgrp.setColor( TQColorGroup::Base, base );
- disabledgrp.setColor( TQColorGroup::Button, button );
- disabledgrp.setColor( TQColorGroup::ButtonText, buttonText );
- disabledgrp.setColor( TQColorGroup::Midlight, button.light( 110 ) );
-
- TQPalette newPal( colgrp, disabledgrp, colgrp );
-
- return newPal;
-
-}
-
-KThemePixmap::KThemePixmap( bool timer )
- : KPixmap()
-{
- if ( timer )
- {
- t = new TQTime;
- t->start();
- }
- else
- t = NULL;
- int i;
- for ( i = 0; i < 8; ++i )
- b[ i ] = NULL;
-}
-
-KThemePixmap::KThemePixmap( const KThemePixmap &p )
- : KPixmap( p )
-{
- if ( p.t )
- {
- t = new TQTime;
- t->start();
- }
- else
- t = NULL;
- int i;
- for ( i = 0; i < 8; ++i )
- if ( p.b[ i ] )
- b[ i ] = new TQPixmap( *p.b[ i ] );
- else
- b[ i ] = NULL;
-}
-
-KThemePixmap::KThemePixmap( const KThemePixmap &p, const TQPixmap &p2 )
- : KPixmap( p2 )
-{
- if ( p.t )
- {
- t = new TQTime;
- t->start();
- }
- else
- t = NULL;
- int i;
- for ( i = 0; i < 8; ++i )
- if ( p.b[ i ] )
- b[ i ] = new TQPixmap( *p.b[ i ] );
- else
- b[ i ] = NULL;
-}
-
-
-
-KThemePixmap::~KThemePixmap()
-{
- if ( t )
- delete t;
- int i;
- for ( i = 0; i < 8; ++i )
- if ( b[ i ] )
- delete b[ i ];
-}
-
-KThemeCache::KThemeCache( int maxSize, TQObject *parent, const char *name )
- : TQObject( parent, name )
-{
- cache.setMaxCost( maxSize * 1024 );
- cache.setAutoDelete( true );
- flushTimer.start( 300000 ); // 5 minutes
- connect( &flushTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( flushTimeout() ) );
-}
-
-void KThemeCache::flushTimeout()
-{
- TQIntCacheIterator<KThemePixmap> it( cache );
- while ( it.current() )
- {
- if ( it.current() ->isOld() )
- cache.remove( it.currentKey() );
- else
- ++it;
- }
-}
-
-KThemePixmap* KThemeCache::pixmap( int w, int h, int widgetID, bool border,
- bool mask )
-{
-
- kthemeKey key;
- key.cacheKey = 0; // shut up, gcc
- key.data.id = widgetID;
- key.data.width = w;
- key.data.height = h;
- key.data.border = border;
- key.data.mask = mask;
-
- KThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
- if ( pix )
- pix->updateAccessed();
- return ( pix );
-}
-
-KThemePixmap* KThemeCache::horizontalPixmap( int w, int widgetID )
-{
- kthemeKey key;
- key.cacheKey = 0; // shut up, gcc
- key.data.id = widgetID;
- key.data.width = w;
- key.data.height = 0;
- key.data.border = false;
- key.data.mask = false;
- KThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
- if ( pix )
- pix->updateAccessed();
- return ( pix );
-}
-
-KThemePixmap* KThemeCache::verticalPixmap( int h, int widgetID )
-{
- kthemeKey key;
- key.cacheKey = 0; // shut up, gcc
- key.data.id = widgetID;
- key.data.width = 0;
- key.data.height = h;
- key.data.border = false;
- key.data.mask = false;
- KThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
- if ( pix )
- pix->updateAccessed();
- return ( pix );
-}
-
-bool KThemeCache::insert( KThemePixmap *pixmap, ScaleHint scale, int widgetID,
- bool border, bool mask )
-{
- kthemeKey key;
- key.cacheKey = 0; // shut up, gcc
- key.data.id = widgetID;
- key.data.width = ( scale == FullScale || scale == HorizontalScale ) ?
- pixmap->width() : 0;
- key.data.height = ( scale == FullScale || scale == VerticalScale ) ?
- pixmap->height() : 0;
- key.data.border = border;
- key.data.mask = mask;
-
- if ( cache.find( ( unsigned long ) key.cacheKey, true ) != NULL )
- {
- return ( true ); // a pixmap of this scale is already in there
- }
- return ( cache.insert( ( unsigned long ) key.cacheKey, pixmap,
- pixmap->width() * pixmap->height() * pixmap->depth() / 8 ) );
-}
-
-
-
-
-#include "kthemebase.moc"