-rw-r--r-- | noncore/styles/liquid/liquid.cpp | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp index 259f6af..4013981 100644 --- a/noncore/styles/liquid/liquid.cpp +++ b/noncore/styles/liquid/liquid.cpp | |||
@@ -1,97 +1,97 @@ | |||
1 | /*- | 1 | /*- |
2 | * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. | 2 | * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. |
3 | */ | 3 | */ |
4 | 4 | ||
5 | 5 | ||
6 | 6 | ||
7 | #ifndef INCLUDE_MENUITEM_DEF | 7 | #ifndef INCLUDE_MENUITEM_DEF |
8 | #define INCLUDE_MENUITEM_DEF | 8 | #define INCLUDE_MENUITEM_DEF |
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | #include <qmenudata.h> | 11 | #include <qmenudata.h> |
12 | #include "liquid.h" | 12 | #include "liquid.h" |
13 | //#include "liquiddeco.h" | 13 | //#include "liquiddeco.h" |
14 | #include <qapplication.h> | 14 | #include <qapplication.h> |
15 | #include <qpe/config.h> | 15 | #include <qpe/config.h> |
16 | #include "effects.h" | 16 | #include "effects.h" |
17 | #include <qpalette.h> | 17 | #include <qpalette.h> |
18 | #include <qbitmap.h> | 18 | #include <qbitmap.h> |
19 | #include <qtabbar.h> | 19 | #include <qtabbar.h> |
20 | #include <qpopupmenu.h> | 20 | #include <qpopupmenu.h> |
21 | #include <qobjectlist.h> | 21 | #include <qobjectlist.h> |
22 | #include <qimage.h> | 22 | #include <qimage.h> |
23 | #include <qtimer.h> | 23 | #include <qtimer.h> |
24 | #include <qpixmapcache.h> | 24 | #include <qpixmapcache.h> |
25 | #include <qradiobutton.h> | 25 | #include <qradiobutton.h> |
26 | #include <qcombobox.h> | 26 | #include <qcombobox.h> |
27 | #include <qdrawutil.h> | 27 | #include <qdrawutil.h> |
28 | #include <qwidgetlist.h> | 28 | #include <qwidgetlist.h> |
29 | #include <qtoolbutton.h> | 29 | #include <qtoolbutton.h> |
30 | #include <qheader.h> | 30 | #include <qheader.h> |
31 | #include <unistd.h> | 31 | #include <unistd.h> |
32 | #include <qmenubar.h> | 32 | #include <qmenubar.h> |
33 | 33 | #include <qprogressbar.h> | |
34 | 34 | ||
35 | #include <stdio.h> | 35 | #include <stdio.h> |
36 | 36 | ||
37 | #include "htmlmasks.h" | 37 | #include "htmlmasks.h" |
38 | #include "embeddata.h" | 38 | #include "embeddata.h" |
39 | 39 | ||
40 | typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, | 40 | typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, |
41 | QColorGroup &, bool, bool); | 41 | QColorGroup &, bool, bool); |
42 | 42 | ||
43 | QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl); | 43 | QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl); |
44 | 44 | ||
45 | void TransMenuHandler::stripePixmap(QPixmap &pix, const QColor &color) | 45 | void TransMenuHandler::stripePixmap(QPixmap &pix, const QColor &color) |
46 | { | 46 | { |
47 | QImage img(pix.convertToImage()); | 47 | QImage img(pix.convertToImage()); |
48 | QImageEffect::fade(img, 0.9, color); | 48 | QImageEffect::fade(img, 0.9, color); |
49 | int x, y; | 49 | int x, y; |
50 | int r, g, b; | 50 | int r, g, b; |
51 | for(y=0; y < img.height(); y+=3){ | 51 | for(y=0; y < img.height(); y+=3){ |
52 | unsigned int *data = (unsigned int *) img.scanLine(y); | 52 | unsigned int *data = (unsigned int *) img.scanLine(y); |
53 | for(x=0; x < img.width(); ++x){ | 53 | for(x=0; x < img.width(); ++x){ |
54 | r = qRed(data[x]); | 54 | r = qRed(data[x]); |
55 | g = qGreen(data[x]); | 55 | g = qGreen(data[x]); |
56 | b = qBlue(data[x]); | 56 | b = qBlue(data[x]); |
57 | if(r-10) | 57 | if(r-10) |
58 | r-=10; | 58 | r-=10; |
59 | if(g-10) | 59 | if(g-10) |
60 | g-=10; | 60 | g-=10; |
61 | if(b-10) | 61 | if(b-10) |
62 | b-=10; | 62 | b-=10; |
63 | data[x] = qRgb(r, g, b); | 63 | data[x] = qRgb(r, g, b); |
64 | } | 64 | } |
65 | } | 65 | } |
66 | pix.convertFromImage(img); | 66 | pix.convertFromImage(img); |
67 | } | 67 | } |
68 | 68 | ||
69 | TransMenuHandler::TransMenuHandler(QObject *parent) | 69 | TransMenuHandler::TransMenuHandler(QObject *parent) |
70 | : QObject(parent) | 70 | : QObject(parent) |
71 | { | 71 | { |
72 | pixDict.setAutoDelete(true); | 72 | pixDict.setAutoDelete(true); |
73 | reloadSettings(); | 73 | reloadSettings(); |
74 | } | 74 | } |
75 | 75 | ||
76 | void TransMenuHandler::reloadSettings() | 76 | void TransMenuHandler::reloadSettings() |
77 | { | 77 | { |
78 | pixDict.clear(); | 78 | pixDict.clear(); |
79 | 79 | ||
80 | Config config ( "qpe" ); | 80 | Config config ( "qpe" ); |
81 | config. setGroup ( "Liquid-Style" ); | 81 | config. setGroup ( "Liquid-Style" ); |
82 | 82 | ||
83 | type = config. readNumEntry("Type", TransStippleBg); | 83 | type = config. readNumEntry("Type", TransStippleBg); |
84 | color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); | 84 | color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); |
85 | fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); | 85 | fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); |
86 | opacity = config. readNumEntry("Opacity", 10); | 86 | opacity = config. readNumEntry("Opacity", 10); |
87 | if ( opacity < -20 ) | 87 | if ( opacity < -20 ) |
88 | opacity = 20; | 88 | opacity = 20; |
89 | else if ( opacity > 20 ) | 89 | else if ( opacity > 20 ) |
90 | opacity = 20; | 90 | opacity = 20; |
91 | 91 | ||
92 | shadowText = config. readBoolEntry("ShadowText", true); | 92 | shadowText = config. readBoolEntry("ShadowText", true); |
93 | } | 93 | } |
94 | 94 | ||
95 | bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) | 95 | bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) |
96 | { | 96 | { |
97 | QWidget *p = (QWidget *)obj; | 97 | QWidget *p = (QWidget *)obj; |
@@ -792,132 +792,129 @@ void LiquidStyle::polish(QPalette &appPal) | |||
792 | painter.begin(&wallPaper); | 792 | painter.begin(&wallPaper); |
793 | for(i=0; i < 32; i+=4){ | 793 | for(i=0; i < 32; i+=4){ |
794 | painter.setPen(c.dark(100 + contrast)); | 794 | painter.setPen(c.dark(100 + contrast)); |
795 | painter.drawLine(0, i, 32, i); | 795 | painter.drawLine(0, i, 32, i); |
796 | painter.setPen(c.dark(100 + 3 * contrast / 5 ) ); | 796 | painter.setPen(c.dark(100 + 3 * contrast / 5 ) ); |
797 | painter.drawLine(0, i+1, 32, i+1); | 797 | painter.drawLine(0, i+1, 32, i+1); |
798 | }; | 798 | }; |
799 | painter.end(); | 799 | painter.end(); |
800 | bgBrush.setColor(c); | 800 | bgBrush.setColor(c); |
801 | bgBrush.setPixmap(wallPaper); | 801 | bgBrush.setPixmap(wallPaper); |
802 | appPal.setBrush(QColorGroup::Background, bgBrush); | 802 | appPal.setBrush(QColorGroup::Background, bgBrush); |
803 | 803 | ||
804 | // lineedits | 804 | // lineedits |
805 | c = /*QColor ( config. readEntry("Base", ( Qt::white). name ( )));*/ appPal. color ( QPalette::Active, QColorGroup::Base ); | 805 | c = /*QColor ( config. readEntry("Base", ( Qt::white). name ( )));*/ appPal. color ( QPalette::Active, QColorGroup::Base ); |
806 | QPixmap basePix; | 806 | QPixmap basePix; |
807 | basePix.resize(32, 32); | 807 | basePix.resize(32, 32); |
808 | basePix.fill(c.rgb()); | 808 | basePix.fill(c.rgb()); |
809 | painter.begin(&basePix); | 809 | painter.begin(&basePix); |
810 | painter.setPen(c.dark(105)); | 810 | painter.setPen(c.dark(105)); |
811 | for(i=0; i < 32; i+=4){ | 811 | for(i=0; i < 32; i+=4){ |
812 | painter.drawLine(0, i, 32, i); | 812 | painter.drawLine(0, i, 32, i); |
813 | painter.drawLine(0, i+1, 32, i+1); | 813 | painter.drawLine(0, i+1, 32, i+1); |
814 | }; | 814 | }; |
815 | painter.end(); | 815 | painter.end(); |
816 | baseBrush.setColor(c); | 816 | baseBrush.setColor(c); |
817 | baseBrush.setPixmap(basePix); | 817 | baseBrush.setPixmap(basePix); |
818 | it.toFirst(); | 818 | it.toFirst(); |
819 | while ((w=it.current()) != 0 ){ | 819 | while ((w=it.current()) != 0 ){ |
820 | ++it; | 820 | ++it; |
821 | if(w->inherits("QLineEdit")){ | 821 | if(w->inherits("QLineEdit")){ |
822 | QPalette pal = w->palette(); | 822 | QPalette pal = w->palette(); |
823 | pal.setBrush(QColorGroup::Base, baseBrush); | 823 | pal.setBrush(QColorGroup::Base, baseBrush); |
824 | w->setPalette(pal); | 824 | w->setPalette(pal); |
825 | } | 825 | } |
826 | else if(w->inherits("QPushButton")){ | 826 | else if(w->inherits("QPushButton")){ |
827 | applyCustomAttributes((QPushButton *)w); | 827 | applyCustomAttributes((QPushButton *)w); |
828 | } | 828 | } |
829 | } | 829 | } |
830 | } | 830 | } |
831 | 831 | ||
832 | void LiquidStyle::polish(QWidget *w) | 832 | void LiquidStyle::polish(QWidget *w) |
833 | { | 833 | { |
834 | if(w->inherits("QMenuBar")){ | 834 | if(w->inherits("QMenuBar")){ |
835 | //((QFrame*)w)->setLineWidth(0); | 835 | //((QFrame*)w)->setLineWidth(0); |
836 | w->setBackgroundMode(QWidget::PaletteBackground); | 836 | w->setBackgroundMode(QWidget::PaletteBackground); |
837 | w->setBackgroundOrigin(QWidget::ParentOrigin); | 837 | w->setBackgroundOrigin(QWidget::ParentOrigin); |
838 | return; | 838 | return; |
839 | } | 839 | } |
840 | if(w->inherits("QToolBar")){ | 840 | if(w->inherits("QToolBar")){ |
841 | w->installEventFilter(this); | 841 | w->installEventFilter(this); |
842 | w->setBackgroundMode(QWidget::PaletteBackground); | 842 | w->setBackgroundMode(QWidget::PaletteBackground); |
843 | w->setBackgroundOrigin(QWidget::WidgetOrigin); | 843 | w->setBackgroundOrigin(QWidget::WidgetOrigin); |
844 | return; | 844 | return; |
845 | } | 845 | } |
846 | if(w->inherits("QPopupMenu")) | 846 | if(w->inherits("QPopupMenu")) |
847 | w->setBackgroundMode(QWidget::NoBackground); | 847 | w->setBackgroundMode(QWidget::NoBackground); |
848 | else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) { | 848 | else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) { |
849 | w->installEventFilter(menuHandler); | 849 | w->installEventFilter(menuHandler); |
850 | } | 850 | } |
851 | 851 | ||
852 | if(w->isTopLevel()){ | 852 | if(w->isTopLevel()){ |
853 | return; | 853 | return; |
854 | } | 854 | } |
855 | 855 | ||
856 | 856 | if(w->inherits("QComboBox") || w->inherits("QProgressBar") || | |
857 | |||
858 | |||
859 | if(w->inherits("QComboBox") || | ||
860 | w->inherits("QLineEdit") || w->inherits("QRadioButton") || | 857 | w->inherits("QLineEdit") || w->inherits("QRadioButton") || |
861 | w->inherits("QCheckBox") || w->inherits("QScrollBar")) { | 858 | w->inherits("QCheckBox") || w->inherits("QScrollBar")) { |
862 | w->installEventFilter(this); | 859 | w->installEventFilter(this); |
863 | } | 860 | } |
864 | if(w->inherits("QLineEdit")){ | 861 | if(w->inherits("QLineEdit")){ |
865 | QPalette pal = w->palette(); | 862 | QPalette pal = w->palette(); |
866 | pal.setBrush(QColorGroup::Base, baseBrush); | 863 | pal.setBrush(QColorGroup::Base, baseBrush); |
867 | w->setPalette(pal); | 864 | w->setPalette(pal); |
868 | } | 865 | } |
869 | if(w->inherits("QPushButton")){ | 866 | if(w->inherits("QPushButton")){ |
870 | applyCustomAttributes((QPushButton *)w); | 867 | applyCustomAttributes((QPushButton *)w); |
871 | w->installEventFilter(this); | 868 | w->installEventFilter(this); |
872 | } | 869 | } |
873 | if(w->inherits("QButton") || w-> inherits("QComboBox")){ | 870 | if(w->inherits("QButton") || w-> inherits("QComboBox")){ |
874 | w-> setBackgroundMode ( QWidget::PaletteBackground ); | 871 | w-> setBackgroundMode ( QWidget::PaletteBackground ); |
875 | w->setBackgroundOrigin ( QWidget::ParentOrigin); | 872 | w->setBackgroundOrigin ( QWidget::ParentOrigin); |
876 | } | 873 | } |
877 | 874 | ||
878 | bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || | 875 | bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || |
879 | qstrcmp(w->name(), "qt_clipped_viewport") == 0; | 876 | qstrcmp(w->name(), "qt_clipped_viewport") == 0; |
880 | bool isViewportChild = w->parent() && | 877 | bool isViewportChild = w->parent() && |
881 | ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || | 878 | ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || |
882 | (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); | 879 | (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); |
883 | 880 | ||
884 | if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){ | 881 | if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){ |
885 | w->setBackgroundMode(QWidget::X11ParentRelative); | 882 | w->setBackgroundMode(QWidget::X11ParentRelative); |
886 | return; | 883 | return; |
887 | } | 884 | } |
888 | if(isViewportChild){ | 885 | if(isViewportChild){ |
889 | if(w->inherits("QButton") || w->inherits("QComboBox")){ | 886 | if(w->inherits("QButton") || w->inherits("QComboBox")){ |
890 | if(w->parent()){ // heh, only way to test for KHTML children ;-) | 887 | if(w->parent()){ // heh, only way to test for KHTML children ;-) |
891 | if(w->parent()->parent()){ | 888 | if(w->parent()->parent()){ |
892 | if(w->parent()->parent()->parent() && | 889 | if(w->parent()->parent()->parent() && |
893 | w->parent()->parent()->parent()->inherits("KHTMLView")){ | 890 | w->parent()->parent()->parent()->inherits("KHTMLView")){ |
894 | w->setAutoMask(true); | 891 | w->setAutoMask(true); |
895 | w->setBackgroundMode(QWidget::NoBackground); | 892 | w->setBackgroundMode(QWidget::NoBackground); |
896 | } | 893 | } |
897 | } | 894 | } |
898 | } | 895 | } |
899 | return; | 896 | return; |
900 | } | 897 | } |
901 | } | 898 | } |
902 | if(w->inherits("QHeader")){ | 899 | if(w->inherits("QHeader")){ |
903 | w->setMouseTracking(true); | 900 | w->setMouseTracking(true); |
904 | w->installEventFilter(this); | 901 | w->installEventFilter(this); |
905 | } | 902 | } |
906 | if(w-> inherits("QToolButton")&&w->parent()->inherits("QToolBar")) { | 903 | if(w-> inherits("QToolButton")&&w->parent()->inherits("QToolBar")) { |
907 | ((QToolButton*)w)->setAutoRaise (flatTBButtons); | 904 | ((QToolButton*)w)->setAutoRaise (flatTBButtons); |
908 | if ( flatTBButtons ) | 905 | if ( flatTBButtons ) |
909 | w->setBackgroundOrigin(QWidget::ParentOrigin); | 906 | w->setBackgroundOrigin(QWidget::ParentOrigin); |
910 | } | 907 | } |
911 | if(w-> inherits("QToolBarSeparator")&&w->parent()->inherits("QToolBar")) { | 908 | if(w-> inherits("QToolBarSeparator")&&w->parent()->inherits("QToolBar")) { |
912 | ((QFrame *) w)-> setFrameShape ( QFrame::NoFrame ); | 909 | ((QFrame *) w)-> setFrameShape ( QFrame::NoFrame ); |
913 | } | 910 | } |
914 | if(w->ownPalette() && !w->inherits("QButton") && !w->inherits("QComboBox")){ | 911 | if(w->ownPalette() && !w->inherits("QButton") && !w->inherits("QComboBox")){ |
915 | return; | 912 | return; |
916 | } | 913 | } |
917 | 914 | ||
918 | if(w->parent() && w->parent()->isWidgetType() && !((QWidget*)w->parent())-> | 915 | if(w->parent() && w->parent()->isWidgetType() && !((QWidget*)w->parent())-> |
919 | palette().active().brush(QColorGroup::Background).pixmap()){ | 916 | palette().active().brush(QColorGroup::Background).pixmap()){ |
920 | qWarning("No parent pixmap for child widget %s", w->className()); | 917 | qWarning("No parent pixmap for child widget %s", w->className()); |
921 | return; | 918 | return; |
922 | } | 919 | } |
923 | if(!isViewport && !isViewportChild && !w->testWFlags(WType_Popup) && | 920 | if(!isViewport && !isViewportChild && !w->testWFlags(WType_Popup) && |
@@ -974,128 +971,190 @@ void LiquidStyle::unPolish(QWidget *w) | |||
974 | 971 | ||
975 | if(w->inherits("QPushButton")){ | 972 | if(w->inherits("QPushButton")){ |
976 | unapplyCustomAttributes((QPushButton *)w); | 973 | unapplyCustomAttributes((QPushButton *)w); |
977 | w->removeEventFilter(this); | 974 | w->removeEventFilter(this); |
978 | } | 975 | } |
979 | /* | 976 | /* |
980 | if(w->inherits("QPushButton") || w-> inherits("QComboBox")){ | 977 | if(w->inherits("QPushButton") || w-> inherits("QComboBox")){ |
981 | w-> setBackgroundMode ( PaletteBackground ); | 978 | w-> setBackgroundMode ( PaletteBackground ); |
982 | } | 979 | } |
983 | */ | 980 | */ |
984 | if(w->inherits("QComboBox") || | 981 | if(w->inherits("QComboBox") || |
985 | w->inherits("QLineEdit") || w->inherits("QRadioButton") || | 982 | w->inherits("QLineEdit") || w->inherits("QRadioButton") || |
986 | w->inherits("QCheckBox") || w->inherits("QScrollBar")) { | 983 | w->inherits("QCheckBox") || w->inherits("QScrollBar")) { |
987 | w->removeEventFilter(this); | 984 | w->removeEventFilter(this); |
988 | } | 985 | } |
989 | if(w->inherits("QButton") || w->inherits("QComboBox")){ | 986 | if(w->inherits("QButton") || w->inherits("QComboBox")){ |
990 | if(w->parent() && w->parent()->inherits("KHTMLPart")){ | 987 | if(w->parent() && w->parent()->inherits("KHTMLPart")){ |
991 | w->setAutoMask(false); | 988 | w->setAutoMask(false); |
992 | } | 989 | } |
993 | } | 990 | } |
994 | if(w->inherits("QToolBar")){ | 991 | if(w->inherits("QToolBar")){ |
995 | w->removeEventFilter(this); | 992 | w->removeEventFilter(this); |
996 | w->setBackgroundMode(QWidget::PaletteBackground); | 993 | w->setBackgroundMode(QWidget::PaletteBackground); |
997 | return; | 994 | return; |
998 | } | 995 | } |
999 | if(w->inherits("QHeader")){ | 996 | if(w->inherits("QHeader")){ |
1000 | w->setMouseTracking(false); | 997 | w->setMouseTracking(false); |
1001 | w->removeEventFilter(this); | 998 | w->removeEventFilter(this); |
1002 | } | 999 | } |
1003 | } | 1000 | } |
1004 | 1001 | ||
1005 | void LiquidStyle::polish(QApplication *app) | 1002 | void LiquidStyle::polish(QApplication *app) |
1006 | { | 1003 | { |
1007 | 1004 | ||
1008 | QWindowsStyle::polish(app); | 1005 | QWindowsStyle::polish(app); |
1009 | menuAni = app->isEffectEnabled(UI_AnimateMenu); | 1006 | menuAni = app->isEffectEnabled(UI_AnimateMenu); |
1010 | menuFade = app->isEffectEnabled(UI_FadeMenu); | 1007 | menuFade = app->isEffectEnabled(UI_FadeMenu); |
1011 | if(menuAni) | 1008 | if(menuAni) |
1012 | app->setEffectEnabled(UI_AnimateMenu, false); | 1009 | app->setEffectEnabled(UI_AnimateMenu, false); |
1013 | if(menuFade) | 1010 | if(menuFade) |
1014 | app->setEffectEnabled(UI_FadeMenu, false); | 1011 | app->setEffectEnabled(UI_FadeMenu, false); |
1015 | 1012 | ||
1016 | qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); | 1013 | qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); |
1017 | 1014 | ||
1018 | Config config ( "qpe" ); | 1015 | Config config ( "qpe" ); |
1019 | config. setGroup ( "Liquid-Style" ); | 1016 | config. setGroup ( "Liquid-Style" ); |
1020 | 1017 | ||
1021 | // if ( config. readBoolEntry ( "WinDecoration", true )) | 1018 | // if ( config. readBoolEntry ( "WinDecoration", true )) |
1022 | // QApplication::qwsSetDecoration ( new LiquidDecoration ( )); | 1019 | // QApplication::qwsSetDecoration ( new LiquidDecoration ( )); |
1023 | 1020 | ||
1024 | flatTBButtons = config. readBoolEntry ( "FlatToolButtons", false ); | 1021 | flatTBButtons = config. readBoolEntry ( "FlatToolButtons", false ); |
1025 | } | 1022 | } |
1026 | 1023 | ||
1027 | void LiquidStyle::unPolish(QApplication *app) | 1024 | void LiquidStyle::unPolish(QApplication *app) |
1028 | { | 1025 | { |
1029 | QWindowsStyle::unPolish(app); | 1026 | QWindowsStyle::unPolish(app); |
1030 | app->setEffectEnabled(UI_AnimateMenu, menuAni); | 1027 | app->setEffectEnabled(UI_AnimateMenu, menuAni); |
1031 | app->setEffectEnabled(UI_FadeMenu, menuFade); | 1028 | app->setEffectEnabled(UI_FadeMenu, menuFade); |
1032 | 1029 | ||
1033 | qt_set_draw_menu_bar_impl ( 0 ); | 1030 | qt_set_draw_menu_bar_impl ( 0 ); |
1034 | 1031 | ||
1035 | // QApplication::qwsSetDecoration ( new QPEDecoration ( )); | 1032 | // QApplication::qwsSetDecoration ( new QPEDecoration ( )); |
1036 | } | 1033 | } |
1037 | 1034 | ||
1035 | |||
1036 | /* !! HACK !! Beware | ||
1037 | * | ||
1038 | * TT forgot to make the QProgressBar widget styleable in Qt 2.x | ||
1039 | * So the only way to customize the drawing, is to intercept the | ||
1040 | * paint event - since we have to use protected functions, we need | ||
1041 | * to derive a "hack" class from QProgressBar and do the painting | ||
1042 | * in there. | ||
1043 | * | ||
1044 | * - sandman | ||
1045 | */ | ||
1046 | |||
1047 | class HackProgressBar : public QProgressBar { | ||
1048 | public: | ||
1049 | HackProgressBar ( ); | ||
1050 | |||
1051 | void paint ( QPaintEvent *event, const QColorGroup &g, QPixmap *pix ) | ||
1052 | { | ||
1053 | QPainter p( this ); | ||
1054 | |||
1055 | if ( !contentsRect().contains( event->rect() ) ) { | ||
1056 | p.save(); | ||
1057 | p.setClipRegion( event->region().intersect(frameRect()) ); | ||
1058 | drawFrame( &p); | ||
1059 | p.restore(); | ||
1060 | } | ||
1061 | if ( event->rect().intersects( contentsRect() )) { | ||
1062 | p.setClipRegion( event->region().intersect( contentsRect() ) ); | ||
1063 | |||
1064 | int x, y, w, h; | ||
1065 | contentsRect ( ). rect ( &x, &y, &w, &h ); | ||
1066 | |||
1067 | int prog = progress ( ); | ||
1068 | int total = totalSteps ( ); | ||
1069 | if ( prog < 0 ) | ||
1070 | prog = 0; | ||
1071 | if ( total <= 0 ) | ||
1072 | total = 1; | ||
1073 | int bw = w * prog / total; | ||
1074 | if ( bw > w ) | ||
1075 | bw = w; | ||
1076 | |||
1077 | p.setPen(g.button().dark(130)); | ||
1078 | p.drawRect(x, y, bw, h); | ||
1079 | p.setPen(g.button().light(120)); | ||
1080 | p.drawRect(x+1, y+1, bw-2, h-2); | ||
1081 | |||
1082 | if(bw >= 4 && h >= 4 && pix) | ||
1083 | p.drawTiledPixmap(x+2, y+2, bw-4, h-4, *pix); | ||
1084 | |||
1085 | if ( progress ( )>= 0 && totalSteps ( ) > 0 ) { | ||
1086 | QString pstr; | ||
1087 | pstr. sprintf ( "%d%%", 100 * progress()/totalSteps ()); | ||
1088 | p. setPen ( g.text());//g.highlightedText ( )); | ||
1089 | p. drawText (x,y,w-1,h-1,AlignCenter,pstr); | ||
1090 | } | ||
1091 | } | ||
1092 | } | ||
1093 | }; | ||
1094 | |||
1095 | |||
1096 | |||
1038 | /* | 1097 | /* |
1039 | * This is a fun method ;-) Here's an overview. KToolBar grabs resize to | 1098 | * This is a fun method ;-) Here's an overview. KToolBar grabs resize to |
1040 | * force everything to erase and repaint on resize. This is going away, I'm | 1099 | * force everything to erase and repaint on resize. This is going away, I'm |
1041 | * trying to get shaped widgets to work right without masking. QPushButton, | 1100 | * trying to get shaped widgets to work right without masking. QPushButton, |
1042 | * QComboBox, and Panel applet handles capture mouse enter and leaves in order | 1101 | * QComboBox, and Panel applet handles capture mouse enter and leaves in order |
1043 | * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and | 1102 | * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and |
1044 | * RadioButtons need to do this differently. Qt buffers these in pixmaps and | 1103 | * RadioButtons need to do this differently. Qt buffers these in pixmaps and |
1045 | * caches them in QPixmapCache, which is bad for doing things like hover | 1104 | * caches them in QPixmapCache, which is bad for doing things like hover |
1046 | * because the style methods aren't called in paintEvents if everything | 1105 | * because the style methods aren't called in paintEvents if everything |
1047 | * is cached. We use our own Paint event handler instead. Taskbuttons and | 1106 | * is cached. We use our own Paint event handler instead. Taskbuttons and |
1048 | * pager buttons draw into a pixmap buffer, so we handle those with palette | 1107 | * pager buttons draw into a pixmap buffer, so we handle those with palette |
1049 | * modifications. For QHeader, different header items are actually one widget | 1108 | * modifications. For QHeader, different header items are actually one widget |
1050 | * that draws multiple items, so we need to check which ID is hightlighted | 1109 | * that draws multiple items, so we need to check which ID is hightlighted |
1051 | * and draw it. Finally, we also check enter and leave events for QLineEdit, | 1110 | * and draw it. Finally, we also check enter and leave events for QLineEdit, |
1052 | * since if it's inside a combobox we want to highlight the combobox during | 1111 | * since if it's inside a combobox we want to highlight the combobox during |
1053 | * hovering in the edit. | 1112 | * hovering in the edit. |
1054 | */ | 1113 | */ |
1055 | bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) | 1114 | bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) |
1056 | { | 1115 | { |
1057 | if(obj->inherits("QToolBar")){ | 1116 | if(obj->inherits("QToolBar")){ |
1058 | if(ev->type() == QEvent::Resize){ | 1117 | if(ev->type() == QEvent::Resize){ |
1059 | const QObjectList *tbChildList = obj->children(); | 1118 | const QObjectList *tbChildList = obj->children(); |
1060 | QObjectListIt it(*tbChildList); | 1119 | QObjectListIt it(*tbChildList); |
1061 | QObject *child; | 1120 | QObject *child; |
1062 | while((child = it.current()) != NULL){ | 1121 | while((child = it.current()) != NULL){ |
1063 | ++it; | 1122 | ++it; |
1064 | if(child->isWidgetType()) | 1123 | if(child->isWidgetType()) |
1065 | ((QWidget *)child)->repaint(true); | 1124 | ((QWidget *)child)->repaint(true); |
1066 | } | 1125 | } |
1067 | 1126 | ||
1068 | } | 1127 | } |
1069 | } | 1128 | } |
1070 | else if(obj->inherits("QPushButton") || obj->inherits("QComboBox")){ | 1129 | else if(obj->inherits("QPushButton") || obj->inherits("QComboBox")){ |
1071 | QWidget *btn = (QWidget *)obj; | 1130 | QWidget *btn = (QWidget *)obj; |
1072 | if(ev->type() == QEvent::Enter){ | 1131 | if(ev->type() == QEvent::Enter){ |
1073 | if(btn->isEnabled()){ | 1132 | if(btn->isEnabled()){ |
1074 | highlightWidget = btn; | 1133 | highlightWidget = btn; |
1075 | btn->repaint(false); | 1134 | btn->repaint(false); |
1076 | } | 1135 | } |
1077 | } | 1136 | } |
1078 | else if(ev->type() == QEvent::Leave){ | 1137 | else if(ev->type() == QEvent::Leave){ |
1079 | if(btn == highlightWidget){ | 1138 | if(btn == highlightWidget){ |
1080 | highlightWidget = NULL; | 1139 | highlightWidget = NULL; |
1081 | btn->repaint(false); | 1140 | btn->repaint(false); |
1082 | } | 1141 | } |
1083 | } | 1142 | } |
1084 | } | 1143 | } |
1085 | else if(obj->inherits("QToolButton")){ | 1144 | else if(obj->inherits("QToolButton")){ |
1086 | QToolButton *btn = (QToolButton *)btn; | 1145 | QToolButton *btn = (QToolButton *)btn; |
1087 | if(!btn->autoRaise()){ | 1146 | if(!btn->autoRaise()){ |
1088 | if(btn->isEnabled()){ | 1147 | if(btn->isEnabled()){ |
1089 | highlightWidget = btn; | 1148 | highlightWidget = btn; |
1090 | btn->repaint(false); | 1149 | btn->repaint(false); |
1091 | } | 1150 | } |
1092 | } | 1151 | } |
1093 | else if(ev->type() == QEvent::Leave){ | 1152 | else if(ev->type() == QEvent::Leave){ |
1094 | QWidget *btn = (QWidget *)obj; | 1153 | QWidget *btn = (QWidget *)obj; |
1095 | if(btn == highlightWidget){ | 1154 | if(btn == highlightWidget){ |
1096 | highlightWidget = NULL; | 1155 | highlightWidget = NULL; |
1097 | btn->repaint(false); | 1156 | btn->repaint(false); |
1098 | } | 1157 | } |
1099 | } | 1158 | } |
1100 | else | 1159 | else |
1101 | highlightWidget = NULL; | 1160 | highlightWidget = NULL; |
@@ -1179,129 +1238,146 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) | |||
1179 | return(true); | 1238 | return(true); |
1180 | } | 1239 | } |
1181 | // for hover, just redraw the indicator (not the text) | 1240 | // for hover, just redraw the indicator (not the text) |
1182 | else if((ev->type() == QEvent::Enter && btn->isEnabled()) || | 1241 | else if((ev->type() == QEvent::Enter && btn->isEnabled()) || |
1183 | (ev->type() == QEvent::Leave && btn == highlightWidget)){ | 1242 | (ev->type() == QEvent::Leave && btn == highlightWidget)){ |
1184 | QButton *btn = (QButton *)obj; | 1243 | QButton *btn = (QButton *)obj; |
1185 | bool isRadio = obj->inherits("QRadioButton"); | 1244 | bool isRadio = obj->inherits("QRadioButton"); |
1186 | 1245 | ||
1187 | if(ev->type() == QEvent::Enter) | 1246 | if(ev->type() == QEvent::Enter) |
1188 | highlightWidget = btn; | 1247 | highlightWidget = btn; |
1189 | else | 1248 | else |
1190 | highlightWidget = NULL; | 1249 | highlightWidget = NULL; |
1191 | QFontMetrics fm = btn->fontMetrics(); | 1250 | QFontMetrics fm = btn->fontMetrics(); |
1192 | QSize lsz = fm.size(ShowPrefix, btn->text()); | 1251 | QSize lsz = fm.size(ShowPrefix, btn->text()); |
1193 | QSize sz = isRadio ? exclusiveIndicatorSize() | 1252 | QSize sz = isRadio ? exclusiveIndicatorSize() |
1194 | : indicatorSize(); | 1253 | : indicatorSize(); |
1195 | int x = 0; | 1254 | int x = 0; |
1196 | int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; | 1255 | int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; |
1197 | //if(btn->autoMask()) | 1256 | //if(btn->autoMask()) |
1198 | // btn->erase(x+1, y+1, sz.width()-2, sz.height()-2); | 1257 | // btn->erase(x+1, y+1, sz.width()-2, sz.height()-2); |
1199 | QPainter p; | 1258 | QPainter p; |
1200 | p.begin(btn); | 1259 | p.begin(btn); |
1201 | if(isRadio) | 1260 | if(isRadio) |
1202 | drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), | 1261 | drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), |
1203 | btn->colorGroup(), btn->isOn(), | 1262 | btn->colorGroup(), btn->isOn(), |
1204 | btn->isDown(), btn->isEnabled()); | 1263 | btn->isDown(), btn->isEnabled()); |
1205 | else | 1264 | else |
1206 | drawIndicator(&p, x, y, sz.width(), sz.height(), | 1265 | drawIndicator(&p, x, y, sz.width(), sz.height(), |
1207 | btn->colorGroup(), btn->state(), btn->isDown(), | 1266 | btn->colorGroup(), btn->state(), btn->isDown(), |
1208 | btn->isEnabled()); | 1267 | btn->isEnabled()); |
1209 | p.end(); | 1268 | p.end(); |
1210 | } | 1269 | } |
1211 | } | 1270 | } |
1212 | else if(obj->inherits("QHeader")){ | 1271 | else if(obj->inherits("QHeader")){ |
1213 | QHeader *hw = (QHeader *)obj; | 1272 | QHeader *hw = (QHeader *)obj; |
1214 | if(ev->type() == QEvent::Enter){ | 1273 | if(ev->type() == QEvent::Enter){ |
1215 | currentHeader = hw; | 1274 | currentHeader = hw; |
1216 | headerHoverID = -1; | 1275 | headerHoverID = -1; |
1217 | } | 1276 | } |
1218 | else if(ev->type() == QEvent::Leave){ | 1277 | else if(ev->type() == QEvent::Leave){ |
1219 | currentHeader = NULL; | 1278 | currentHeader = NULL; |
1220 | if(headerHoverID != -1){ | 1279 | if(headerHoverID != -1){ |
1221 | hw->repaint(hw->sectionPos(headerHoverID), 0, | 1280 | hw->repaint(hw->sectionPos(headerHoverID), 0, |
1222 | hw->sectionSize(headerHoverID), hw->height()); | 1281 | hw->sectionSize(headerHoverID), hw->height()); |
1223 | } | 1282 | } |
1224 | headerHoverID = -1; | 1283 | headerHoverID = -1; |
1225 | } | 1284 | } |
1226 | else if(ev->type() == QEvent::MouseMove){ | 1285 | else if(ev->type() == QEvent::MouseMove){ |
1227 | QMouseEvent *me = (QMouseEvent *)ev; | 1286 | QMouseEvent *me = (QMouseEvent *)ev; |
1228 | int oldHeader = headerHoverID; | 1287 | int oldHeader = headerHoverID; |
1229 | headerHoverID = hw->sectionAt(me->x()); | 1288 | headerHoverID = hw->sectionAt(me->x()); |
1230 | if(oldHeader != headerHoverID){ | 1289 | if(oldHeader != headerHoverID){ |
1231 | // reset old header | 1290 | // reset old header |
1232 | if(oldHeader != -1){ | 1291 | if(oldHeader != -1){ |
1233 | hw->repaint(hw->sectionPos(oldHeader), 0, | 1292 | hw->repaint(hw->sectionPos(oldHeader), 0, |
1234 | hw->sectionSize(oldHeader), hw->height()); | 1293 | hw->sectionSize(oldHeader), hw->height()); |
1235 | } | 1294 | } |
1236 | if(headerHoverID != -1){ | 1295 | if(headerHoverID != -1){ |
1237 | hw->repaint(hw->sectionPos(headerHoverID), 0, | 1296 | hw->repaint(hw->sectionPos(headerHoverID), 0, |
1238 | hw->sectionSize(headerHoverID), hw->height()); | 1297 | hw->sectionSize(headerHoverID), hw->height()); |
1239 | } | 1298 | } |
1240 | } | 1299 | } |
1241 | } | 1300 | } |
1242 | } | 1301 | } |
1243 | return(false); | 1302 | else if (obj-> inherits( "QProgressBar" )) { |
1303 | if ( ev->type() == QEvent::Paint ) { | ||
1304 | HackProgressBar *p = (HackProgressBar *) obj; | ||
1305 | const QColorGroup &g = p-> colorGroup ( ); | ||
1306 | |||
1307 | QPixmap *pix = bevelFillDict.find(g.button().dark(120).rgb()); | ||
1308 | if(!pix){ | ||
1309 | int h, s, v; | ||
1310 | g.button().dark(120).hsv(&h, &s, &v); | ||
1311 | pix = new QPixmap(*bevelFillPix); | ||
1312 | adjustHSV(*pix, h, s, v); | ||
1313 | bevelFillDict.insert(g.button().dark(120).rgb(), pix); | ||
1314 | } | ||
1315 | p-> paint ((QPaintEvent *) ev, g, pix ); | ||
1316 | return true; | ||
1317 | } | ||
1318 | } | ||
1319 | return false ; | ||
1244 | } | 1320 | } |
1245 | 1321 | ||
1246 | void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, | 1322 | void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, |
1247 | const QColorGroup &g, bool sunken, | 1323 | const QColorGroup &g, bool sunken, |
1248 | const QBrush *) | 1324 | const QBrush *) |
1249 | { | 1325 | { |
1250 | drawRoundButton(p, sunken ? g.background() : g.button(), g.background(), | 1326 | drawRoundButton(p, sunken ? g.background() : g.button(), g.background(), |
1251 | x, y, w, h); | 1327 | x, y, w, h); |
1252 | } | 1328 | } |
1253 | 1329 | ||
1254 | void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h, | 1330 | void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h, |
1255 | const QColorGroup &g, bool sunken, | 1331 | const QColorGroup &g, bool sunken, |
1256 | const QBrush *) | 1332 | const QBrush *) |
1257 | { | 1333 | { |
1258 | if(p->device()->devType() != QInternal::Widget){ | 1334 | if(p->device()->devType() != QInternal::Widget){ |
1259 | // drawing into a temp pixmap, don't use mask | 1335 | // drawing into a temp pixmap, don't use mask |
1260 | QColor c = sunken ? g.button() : g.background(); | 1336 | QColor c = sunken ? g.button() : g.background(); |
1261 | p->setPen(c.dark(130)); | 1337 | p->setPen(c.dark(130)); |
1262 | p->drawRect(x, y, w, h); | 1338 | p->drawRect(x, y, w, h); |
1263 | p->setPen(c.light(105)); | 1339 | p->setPen(c.light(105)); |
1264 | p->drawRect(x+1, y+1, w-2, h-2); | 1340 | p->drawRect(x+1, y+1, w-2, h-2); |
1265 | 1341 | ||
1266 | 1342 | ||
1267 | // fill | 1343 | // fill |
1268 | QPixmap *pix = bevelFillDict.find(c.rgb()); | 1344 | QPixmap *pix = bevelFillDict.find(c.rgb()); |
1269 | if(!pix){ | 1345 | if(!pix){ |
1270 | int h, s, v; | 1346 | int h, s, v; |
1271 | c.hsv(&h, &s, &v); | 1347 | c.hsv(&h, &s, &v); |
1272 | pix = new QPixmap(*bevelFillPix); | 1348 | pix = new QPixmap(*bevelFillPix); |
1273 | adjustHSV(*pix, h, s, v); | 1349 | adjustHSV(*pix, h, s, v); |
1274 | bevelFillDict.insert(c.rgb(), pix); | 1350 | bevelFillDict.insert(c.rgb(), pix); |
1275 | } | 1351 | } |
1276 | 1352 | ||
1277 | p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); | 1353 | p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); |
1278 | } | 1354 | } |
1279 | else{ | 1355 | else{ |
1280 | drawClearBevel(p, x, y, w, h, sunken ? g.button() : | 1356 | drawClearBevel(p, x, y, w, h, sunken ? g.button() : |
1281 | highlightWidget == p->device() ? g.button().light(110) : | 1357 | highlightWidget == p->device() ? g.button().light(110) : |
1282 | g.background(), g.background()); | 1358 | g.background(), g.background()); |
1283 | } | 1359 | } |
1284 | } | 1360 | } |
1285 | 1361 | ||
1286 | void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p) | 1362 | void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p) |
1287 | { | 1363 | { |
1288 | QRect r = btn->rect(); | 1364 | QRect r = btn->rect(); |
1289 | bool sunken = btn->isOn() || btn->isDown(); | 1365 | bool sunken = btn->isOn() || btn->isDown(); |
1290 | QColorGroup g = btn->colorGroup(); | 1366 | QColorGroup g = btn->colorGroup(); |
1291 | 1367 | ||
1292 | 1368 | ||
1293 | //int dw = buttonDefaultIndicatorWidth(); | 1369 | //int dw = buttonDefaultIndicatorWidth(); |
1294 | if(btn->hasFocus() || btn->isDefault()){ | 1370 | if(btn->hasFocus() || btn->isDefault()){ |
1295 | QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); | 1371 | QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); |
1296 | QPixmap *pix = bevelFillDict.find(c.rgb()); | 1372 | QPixmap *pix = bevelFillDict.find(c.rgb()); |
1297 | if(!pix){ | 1373 | if(!pix){ |
1298 | int h, s, v; | 1374 | int h, s, v; |
1299 | c.hsv(&h, &s, &v); | 1375 | c.hsv(&h, &s, &v); |
1300 | pix = new QPixmap(*bevelFillPix); | 1376 | pix = new QPixmap(*bevelFillPix); |
1301 | adjustHSV(*pix, h, s, v); | 1377 | adjustHSV(*pix, h, s, v); |
1302 | bevelFillDict.insert(c.rgb(), pix); | 1378 | bevelFillDict.insert(c.rgb(), pix); |
1303 | } | 1379 | } |
1304 | p->setPen(c.dark(150)); | 1380 | p->setPen(c.dark(150)); |
1305 | p->drawLine(r.x()+1, r.y(), r.right()-1, r.y()); | 1381 | p->drawLine(r.x()+1, r.y(), r.right()-1, r.y()); |
1306 | p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); | 1382 | p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); |
1307 | p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); | 1383 | p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); |