-rw-r--r-- | noncore/styles/theme/othemebase.cpp | 8 |
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 | ||
769 | OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget ) | 769 | OThemePixmap* 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 | ||
778 | QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg, | 778 | QColorGroup* 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 | ||
795 | static QColor strToColor ( const QString &str ) | 795 | static 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 | ||
812 | void OThemeBase::applyMiscResourceGroup( Config *config ) | 812 | void 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 | ||
861 | void OThemeBase::readMiscResourceGroup() | 861 | void OThemeBase::readMiscResourceGroup() |
862 | {} | 862 | {} |
863 | 863 | ||
864 | void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames ) | 864 | void 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 | ||
992 | void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames, | 996 | void 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 | ||
1081 | OThemePixmap::OThemePixmap( bool timer ) | 1085 | OThemePixmap::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 | ||
1095 | OThemePixmap::OThemePixmap( const OThemePixmap &p ) | 1099 | OThemePixmap::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 | ||
1114 | OThemePixmap::~OThemePixmap() | 1118 | OThemePixmap::~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 | ||
1124 | OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name ) | 1128 | OThemeCache::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 | ||
1133 | void OThemeCache::flushTimeout() | 1137 | void 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 | ||
1144 | OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border, | 1148 | OThemePixmap* 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 | ||
1162 | OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID ) | 1166 | OThemePixmap* 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 | ||
1177 | OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID ) | 1181 | OThemePixmap* 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 | ||
1192 | bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID, | 1196 | bool 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" |