summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/theme/othemebase.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/noncore/styles/theme/othemebase.cpp b/noncore/styles/theme/othemebase.cpp
index 00cea03..21d16f2 100644
--- a/noncore/styles/theme/othemebase.cpp
+++ b/noncore/styles/theme/othemebase.cpp
@@ -719,494 +719,498 @@ OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget )
719 lc, hc, 719 lc, hc,
720 OGfxEffect::DiagonalGradient ); 720 OGfxEffect::DiagonalGradient );
721 OGfxEffect::gradient( s, *grHighColors[ widget ], 721 OGfxEffect::gradient( s, *grHighColors[ widget ],
722 *grLowColors[ widget ], 722 *grLowColors[ widget ],
723 OGfxEffect::DiagonalGradient ); 723 OGfxEffect::DiagonalGradient );
724 bitBlt( pixmaps[ widget ], offset, offset, &s, 0, 0, w - offset * 2, 724 bitBlt( pixmaps[ widget ], offset, offset, &s, 0, 0, w - offset * 2,
725 h - offset * 2, Qt::CopyROP ); 725 h - offset * 2, Qt::CopyROP );
726 } 726 }
727 } 727 }
728 } 728 }
729 else { 729 else {
730 OGfxEffect::GradientType g; 730 OGfxEffect::GradientType g;
731 switch ( gradients[ widget ] ) { 731 switch ( gradients[ widget ] ) {
732 case GrPyramid: 732 case GrPyramid:
733 g = OGfxEffect::PyramidGradient; 733 g = OGfxEffect::PyramidGradient;
734 break; 734 break;
735 case GrRectangle: 735 case GrRectangle:
736 g = OGfxEffect::RectangleGradient; 736 g = OGfxEffect::RectangleGradient;
737 break; 737 break;
738 case GrElliptic: 738 case GrElliptic:
739 g = OGfxEffect::EllipticGradient; 739 g = OGfxEffect::EllipticGradient;
740 break; 740 break;
741 default: 741 default:
742 g = OGfxEffect::DiagonalGradient; 742 g = OGfxEffect::DiagonalGradient;
743 break; 743 break;
744 } 744 }
745 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 745 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
746 pixmaps[ widget ] ->height() != h ) { 746 pixmaps[ widget ] ->height() != h ) {
747 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 747 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
748 if ( cachePix ) { 748 if ( cachePix ) {
749 cachePix = new OThemePixmap( *cachePix ); 749 cachePix = new OThemePixmap( *cachePix );
750 if ( pixmaps[ widget ] ) 750 if ( pixmaps[ widget ] )
751 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 751 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
752 widget ); 752 widget );
753 pixmaps[ widget ] = cachePix; 753 pixmaps[ widget ] = cachePix;
754 } 754 }
755 else { 755 else {
756 if ( pixmaps[ widget ] ) 756 if ( pixmaps[ widget ] )
757 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 757 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
758 widget ); 758 widget );
759 pixmaps[ widget ] = new OThemePixmap; 759 pixmaps[ widget ] = new OThemePixmap;
760 pixmaps[ widget ] ->resize( w, h ); 760 pixmaps[ widget ] ->resize( w, h );
761 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ], 761 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
762 *grLowColors[ widget ], g ); 762 *grLowColors[ widget ], g );
763 } 763 }
764 } 764 }
765 } 765 }
766 return ( pixmaps[ widget ] ); 766 return ( pixmaps[ widget ] );
767} 767}
768 768
769OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget ) 769OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget )
770{ 770{
771 771
772 if ( gradients[ widget ] && blends[ widget ] == 0.0 ) 772 if ( gradients[ widget ] && blends[ widget ] == 0.0 )
773 return ( gradient( w, h, widget ) ); 773 return ( gradient( w, h, widget ) );
774 774
775 return ( scale( w, h, widget ) ); 775 return ( scale( w, h, widget ) );
776} 776}
777 777
778QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg, 778QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg,
779 Qt::GUIStyle ) 779 Qt::GUIStyle )
780{ 780{
781 if ( shading == Motif ) { 781 if ( shading == Motif ) {
782 int highlightVal, lowlightVal; 782 int highlightVal, lowlightVal;
783 highlightVal = 100 + ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 16 / 10; 783 highlightVal = 100 + ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 16 / 10;
784 lowlightVal = 100 + ( ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 10 ); 784 lowlightVal = 100 + ( ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 10 );
785 return ( new QColorGroup( fg, bg, bg.light( highlightVal ), 785 return ( new QColorGroup( fg, bg, bg.light( highlightVal ),
786 bg.dark( lowlightVal ), bg.dark( 120 ), 786 bg.dark( lowlightVal ), bg.dark( 120 ),
787 fg, qApp->palette().normal().base() ) ); 787 fg, qApp->palette().normal().base() ) );
788 } 788 }
789 else 789 else
790 return ( new QColorGroup( fg, bg, bg.light( 150 ), bg.dark(), 790 return ( new QColorGroup( fg, bg, bg.light( 150 ), bg.dark(),
791 bg.dark( 120 ), fg, 791 bg.dark( 120 ), fg,
792 qApp->palette().normal().base() ) ); 792 qApp->palette().normal().base() ) );
793} 793}
794 794
795static QColor strToColor ( const QString &str ) 795static QColor strToColor ( const QString &str )
796{ 796{
797 QString str2 = str. stripWhiteSpace ( ); 797 QString str2 = str. stripWhiteSpace ( );
798 798
799 if ( str2 [0] == '#' ) 799 if ( str2 [0] == '#' )
800 return QColor ( str2 ); 800 return QColor ( str2 );
801 else { 801 else {
802 QStringList sl = QStringList::split ( ',', str2 ); 802 QStringList sl = QStringList::split ( ',', str2 );
803 803
804 if ( sl. count ( ) >= 3 ) 804 if ( sl. count ( ) >= 3 )
805 return QColor ( sl [0]. toInt ( ), sl [1]. toInt ( ), sl [2]. toInt ( )); 805 return QColor ( sl [0]. toInt ( ), sl [1]. toInt ( ), sl [2]. toInt ( ));
806 } 806 }
807 return QColor ( 0, 0, 0 ); 807 return QColor ( 0, 0, 0 );
808} 808}
809 809
810 810
811 811
812void OThemeBase::applyMiscResourceGroup( Config *config ) 812void OThemeBase::applyMiscResourceGroup( Config *config )
813{ 813{
814 config-> setGroup ( "Misc" ); 814 config-> setGroup ( "Misc" );
815 QString tmpStr; 815 QString tmpStr;
816 816
817 tmpStr = config->readEntry( "SButtonPosition" ); 817 tmpStr = config->readEntry( "SButtonPosition" );
818 if ( tmpStr == "BottomLeft" ) 818 if ( tmpStr == "BottomLeft" )
819 sbPlacement = SBBottomLeft; 819 sbPlacement = SBBottomLeft;
820 else if ( tmpStr == "BottomRight" ) 820 else if ( tmpStr == "BottomRight" )
821 sbPlacement = SBBottomRight; 821 sbPlacement = SBBottomRight;
822 else { 822 else {
823 if ( tmpStr != "Opposite" && !tmpStr.isEmpty() ) 823 if ( tmpStr != "Opposite" && !tmpStr.isEmpty() )
824 qDebug ( "OThemeBase: Unrecognized sb button option %s, using Opposite.\n", tmpStr.ascii() ); 824 qDebug ( "OThemeBase: Unrecognized sb button option %s, using Opposite.\n", tmpStr.ascii() );
825 sbPlacement = SBOpposite; 825 sbPlacement = SBOpposite;
826 } 826 }
827 tmpStr = config->readEntry( "ArrowType" ); 827 tmpStr = config->readEntry( "ArrowType" );
828 if ( tmpStr == "Small" ) 828 if ( tmpStr == "Small" )
829 arrowStyle = SmallArrow; 829 arrowStyle = SmallArrow;
830 else if ( tmpStr == "3D" ) 830 else if ( tmpStr == "3D" )
831 arrowStyle = MotifArrow; 831 arrowStyle = MotifArrow;
832 else { 832 else {
833 if ( tmpStr != "Normal" && !tmpStr.isEmpty() ) 833 if ( tmpStr != "Normal" && !tmpStr.isEmpty() )
834 qDebug ( "OThemeBase: Unrecognized arrow option %s, using Normal.\n", tmpStr.ascii() ); 834 qDebug ( "OThemeBase: Unrecognized arrow option %s, using Normal.\n", tmpStr.ascii() );
835 arrowStyle = LargeArrow; 835 arrowStyle = LargeArrow;
836 } 836 }
837 tmpStr = config->readEntry( "ShadeStyle" ); 837 tmpStr = config->readEntry( "ShadeStyle" );
838 if ( tmpStr == "Motif" ) 838 if ( tmpStr == "Motif" )
839 shading = Motif; 839 shading = Motif;
840 else if ( tmpStr == "Next" ) 840 else if ( tmpStr == "Next" )
841 shading = Next; 841 shading = Next;
842 else if ( tmpStr == "KDE" ) 842 else if ( tmpStr == "KDE" )
843 shading = KDE; 843 shading = KDE;
844 else 844 else
845 shading = Windows; 845 shading = Windows;
846 846
847 defaultFrame = config->readNumEntry( "FrameWidth", 2 ); 847 defaultFrame = config->readNumEntry( "FrameWidth", 2 );
848 cacheSize = config->readNumEntry( "Cache", 1024 ); 848 cacheSize = config->readNumEntry( "Cache", 1024 );
849 sbExtent = config->readNumEntry( "ScrollBarExtent", 16 ); 849 sbExtent = config->readNumEntry( "ScrollBarExtent", 16 );
850 850
851 config-> setGroup ( "General" ); 851 config-> setGroup ( "General" );
852 852
853 if ( config-> hasKey ( "foreground" )) fgcolor = strToColor ( config-> readEntry ( "foreground" )); 853 if ( config-> hasKey ( "foreground" )) fgcolor = strToColor ( config-> readEntry ( "foreground" ));
854 if ( config-> hasKey ( "background" )) bgcolor = strToColor ( config-> readEntry ( "background" )); 854 if ( config-> hasKey ( "background" )) bgcolor = strToColor ( config-> readEntry ( "background" ));
855 if ( config-> hasKey ( "selectForeground" )) selfgcolor = strToColor ( config-> readEntry ( "selectForeground" )); 855 if ( config-> hasKey ( "selectForeground" )) selfgcolor = strToColor ( config-> readEntry ( "selectForeground" ));
856 if ( config-> hasKey ( "selectBackground" )) selbgcolor = strToColor ( config-> readEntry ( "selectBackground" )); 856 if ( config-> hasKey ( "selectBackground" )) selbgcolor = strToColor ( config-> readEntry ( "selectBackground" ));
857 if ( config-> hasKey ( "windowForeground" )) winfgcolor = strToColor ( config-> readEntry ( "windowForeground" )); 857 if ( config-> hasKey ( "windowForeground" )) winfgcolor = strToColor ( config-> readEntry ( "windowForeground" ));
858 if ( config-> hasKey ( "windowBackground" )) winbgcolor = strToColor ( config-> readEntry ( "windowBackground" )); 858 if ( config-> hasKey ( "windowBackground" )) winbgcolor = strToColor ( config-> readEntry ( "windowBackground" ));
859} 859}
860 860
861void OThemeBase::readMiscResourceGroup() 861void OThemeBase::readMiscResourceGroup()
862{} 862{}
863 863
864void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames ) 864void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames )
865{ 865{
866 QString tmpStr; 866 QString tmpStr;
867 867
868 config-> setGroup ( widgetEntries [ i ] ); 868 config-> setGroup ( widgetEntries [ i ] );
869 869
870 tmpStr = config->readEntry( "CopyWidget", "" ); 870 tmpStr = config->readEntry( "CopyWidget", "" );
871 copyfrom [ i ] = tmpStr; 871 copyfrom [ i ] = tmpStr;
872 if ( !tmpStr.isEmpty() ) 872 if ( !tmpStr.isEmpty() )
873 return ; 873 return ;
874 874
875 // Scale hint 875 // Scale hint
876 tmpStr = config->readEntry( "Scale" ); 876 tmpStr = config->readEntry( "Scale" );
877 if ( tmpStr == "Full" ) 877 if ( tmpStr == "Full" )
878 scaleHints [ i ] = FullScale; 878 scaleHints [ i ] = FullScale;
879 else if ( tmpStr == "Horizontal" ) 879 else if ( tmpStr == "Horizontal" )
880 scaleHints [ i ] = HorizontalScale; 880 scaleHints [ i ] = HorizontalScale;
881 else if ( tmpStr == "Vertical" ) 881 else if ( tmpStr == "Vertical" )
882 scaleHints [ i ] = VerticalScale; 882 scaleHints [ i ] = VerticalScale;
883 else { 883 else {
884 if ( tmpStr != "Tile" && !tmpStr.isEmpty() ) 884 if ( tmpStr != "Tile" && !tmpStr.isEmpty() )
885 qDebug ( "OThemeBase: Unrecognized scale option %s, using Tile.\n", tmpStr.ascii() ); 885 qDebug ( "OThemeBase: Unrecognized scale option %s, using Tile.\n", tmpStr.ascii() );
886 scaleHints [ i ] = TileScale; 886 scaleHints [ i ] = TileScale;
887 } 887 }
888 888
889 889
890 // Gradient type 890 // Gradient type
891 tmpStr = config->readEntry( "Gradient" ); 891 tmpStr = config->readEntry( "Gradient" );
892 if ( tmpStr == "Diagonal" ) 892 if ( tmpStr == "Diagonal" )
893 gradients [ i ] = GrDiagonal; 893 gradients [ i ] = GrDiagonal;
894 else if ( tmpStr == "Horizontal" ) 894 else if ( tmpStr == "Horizontal" )
895 gradients [ i ] = GrHorizontal; 895 gradients [ i ] = GrHorizontal;
896 else if ( tmpStr == "Vertical" ) 896 else if ( tmpStr == "Vertical" )
897 gradients [ i ] = GrVertical; 897 gradients [ i ] = GrVertical;
898 else if ( tmpStr == "Pyramid" ) 898 else if ( tmpStr == "Pyramid" )
899 gradients [ i ] = GrPyramid; 899 gradients [ i ] = GrPyramid;
900 else if ( tmpStr == "Rectangle" ) 900 else if ( tmpStr == "Rectangle" )
901 gradients [ i ] = GrRectangle; 901 gradients [ i ] = GrRectangle;
902 else if ( tmpStr == "Elliptic" ) 902 else if ( tmpStr == "Elliptic" )
903 gradients [ i ] = GrElliptic; 903 gradients [ i ] = GrElliptic;
904 else if ( tmpStr == "ReverseBevel" ) 904 else if ( tmpStr == "ReverseBevel" )
905 gradients [ i ] = GrReverseBevel; 905 gradients [ i ] = GrReverseBevel;
906 else { 906 else {
907 if ( tmpStr != "None" && !tmpStr.isEmpty() ) 907 if ( tmpStr != "None" && !tmpStr.isEmpty() )
908 qDebug ( "OThemeBase: Unrecognized gradient option %s, using None.\n", tmpStr.ascii() ); 908 qDebug ( "OThemeBase: Unrecognized gradient option %s, using None.\n", tmpStr.ascii() );
909 gradients [ i ] = GrNone; 909 gradients [ i ] = GrNone;
910 } 910 }
911 911
912 // Blend intensity 912 // Blend intensity
913 blends[ i ] = config->readEntry( "BlendIntensity", "0.0" ).toDouble(); 913 blends[ i ] = config->readEntry( "BlendIntensity", "0.0" ).toDouble();
914 914
915 // Bevel contrast 915 // Bevel contrast
916 bContrasts[ i ] = config->readNumEntry( "BevelContrast", 0 ); 916 bContrasts[ i ] = config->readNumEntry( "BevelContrast", 0 );
917 917
918 // Border width 918 // Border width
919 borders [ i ] = config->readNumEntry( "Border", 1 ); 919 borders [ i ] = config->readNumEntry( "Border", 1 );
920 920
921 // Highlight width 921 // Highlight width
922 highlights [ i ] = config->readNumEntry( "Highlight", 1 ); 922 highlights [ i ] = config->readNumEntry( "Highlight", 1 );
923 923
924 // Gradient low color or blend background 924 // Gradient low color or blend background
925 if ( config->hasKey( "GradientLow" ) && ( gradients[ i ] != GrNone || blends[ i ] != 0.0 )) 925 if ( config->hasKey( "GradientLow" ) && ( gradients[ i ] != GrNone || blends[ i ] != 0.0 ))
926 grLowColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientLow", qApp->palette().normal().background().name() ))); 926 grLowColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientLow", qApp->palette().normal().background().name() )));
927 else 927 else
928 grLowColors[ i ] = NULL; 928 grLowColors[ i ] = NULL;
929 929
930 930
931 // Gradient high color 931 // Gradient high color
932 if ( config->hasKey( "GradientHigh" ) && ( gradients[ i ] != GrNone )) 932 if ( config->hasKey( "GradientHigh" ) && ( gradients[ i ] != GrNone ))
933 grHighColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientHigh", qApp->palette().normal().background().name() ))); 933 grHighColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientHigh", qApp->palette().normal().background().name() )));
934 else 934 else
935 grHighColors[ i ] = NULL; 935 grHighColors[ i ] = NULL;
936 936
937 // Extended color attributes 937 // Extended color attributes
938 if ( config->hasKey( "Foreground" ) || config->hasKey( "Background" ) ) { 938 if ( config->hasKey( "Foreground" ) || config->hasKey( "Background" ) ) {
939 QColor bg = strToColor( config->readEntry( "Background", qApp->palette().normal().background().name() )); 939 QColor bg = strToColor( config->readEntry( "Background", qApp->palette().normal().background().name() ));
940 QColor fg = strToColor( config->readEntry( "Foreground", qApp->palette().normal().foreground().name() )); 940 QColor fg = strToColor( config->readEntry( "Foreground", qApp->palette().normal().foreground().name() ));
941 941
942 colors[ i ] = makeColorGroup( fg, bg, Qt::WindowsStyle ); 942 colors[ i ] = makeColorGroup( fg, bg, Qt::WindowsStyle );
943 } 943 }
944 else 944 else
945 colors[ i ] = NULL; 945 colors[ i ] = NULL;
946 946
947 // Pixmap 947 // Pixmap
948 tmpStr = config->readEntry( "Pixmap", "" ); 948 tmpStr = config->readEntry( "Pixmap", "" );
949 pixnames[ i ] = tmpStr; 949 pixnames[ i ] = tmpStr;
950 duplicate[ i ] = false; 950 duplicate[ i ] = false;
951 pixmaps[ i ] = NULL; 951 pixmaps[ i ] = NULL;
952 images[ i ] = NULL; 952 images[ i ] = NULL;
953 953
954 954
955 // Pixmap border 955 // Pixmap border
956 tmpStr = config->readEntry( "PixmapBorder", "" ); 956 tmpStr = config->readEntry( "PixmapBorder", "" );
957 brdnames[ i ] = tmpStr; 957 brdnames[ i ] = tmpStr;
958 pbDuplicate[ i ] = false; 958 pbDuplicate[ i ] = false;
959 pbPixmaps[ i ] = NULL; 959 pbPixmaps[ i ] = NULL;
960 pbWidth[ i ] = 0; 960 pbWidth[ i ] = 0;
961 if ( !tmpStr.isEmpty() ) { 961 if ( !tmpStr.isEmpty() ) {
962 pbWidth[ i ] = config->readNumEntry( "PixmapBWidth", 0 ); 962 pbWidth[ i ] = config->readNumEntry( "PixmapBWidth", 0 );
963 if ( pbWidth[ i ] == 0 ) { 963 if ( pbWidth[ i ] == 0 ) {
964 qDebug ( "OThemeBase: No border width specified for pixmapped border widget %s\n", widgetEntries[ i ] ); 964 qDebug ( "OThemeBase: No border width specified for pixmapped border widget %s\n", widgetEntries[ i ] );
965 qDebug ( "OThemeBase: Using default of 2.\n" ); 965 qDebug ( "OThemeBase: Using default of 2.\n" );
966 pbWidth[ i ] = 2; 966 pbWidth[ i ] = 2;
967 } 967 }
968 } 968 }
969 969
970 970
971 // Various widget specific settings. This was more efficent when bunched 971 // Various widget specific settings. This was more efficent when bunched
972 // together in the misc group, but this makes an easier to read config. 972 // together in the misc group, but this makes an easier to read config.
973 if ( i == SliderGroove ) 973 if ( i == SliderGroove )
974 roundedSlider = config->readBoolEntry( "SmallGroove", false ); 974 roundedSlider = config->readBoolEntry( "SmallGroove", false );
975 else if ( i == ActiveTab || i == InactiveTab ) 975 else if ( i == ActiveTab ) {
976 aTabLine = iTabLine = config->readBoolEntry( "BottomLine", true ); 976 aTabLine = config->readBoolEntry( "BottomLine", true );
977 }
978 else if ( i == InactiveTab ) {
979 iTabLine = config->readBoolEntry( "BottomLine", true );
980 }
977 else if ( i == Splitter ) 981 else if ( i == Splitter )
978 splitterWidth = config->readNumEntry( "Width", 10 ); 982 splitterWidth = config->readNumEntry( "Width", 10 );
979 else if ( i == ComboBox || i == ComboBoxDown ) { 983 else if ( i == ComboBox || i == ComboBoxDown ) {
980 roundedCombo = config->readBoolEntry( "Round", false ); 984 roundedCombo = config->readBoolEntry( "Round", false );
981 } 985 }
982 else if ( i == PushButton || i == PushButtonDown ) { 986 else if ( i == PushButton || i == PushButtonDown ) {
983 btnXShift = config->readNumEntry( "XShift", 0 ); 987 btnXShift = config->readNumEntry( "XShift", 0 );
984 btnYShift = config->readNumEntry( "YShift", 0 ); 988 btnYShift = config->readNumEntry( "YShift", 0 );
985 focus3D = config->readBoolEntry( "3DFocusRect", false ); 989 focus3D = config->readBoolEntry( "3DFocusRect", false );
986 focus3DOffset = config->readBoolEntry( "3DFocusOffset", 0 ); 990 focus3DOffset = config->readBoolEntry( "3DFocusOffset", 0 );
987 roundedButton = config->readBoolEntry( "Round", false ); 991 roundedButton = config->readBoolEntry( "Round", false );
988 } 992 }
989} 993}
990 994
991 995
992void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames, 996void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames,
993 bool *loadArray ) 997 bool *loadArray )
994{ 998{
995 if ( loadArray[ i ] == true ) { 999 if ( loadArray[ i ] == true ) {
996 return ; // already been preloaded. 1000 return ; // already been preloaded.
997 } 1001 }
998 1002
999 int tmpVal; 1003 int tmpVal;
1000 QString tmpStr; 1004 QString tmpStr;
1001 1005
1002 tmpStr = copyfrom [ i ]; 1006 tmpStr = copyfrom [ i ];
1003 if ( !tmpStr.isEmpty() ) { // Duplicate another widget's config 1007 if ( !tmpStr.isEmpty() ) { // Duplicate another widget's config
1004 int sIndex; 1008 int sIndex;
1005 loadArray[ i ] = true; 1009 loadArray[ i ] = true;
1006 for ( sIndex = 0; sIndex < WIDGETS; ++sIndex ) { 1010 for ( sIndex = 0; sIndex < WIDGETS; ++sIndex ) {
1007 if ( tmpStr == widgetEntries[ sIndex ] ) { 1011 if ( tmpStr == widgetEntries[ sIndex ] ) {
1008 if ( !loadArray[ sIndex ] ) // hasn't been loaded yet 1012 if ( !loadArray[ sIndex ] ) // hasn't been loaded yet
1009 readResourceGroup( sIndex, copyfrom, pixnames, brdnames, 1013 readResourceGroup( sIndex, copyfrom, pixnames, brdnames,
1010 loadArray ); 1014 loadArray );
1011 break; 1015 break;
1012 } 1016 }
1013 } 1017 }
1014 if ( loadArray[ sIndex ] ) { 1018 if ( loadArray[ sIndex ] ) {
1015 copyWidgetConfig( sIndex, i, pixnames, brdnames ); 1019 copyWidgetConfig( sIndex, i, pixnames, brdnames );
1016 } 1020 }
1017 else 1021 else
1018 qDebug ( "OThemeBase: Unable to identify source widget for %s\n", widgetEntries[ i ] ); 1022 qDebug ( "OThemeBase: Unable to identify source widget for %s\n", widgetEntries[ i ] );
1019 return ; 1023 return ;
1020 } 1024 }
1021 // special inheritance for disabled arrows (these are tri-state unlike 1025 // special inheritance for disabled arrows (these are tri-state unlike
1022 // the rest of what we handle). 1026 // the rest of what we handle).
1023 for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal ) { 1027 for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal ) {
1024 if ( tmpVal == i ) { 1028 if ( tmpVal == i ) {
1025 tmpStr = pixnames [ i ]; 1029 tmpStr = pixnames [ i ];
1026 if ( tmpStr.isEmpty() ) { 1030 if ( tmpStr.isEmpty() ) {
1027 copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames, 1031 copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames,
1028 brdnames ); 1032 brdnames );
1029 return ; 1033 return ;
1030 } 1034 }
1031 } 1035 }
1032 } 1036 }
1033 1037
1034 // Pixmap 1038 // Pixmap
1035 int existing; 1039 int existing;
1036 // Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend, 1040 // Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend,
1037 // no pixmapped border) 1041 // no pixmapped border)
1038 if ( !pixnames [ i ].isEmpty() ) { 1042 if ( !pixnames [ i ].isEmpty() ) {
1039 for ( existing = 0; existing < i; ++existing ) { 1043 for ( existing = 0; existing < i; ++existing ) {
1040 if ( pixnames[ i ] == pixnames[ existing ] && scaleHints[ i ] == TileScale && 1044 if ( pixnames[ i ] == pixnames[ existing ] && scaleHints[ i ] == TileScale &&
1041 scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 && 1045 scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 &&
1042 blends[ i ] == 0.0 ) { 1046 blends[ i ] == 0.0 ) {
1043 pixmaps[ i ] = pixmaps[ existing ]; 1047 pixmaps[ i ] = pixmaps[ existing ];
1044 duplicate[ i ] = true; 1048 duplicate[ i ] = true;
1045 break; 1049 break;
1046 } 1050 }
1047 } 1051 }
1048 } 1052 }
1049 // load 1053 // load
1050 if ( !duplicate[ i ] && !pixnames[ i ].isEmpty() ) { 1054 if ( !duplicate[ i ] && !pixnames[ i ].isEmpty() ) {
1051 pixmaps[ i ] = loadPixmap( pixnames[ i ] ); 1055 pixmaps[ i ] = loadPixmap( pixnames[ i ] );
1052 // load and save images for scaled/blended widgets for speed. 1056 // load and save images for scaled/blended widgets for speed.
1053 if ( scaleHints[ i ] == TileScale && blends[ i ] == 0.0 ) 1057 if ( scaleHints[ i ] == TileScale && blends[ i ] == 0.0 )
1054 images[ i ] = NULL; 1058 images[ i ] = NULL;
1055 else 1059 else
1056 images[ i ] = loadImage( pixnames[ i ] ); 1060 images[ i ] = loadImage( pixnames[ i ] );
1057 } 1061 }
1058 1062
1059 // Pixmap border 1063 // Pixmap border
1060 if ( !brdnames [ i ]. isEmpty () ) { 1064 if ( !brdnames [ i ]. isEmpty () ) {
1061 // duplicate check 1065 // duplicate check
1062 for ( existing = 0; existing < i; ++existing ) { 1066 for ( existing = 0; existing < i; ++existing ) {
1063 if ( brdnames [i] == brdnames[ existing ] ) { 1067 if ( brdnames [i] == brdnames[ existing ] ) {
1064 pbPixmaps[ i ] = pbPixmaps[ existing ]; 1068 pbPixmaps[ i ] = pbPixmaps[ existing ];
1065 pbDuplicate[ i ] = true; 1069 pbDuplicate[ i ] = true;
1066 break; 1070 break;
1067 } 1071 }
1068 } 1072 }
1069 } 1073 }
1070 // load 1074 // load
1071 if ( !pbDuplicate[ i ] && !brdnames[ i ].isEmpty() ) 1075 if ( !pbDuplicate[ i ] && !brdnames[ i ].isEmpty() )
1072 pbPixmaps[ i ] = loadPixmap( brdnames[ i ] ); 1076 pbPixmaps[ i ] = loadPixmap( brdnames[ i ] );
1073 1077
1074 if ( pbPixmaps[ i ] && !pbDuplicate[ i ] ) 1078 if ( pbPixmaps[ i ] && !pbDuplicate[ i ] )
1075 generateBorderPix( i ); 1079 generateBorderPix( i );
1076 1080
1077 loadArray[ i ] = true; 1081 loadArray[ i ] = true;
1078} 1082}
1079 1083
1080 1084
1081OThemePixmap::OThemePixmap( bool timer ) 1085OThemePixmap::OThemePixmap( bool timer )
1082 : QPixmap() 1086 : QPixmap()
1083{ 1087{
1084 if(timer){ 1088 if(timer){
1085 t = new QTime; 1089 t = new QTime;
1086 t->start(); 1090 t->start();
1087 } 1091 }
1088 else 1092 else
1089 t = NULL; 1093 t = NULL;
1090 int i; 1094 int i;
1091 for ( i = 0; i < 8; ++i ) 1095 for ( i = 0; i < 8; ++i )
1092 b[ i ] = NULL; 1096 b[ i ] = NULL;
1093} 1097}
1094 1098
1095OThemePixmap::OThemePixmap( const OThemePixmap &p ) 1099OThemePixmap::OThemePixmap( const OThemePixmap &p )
1096 : QPixmap( p ) 1100 : QPixmap( p )
1097{ 1101{
1098 if(p.t){ 1102 if(p.t){
1099 t = new QTime; 1103 t = new QTime;
1100 t->start(); 1104 t->start();
1101 } 1105 }
1102 else 1106 else
1103 t = NULL; 1107 t = NULL;
1104 int i; 1108 int i;
1105 for ( i = 0; i < 8; ++i ) 1109 for ( i = 0; i < 8; ++i )
1106 if ( p.b[ i ] ) 1110 if ( p.b[ i ] )
1107 b[ i ] = new QPixmap( *p.b[ i ] ); 1111 b[ i ] = new QPixmap( *p.b[ i ] );
1108 else 1112 else
1109 b[ i ] = NULL; 1113 b[ i ] = NULL;
1110} 1114}
1111 1115
1112 1116
1113 1117
1114OThemePixmap::~OThemePixmap() 1118OThemePixmap::~OThemePixmap()
1115{ 1119{
1116 if(t) 1120 if(t)
1117 delete t; 1121 delete t;
1118 int i; 1122 int i;
1119 for ( i = 0; i < 8; ++i ) 1123 for ( i = 0; i < 8; ++i )
1120 if ( b[ i ] ) 1124 if ( b[ i ] )
1121 delete b[ i ]; 1125 delete b[ i ];
1122} 1126}
1123 1127
1124OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name ) 1128OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name )
1125 : QObject( parent, name ) 1129 : QObject( parent, name )
1126{ 1130{
1127 cache.setMaxCost( maxSize * 1024 ); 1131 cache.setMaxCost( maxSize * 1024 );
1128 cache.setAutoDelete( true ); 1132 cache.setAutoDelete( true );
1129 flushTimer.start(300000); // 5 minutes 1133 flushTimer.start(300000); // 5 minutes
1130 connect(&flushTimer, SIGNAL(timeout()), SLOT(flushTimeout())); 1134 connect(&flushTimer, SIGNAL(timeout()), SLOT(flushTimeout()));
1131} 1135}
1132 1136
1133void OThemeCache::flushTimeout() 1137void OThemeCache::flushTimeout()
1134{ 1138{
1135 QIntCacheIterator<OThemePixmap> it( cache ); 1139 QIntCacheIterator<OThemePixmap> it( cache );
1136 while ( it.current() ) { 1140 while ( it.current() ) {
1137 if ( it.current() ->isOld() ) 1141 if ( it.current() ->isOld() )
1138 cache.remove( it.currentKey() ); 1142 cache.remove( it.currentKey() );
1139 else 1143 else
1140 ++it; 1144 ++it;
1141 } 1145 }
1142} 1146}
1143 1147
1144OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border, 1148OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border,
1145 bool mask ) 1149 bool mask )
1146{ 1150{
1147 1151
1148 kthemeKey key; 1152 kthemeKey key;
1149 key.cacheKey = 0; // shut up, gcc 1153 key.cacheKey = 0; // shut up, gcc
1150 key.data.id = widgetID; 1154 key.data.id = widgetID;
1151 key.data.width = w; 1155 key.data.width = w;
1152 key.data.height = h; 1156 key.data.height = h;
1153 key.data.border = border; 1157 key.data.border = border;
1154 key.data.mask = mask; 1158 key.data.mask = mask;
1155 1159
1156 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1160 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1157 if ( pix ) 1161 if ( pix )
1158 pix->updateAccessed(); 1162 pix->updateAccessed();
1159 return ( pix ); 1163 return ( pix );
1160} 1164}
1161 1165
1162OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID ) 1166OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID )
1163{ 1167{
1164 kthemeKey key; 1168 kthemeKey key;
1165 key.cacheKey = 0; // shut up, gcc 1169 key.cacheKey = 0; // shut up, gcc
1166 key.data.id = widgetID; 1170 key.data.id = widgetID;
1167 key.data.width = w; 1171 key.data.width = w;
1168 key.data.height = 0; 1172 key.data.height = 0;
1169 key.data.border = false; 1173 key.data.border = false;
1170 key.data.mask = false; 1174 key.data.mask = false;
1171 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1175 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1172 if ( pix ) 1176 if ( pix )
1173 pix->updateAccessed(); 1177 pix->updateAccessed();
1174 return ( pix ); 1178 return ( pix );
1175} 1179}
1176 1180
1177OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID ) 1181OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID )
1178{ 1182{
1179 kthemeKey key; 1183 kthemeKey key;
1180 key.cacheKey = 0; // shut up, gcc 1184 key.cacheKey = 0; // shut up, gcc
1181 key.data.id = widgetID; 1185 key.data.id = widgetID;
1182 key.data.width = 0; 1186 key.data.width = 0;
1183 key.data.height = h; 1187 key.data.height = h;
1184 key.data.border = false; 1188 key.data.border = false;
1185 key.data.mask = false; 1189 key.data.mask = false;
1186 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1190 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1187 if ( pix ) 1191 if ( pix )
1188 pix->updateAccessed(); 1192 pix->updateAccessed();
1189 return ( pix ); 1193 return ( pix );
1190} 1194}
1191 1195
1192bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID, 1196bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID,
1193 bool border, bool mask ) 1197 bool border, bool mask )
1194{ 1198{
1195 kthemeKey key; 1199 kthemeKey key;
1196 key.cacheKey = 0; // shut up, gcc 1200 key.cacheKey = 0; // shut up, gcc
1197 key.data.id = widgetID; 1201 key.data.id = widgetID;
1198 key.data.width = ( scale == FullScale || scale == HorizontalScale ) ? 1202 key.data.width = ( scale == FullScale || scale == HorizontalScale ) ?
1199 pixmap->width() : 0; 1203 pixmap->width() : 0;
1200 key.data.height = ( scale == FullScale || scale == VerticalScale ) ? 1204 key.data.height = ( scale == FullScale || scale == VerticalScale ) ?
1201 pixmap->height() : 0; 1205 pixmap->height() : 0;
1202 key.data.border = border; 1206 key.data.border = border;
1203 key.data.mask = mask; 1207 key.data.mask = mask;
1204 1208
1205 if ( cache.find( ( unsigned long ) key.cacheKey, true ) != NULL ) { 1209 if ( cache.find( ( unsigned long ) key.cacheKey, true ) != NULL ) {
1206 return ( true ); // a pixmap of this scale is already in there 1210 return ( true ); // a pixmap of this scale is already in there
1207 } 1211 }
1208 return ( cache.insert( ( unsigned long ) key.cacheKey, pixmap, 1212 return ( cache.insert( ( unsigned long ) key.cacheKey, pixmap,
1209 pixmap->width() * pixmap->height() * pixmap->depth() / 8 ) ); 1213 pixmap->width() * pixmap->height() * pixmap->depth() / 8 ) );
1210} 1214}
1211 1215
1212//#include "kthemebase.moc" 1216//#include "kthemebase.moc"