From b23b8edce7cbd48165084dbd852875afeb800735 Mon Sep 17 00:00:00 2001 From: tpearson Date: Tue, 5 Oct 2010 18:12:45 +0000 Subject: Update qtcurve to latest upstream version git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kde-style-qtcurve@1182805 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- AUTHORS | 1 + CMakeLists.txt | 82 +- COPYING | 4 +- ChangeLog | 610 ++++- README | 36 +- cmake/QtCurveQt3.cmake | 27 + colors/CMakeLists.txt | 1 + colors/QtCurve.kcsrc | 27 + common/colorutils.c | 305 +++ common/common.h | 1726 ++++++++++--- common/config_file.c | 2756 +++++++++++++++++--- common/dot.png | Bin 0 -> 130 bytes common/radio_inner.png | Bin 0 -> 276 bytes common/radio_on.png | Bin 231 -> 221 bytes common/radio_on_small.png | Bin 0 -> 258 bytes config.h.cmake | 6 + config/CMakeLists.txt | 9 +- config/exportthemedialog.cpp | 6 +- config/exportthemedialog.h | 4 +- config/qtcurveconfig.cpp | 1337 +++++++++- config/qtcurveconfig.h | 77 +- config/qtcurveconfigbase.ui | 2940 +++++++++++++++++----- po/CMakeLists.txt | 25 + po/generate.sh | 48 + po/qtcurve.pot | 1423 +++++++++++ po/tr.po | 1509 +++++++++++ style/CMakeLists.txt | 32 +- style/pixmaps.h | 167 +- style/qtc_fixx11h.h | 233 ++ style/qtc_kstyle.cpp | 1717 +++++++++++++ style/qtc_kstyle.h | 324 +++ style/qtcurve.cpp | 5675 +++++++++++++++++++++++++++++------------- style/qtcurve.h | 114 +- style/qtcurve.themerc | 2 +- themes/Agua.qtcurve | 34 + themes/Agua_II.qtcurve | 165 ++ themes/CMakeLists.txt | 6 +- themes/Curve.qtcurve | 20 +- themes/Flat.qtcurve | 69 + themes/Human.qtcurve | 28 +- themes/Inverted.qtcurve | 22 +- themes/Klearlooks.qtcurve | 74 + themes/Milk.qtcurve | 69 + themes/Murrine.qtcurve | 22 +- themes/Ozone.qtcurve | 170 ++ themes/Plastic.qtcurve | 140 +- themes/Silk.qtcurve | 89 + 47 files changed, 18926 insertions(+), 3205 deletions(-) create mode 100644 AUTHORS create mode 100644 cmake/QtCurveQt3.cmake create mode 100644 colors/CMakeLists.txt create mode 100644 colors/QtCurve.kcsrc create mode 100644 common/colorutils.c create mode 100644 common/dot.png create mode 100644 common/radio_inner.png create mode 100644 common/radio_on_small.png create mode 100644 po/CMakeLists.txt create mode 100755 po/generate.sh create mode 100644 po/qtcurve.pot create mode 100644 po/tr.po create mode 100644 style/qtc_fixx11h.h create mode 100644 style/qtc_kstyle.cpp create mode 100644 style/qtc_kstyle.h create mode 100644 themes/Agua.qtcurve create mode 100644 themes/Agua_II.qtcurve create mode 100644 themes/Flat.qtcurve create mode 100644 themes/Klearlooks.qtcurve create mode 100755 themes/Milk.qtcurve create mode 100644 themes/Ozone.qtcurve create mode 100644 themes/Silk.qtcurve diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..5f68aed --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Craig Drummond diff --git a/CMakeLists.txt b/CMakeLists.txt index 803ff67..ad2c3ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,24 +6,53 @@ set(CPACK_GENERATOR "DEB;RPM;TGZ") set(DEBIAN_PACKAGE_DESCRIPTION "QtCurve for Qt3/KDE3") set(DEBIAN_PACKAGE_SECTION "kde") set(CPACK_SOURCE_GENERATOR "TBZ2") -set(CPACK_PACKAGE_VERSION_MAJOR "0") -set(CPACK_PACKAGE_VERSION_MINOR "55") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "6") set(CPACK_PACKAGE_VERSION_PATCH "2") -set(CPACK_PACKAGE_CONTACT "Craig Drummond ") +set(CPACK_PACKAGE_CONTACT "Craig Drummond ") set(QTCURVE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") set(QTCURVE_VERSION_FULL "${QTCURVE_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${QTCURVE_VERSION_FULL}") set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${QTCURVE_VERSION_FULL}") include(CPack) -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) -find_package(KDE3 REQUIRED) -include(KDE3Macros) +if (QTC_BUILD_CONFIG_MODULE) + if (NOT QTC_QT_ONLY) + find_package(KDE3) + if (NOT KDE3_FOUND) + set(QTC_QT_ONLY true) + message("INFO: KDE3 not found! Compiling for Qt only! (Not building the config module)") + endif (NOT KDE3_FOUND) + endif (NOT QTC_QT_ONLY) +else (QTC_BUILD_CONFIG_MODULE) + set(QTC_QT_ONLY true) +endif (QTC_BUILD_CONFIG_MODULE) +if (NOT QTC_QT_ONLY) + include(KDE3Macros) +else (NOT QTC_QT_ONLY) + set(QT_MT_REQUIRED TRUE) + find_package(Qt3 REQUIRED) + set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ) + include(QtCurveQt3) + if (QT_PLUGINS_DIR MATCHES NOTFOUND) + message(SEND_ERROR "ERROR: Failed to detemine Qt3 plugins folder. Please pass -DQT_PLUGINS_DIR= to cmake") + endif (QT_PLUGINS_DIR MATCHES NOTFOUND) +endif (NOT QTC_QT_ONLY) + +if (NOT QTC_QT_ONLY) exec_program(kde-config - ARGS --prefix + ARGS --prefix --expandvars OUTPUT_VARIABLE CMAKE_INSTALL_PREFIX) +endif (NOT QTC_QT_ONLY) + +exec_program(kde-config + ARGS --install locale --expandvars + OUTPUT_VARIABLE KDE3_LOCALE_PREFIX) file(TO_CMAKE_PATH "$ENV{KDEDIRS}" _KDEDIRS) @@ -47,11 +76,42 @@ if(NOT KDE4PREFIX) endif(NOT KDE4PREFIX) configure_file (config.h.cmake ${CMAKE_BINARY_DIR}/config.h) -add_definitions(${QT_DEFINITIONS} ${KDE3_DEFINITIONS}) -include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE3_INCLUDES}) +if (NOT QTC_QT_ONLY) + add_definitions(${QT_DEFINITIONS} ${KDE3_DEFINITIONS}) + include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE3_INCLUDES}) +else (NOT QTC_QT_ONLY) + add_definitions(${QT_DEFINITIONS}) + include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) +endif (NOT QTC_QT_ONLY) set(DATA_INSTALL_DIR ${KDE3PREFIX}/share/apps) + +if(QTC_DEFAULT_TO_KDE3) + message("INFO: Defaulting to reading KDE3 settings if KDE_SESSION_VERSION is not set") +else(QTC_DEFAULT_TO_KDE3) + message("INFO: Defaulting to reading KDE4 settings if KDE_SESSION_VERSION is not set") +endif(QTC_DEFAULT_TO_KDE3) + add_subdirectory(style) -add_subdirectory(config) -add_subdirectory(themes) +if (NOT QTC_QT_ONLY) + if (QTC_BUILD_CONFIG_MODULE) + message("**************************************************************\n" + "Warning: The KDE3 config module is deprecated, and is no longer\n" + " actively maintained. This module NO LONGER COMPILES!\n" + " It is recommended to use the KDE4 version instead.\n" + "**************************************************************\n") + add_subdirectory(config) + add_subdirectory(po) + endif (QTC_BUILD_CONFIG_MODULE) + add_subdirectory(themes) + add_subdirectory(colors) +endif (NOT QTC_QT_ONLY) +if (QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT) + message("**************************************************************\n" + "Warning: You have enabled support for the 'fix parentless dialogs'\n" + " option. This is known to BREAK some applications. Please\n" + " DO NOT report errors to application authors when you have\n" + " this enabled. Please reconsider DISABLING this option.\n" + "**************************************************************\n") +endif (QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT) diff --git a/COPYING b/COPYING index 623b625..d60c31a 100644 --- a/COPYING +++ b/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ChangeLog b/ChangeLog index 6d6fb0f..d66ae34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,589 @@ +1.6.2 +----- +1. Disable the support for 'fix parent-less dialog' option - this causes too many + issues with applications to be worth the fuss. If you really want this enabled, + use the -DQTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT=true cmake option. + +1.6.1 +----- +1. Use same radius for all corners of progressbar. + +1.6.0 +----- +1. Add 'glow' focus option - this is now the default. +2. Fix potential crash in rgbToHsv +3. Enable glow/shadow/etch for square and slight round settings. +4. Draw coloured mouse over for 'checked' toggle buttons. +5. Use Highlight colour for default button glow. +6. Default sub-menu popup delay to 225 - matches Gtk2 standard default. +7. Fix glow-mouse over for radio buttons. + +1.5.0 +----- +1. Add option to set progressbar colour. +2. Add options to have squared sliders and/or scrollbar sliders even when + general setting set to round. + +1.4.1 +----- +1. Fix config dialog compilation. + +1.4.0 +----- +1. Add striped window and menu background options. +2. Added options to not square frames and tab frames. +3. Add option to drag windows by menubar. +4. Blend menubar and window titlebar gradients if: + menubar, titlebar, and inactive titlebar gradients match AND + not blending titlebar gradient AND + using window titlebar colour for menubar AND + extending window drag into menubar +5. Default titlebar colours to window colours - matches KDE4 default. +6. Fix drawing of scrollbar background. + +1.3.1 +----- +1. Fix compilation of config module. Please note that this module is deprecated, + and might be out-of sync with the maintained KDE4 version. +2. Fix compile when style support is enabled. + +1.3.0 +----- +1. Add option to use kwin titlebar colours as menubar shade. +2. Fix(?) compilation of config module. +3. Dont use KStandardDirs to create config folder. +4. Use 'kde' to disable parent-less dialog fix for all KDE applications. + +1.2.0 +----- +1. Draw etch effect on radios if using a button effect, and not using button-like + check/radios. +2. If drawing square non-gtk style scrollviews, use a dark/light borders. +3. If drawing square scrollviews, set frame width to 1 if using thin scrollbar + groove. +4. Add options to draw square progress and entry fields when rounding. +5. Add option to control whether progressbars have a border on all sides, or just + top/bottom. +6. Add option to colour default buttons using highlight colour. +7. Expand selected check/radio colour option so as to be able to specify colour. +8. Allow to draw focus highlight for square scrollviews. + +1.1.1 +----- +1. #include config.h before using QTC_QT_ONLY + +1.1.0 +----- +1. Add option to not embolden progressbar text. +2. Add option to allow coloured mouse over for toolbar buttons. +3. Config module is deprecated, and no longer updated - use KDE4 config module + to change settings. If KDE3 version is required, pass -DQTC_BUILD_CONFIG_MODULE=true + to cmake. + +1.0.1 +----- +1. Apply cygwin patches from Yaakov S - use MODULE istead of SHARED. + +1.0.0 +----- + 1. Added option to colour selected check/radios. + 2. Added option to use a smaller dot for radios. + 3. Made check/radio and splitter highlight options a configurable % - i.e. + not based on standard hightlight % + 4. When highlighting check/radio/splitter background, use the selection gradient. + 5. Added new splitter/handle/thumb style: single dot. + 6. Default check/radio/splitter/expander highlight set to 3% + 7. Don't do coloured mouse over for buttons of editable combos, spin buttons, + or scrollbar buttons. + 8. Don't do regular coloured mouse over of sliders when these are set to be + coloured on mouse over. + 9. Allow to specify strength when colouring selected tab. +10. Remove support for QtCurve styles (these appear as unique KDE styles in the + main KDE style selection dialog). Re-enable support by passing + -DQTC_STYLE_SUPPORT=true to cmake. +11. Slightly lighter shade used for coloured mouse over of arrows. +12. Add option to specify appearance of dock-widget titlebars. +13. When saving settings to $XDG_CONFIG_HOME/qtcurve/stylerc, remove the older + $XDG_CONFIG_HOME/qtcurvestylerc, and $XDG_CONFIG_HOME/qtcurve.gtk-icons if they + exist. +14. Use split gradient for dock-widget titlebars. +15. Reduce number of supplied presets. +16. Allow to compile style against just Qt3 - tarball includes a simplified copy + of KStyle. Need to pass -DQTC_QT_ONLY=true to cmake. NOTE: May also need to set QTDIR + *before* calling cmake. +17. If KDE3 development files not found, then automatically set -DQTC_QT_ONLY=true + +0.69.1 +------ +1. Remove line beneath dock widget titles. + +0.69.0 +------ +1. Add option to control whether bottom tabs should have their gradient + shades inverted. +2. Config files now stored under $XDG_CONFIG_HOME/qtcurve (e.g. ~/.config/qtcurve) +3. Fix some issue with 'flat' appearance. +4. Fix shaded listview headers sometime being uninitialised. + +0.68.1 +------ +1. Fix reading, and saving, of 'dark inverted gradient' setting. + +0.68.0 +------ +1. New options: + Control whether icons are displayed in menus + Force alternate colours in listviews + +0.67.3 +------ +1. Fix saving of menubar item 'colour on mouse over' setting. +2. Offset sunken slider thumbs to improve appearance. + +0.67.2 +------ +1. Only do mouse over for entries if combos and spin widgets are unified. +2. If not etching/shadowing, when mouse over set to 'glow' use 'thick coloured' +3. If not etching/shadowing, decrease thinner scrollbar groove. +4. Fix shaded button on combos when not etching/shadowing. +5. Remove hard-coding of light border in progressbars - use gradient setting. + +0.67.1 +------ +1. Disable combobox mouse over for OpenOffice. + +0.67.0 +------ +1. Add option to draw insider border of inactive tabs. +2. Add option to colour the sorted listview header. +3. Disable spin button when at min/max - matches Gtk2. +4. Disable scrollbar buttons when at min/max - to match spin buttons. +5. Place non-V arrows of unified spin widgets closer together. +6. Fix shadows on radio buttons. + +0.66.0 +------ + 1. Add a new 'Dark Inverted Gradient' and use this as the default gradient + for menu stripes. + 2. New 'Agua' style gradient - looks better under KDE4 and Gtk2. + 3. Add option to lighten/darken the background of tabs. + 4. Make inactive tabs more consistent with active tabs. + 5. Remove sunken scroll views config item, and replace with option to control + if entries and scroll views should be etched (sunken). + 6. Modify defaults: + Scrollbars outside of scrollview (Gtk/oxygen style) + Thin scrollbar groove. + 7. Use KDE_SESSION_VERSION to determine which KDE prefix (KDE3, or KDE4) to + seach first for qtc_xxx.themerc files. + 8. Update Klearlooks to be more consistent with Clearlooks (lighten tab background, + use highlight strip on active tab, dont colour active tab) + 9. Use default KDE4 settings to determine colour of text for disabled items. +10. When calling kde-config/kde4-config pipe stderr to /dev/null + +0.65.4 +------ +1. Use 'MS Windows' and not 'Windows' for scrollbar type - to aid + translations. +2. Fix installation location of translation files. + +0.65.3 +------ +1. When not using button-like check/radio boxes, use view text as the + indicator colour. +2. Fix slight tab glitches when using glow tab mouse over and square + tabs. +3. Fix usage of custom menu text colours. +4. Fix custom menu stripe colour. +5. In config dialog - for gradient directions, use "Top to bottom" instead of + "Horizontal" and "Left to right" instead of "Vertical" +6. Add support for translations of config dialogs. + Turkish translation by Necmettin Begiter + +0.65.2 +------ +1. Add option to draw list view lines in pre 0.65 style. + +0.65.1 +------ +1. Use a border width of 1 if gradienting popupmenus. +2. When using darkened menu stripe use popupmenu background colour as the + base colour. +3. Fix gradient menus when not using lighter popup menu backgrounds. +4. Dont fill background of PE_PanelLineEdit +5. When readining kicker's settings, and window colours, use the correct KDE home. +6. Fix blank menus in Amarok when using gradient menu background. + +0.65.0 +------ + 1. Add options to draw editable combos, and spin widgets, as edit fields with + embedded arrows - oxygen style. + 2. Add option to draw a light border around tab widgets, as opposed to 3d look. + 3. Added ability to specify scrollbar width (11 -> 31, default 15) + 4. Base slider dimensions off of scrollbar width, unless using triangular slider. + 5. Add option to have thinner buttons. + 6. Add option to specify gradient for background of popupmenus. + 7. Enable mouse-over for entry fields. + 8. For mouse-over and focus, use same colour for top and bottom inner parts + of entry fields. + 9. When using full focus with coloured mouse over, then mouse over takes + precedence. +10. Alter default settings: + Place arrows of spin buttons, and editable combos, in the edit field. + Draw a light border around tab widget. + Thinner buttons. + Use soft gradient for active tab. + Use glow style highlight for tab mouse-over (this introduces gaps between tabs). +11. Modified how button, and combo, heights are calculated - no longer set a + minimum height. +12. Fix some re-draw errors with thin scrollbar grooves. +13. Default to reading KDE4 settings if KDE_SESSION_VERSION is not set. + Pass -DQTC_DEFAULT_TO_KDE3=true to cmake to force this to default to KDE3. +14. Call kde-config / kde4-config to ascertain users KDEHOME. +15. Fix slight redraw error with glow style mouse over tabs. +16. Remove box from listview arrows when configured to drawn listview lines. + +0.64.2 +------ +1. When using shaded combo buttons, use button colours for border. + +0.64.1 +------ +1. When using shaded combo buttons, use the combo splitter setting to + determine if there should be a border between the shaded and unshaded parts. +2. Fix background of some QTextEdits. + +0.64.0 +------ + 1. Add option to not draw border around popupmenus. + 2. Add option to unify spinbuttons. + 3. Add option to set sub-menu delay (default 100ms) + 4. Use equal top/bottom padding on popupmenu separators. + 5. Add option to colour arrow part of combobox. + 6. Draw resize grip as a darkend triangle. + 7. Add a 'thick coloured border' mouse over type. + 8. Allow to darken sliders. + 9. Add new default button indicator - darken. +10. Fix mispainted spin widget entry field. +11. Fix reading of KDE4 palette. +12. Fix setting of check/radio shade. +13. Fix storing of custom menu stripe colour. +14. In config dialog, place '%'symbol on the right for the "popup menu background" + setting. +15. Fix kaffeine's slider benig completely filled at start of song. +16. Fix LineEdit in qtconfig. +17. Under KDE4 (KDE_SESSION_VERSION>=4), default hover/focus colours to the + KDE4 defaults. + +0.63.0 +------ + 1. Add '3dfull' to gradient border options. This forces the + dark, as well as the light, portion to be drawn. + 2. Use a lighter shade for the dark portion of gradient border. + 3. Flat dot for radio buttons. + 4. Option to use button colour for listview headers. + 5. Use KDE4 colours for focus and mouse-over. + 6. Removal of background focus option. + 7. Softer colouration of selected tab. + 8. Tab mouse over options; top (as before), below, or glow. + 9. Modified defaults: + Tab mouse-over highlight drawn at the bottom + Plain slider style + Align titlebars text in center +10. Add appearance setting for background of flat scrollbar buttons. +11. Add HCY colour space. +12. Use tint and mix colour routines from KDE4's KColourUtils. +13. Remove QtCurve's 'inactiveHighlight' option, and use KDE4s setting + instead. +14. Add option to specify appearance setting of filler part of sliders. +15. Increase number of custom gradients - now matches number of gradient + config items. +16. When using glow style mouse over, use mouse over colour for arrows. +17. Option to use a thinner groove for scrollbars (only when using flat, or no, buttons). +18. Option to only colour sliders on mouse over. +19. Option to round all tabs. +20. Add option to specify menu stripe colour. +21. Update gradient preview when change colour space. +22. Remove 'Custom sunken gradient' setting, as this was not + actually used. +23. Better handling of 'full centered' titlebar texts when + window size is small. +24. Fix scrolbar sliders appearing rounded when round=none, sliders + are shaded, and flat scrollbar buttons. +25. Fix faded menuitems when not rounding. +26. Make popup menu titles more KDE4-like. +27. Fix use of base colour in disabled listviews. (Fixes bug introduced in 0.62.0) + +0.62.7 +------ +1. Show 'extra' as the default round setting in the config UI, as this is + actually the default. Note, that KDE3 does not support this and will use + 'full' instead. + +0.62.6 +------ +1. Allow ability to specify if titlebar center alignment is for the full window + width, or just the text area. + +0.62.5 +------ +1. Use gradient for filled slider - unless appearance is flat/raised. +2. Remove menubar item size adjust code when toolbar borders are set - not + needed for KDE3, as it has padding anyway. +3. Don't highlight slider groove on mouse-over. +4. Fix coloured bottom tabs. +5. Fix faded menuitems when not lightening popupmenus. + +0.62.4 +------ +1. When drawing filled slider groove, use fill colour for border as well. +2. Better positioning of V arrows on secondary scrollbar buttons. + +0.62.3 +------ +1. Fix misdrawing of filled slider groove when slider is at 0. +2. Use correct appearance setting for slider groove. +3. Fix potentional palette issues if Qt3 and KDE3 have difference palettes. +4. Override QStyle::drawItem to remove etched disabled text, as opposed to + just setting GUIStyle styleHint. This fixes the 'click on menubaritem' to + close menu issue. +5. When menubars have a border, adjust the menubar items accordingly. +6. When filling the used part of a slider groove, use the slider colour + if set, otherwise use the highlight colour. + +0.62.2 +------ +1. Fix crash when coloured mouse over is set to none, and focus is set to full. +2. Make focus full like KDE4/Gtk2 +3. Fix some issues gradient issues (tabs and menuitems). + +0.62.1 +------ +1. Use highlight colour for unselected focused view items. +2. Fix saving/reading of custom shades. +3. Fix striped progress. +4. Fix background of disabled spin widgets. + +0.62.0 +------ + 1. Reduce gradient code complexity - makes predefined gradients + work in the same vein as custom gradients. + 2. Add scrollbar/slider groove and 'sunken' appearance options. + 3. Added new soft and harsh gradients. + 4. Change defaults: + Soft gradient + Fade menuitems + Don't use highlight for menu. + Default highlight set to 3% + Toolbar separators set to sunken + Flat menubar appearance + Button like check/radios + Supply, and use, predefined custom shades + Plain progress + Don't highlight active tab + Sunken scrollviews + Sunken appearance set to soft + Line focus + Set custom appearances for titlebars + 5. Allow all bar flat and raised tabs to bol coloured. + 6. Only save appearance settings if different from default. + 7. If a gradient does not define the values for positions 0 and 100, then add these. + 8. Better colouring of selected tab. + 9. Added new focus options - full and line. +10. Add new round options - extra and max. +11. Don't etch disabled items. +12. Use text colour for focus indicator in tree/list/etc views. +13. When specifying custom gradients, add the pssibility to have no + internal border - options are now none, light, 3d +14. Only apply plastik style mouse-over scrollbars and sliders when + plastik is set as the mouse-over style. +15. Add option to specify titlebar text alignment. +16. When setting palette, also set link and link visited colours. + +0.61.4 +------ +1. Fix gradient of faded menuitems when not using lighter background. +2. Disable usage of group box lines - has too many issues. + +0.61.3 +------ +1. Fix settings for sliderThumbs, handles, toolbarSeparators, and splitters. +2. Disable 'group box line' for ksysguard. + +0.61.2 +------ +1. Fix setting of options if no qtcurvestylerc is found! +2. Fix border of tabs. + +0.61.1 +------ +1. Fix setting of default style. Fixes odd behaviour of config dialog! +2. Fix position of dark part of sunken lines. +3. Improve KDE dock widget titles. +4. Read in custom gradients and shades from any system config file. + +0.61 +---- +1. Only draw coloured border for moused-over items if they are enabled! +2. Add option to draw line after frameless groupbox title. +3. Dont darken background of dock widget titlebars, just draw a line underneath. +4. Add 'none' to toolbar handles and splitters style. +5. Change defaults: + Button effect: Shadow + Mouse over: Glow + Default button indicator: Glow + V arrows + Flat toolbars + Use highlight colour for focus + Flat scrollbar buttons + No combo line + Sunken toolbar handles + Only lighten popupmenus by 2% + Flat active tab + Don't shade sliders + Don't darken menubars + Use darkened background for progressbars +6. Allow to darken popup menu background. + +0.60 +---- + 1. Add more safety checks for destruction of hover widgets. + 2. New focus rect options - standard, highlight, background. + 3. Add the ability to specify popup menu light factor. + 4. Add option to use darkened background colour for menuitem selection. + 5. Add 'fade' to menuitem appearance. + 6. Option to have flat scrollbar buttons. + 7. New slider styles - plain rotated, and round rotated. + 8. Increase size of busy progressbar. + 9. Draw border around filled progress. +10. Option to have button-like checks/radios. +11. Use base for light part of lineedit border, and background for scrollview. +12. Nicer 'V' arrows. +13. Add option to specify appearance of inactive titlebars. +14. Round internal corners of plain coloured mouse over effect. +15. Remove reading of Qt3 palette - this 'hack' only worked for pure Qt apps. + +0.59.5 +------ +1. In config dialog, rename the 'Fill' progressbar option to 'No border', + and place it on the 'Bar' line. + +0.59.4 +------ +1. Left align dock widget titles - more KDE4 like. (Right align for RTL) +2. Dont activate menubar when Alt key is pressed alone - matches Gtk. + +0.59.3 +------ +1. Fix background drawng of sliders on toolbars (such as in Kaffeine), when + coloured mouse over is disabled and highlight factor is set to 1.0. + +0.59.2 +------ +1. Also check in share/kde4/apps/kstyle/themes for qtc_*.themerc files. + +0.59.1 +------ +1. Fix appearance of shiny glass defult buttons. +2. Give glass default buttons a light border. + +0.59 +---- + 1. When drawing gray focus rect, draw only slightly rounded. + 2. Etch/shadow effect now applied to widget sides as well as + top/bottom. + 3. Add etching to checks, radios, slider grooves, and progressbars. + 4. Option to have progress fill groove - default to true. + 5. Option to display non-editable combo splitter - defaults to true. + 6. Dont do coloured mouse over for mdi buttons, dock widget buttons, + or toolbar buttons. + 7. Better coloured mouse over for checks and radios. + 8. Don't use background colour for non-coloured mouse over of + check/radios if highlighting text backgroud. + 9. When colouring menubars, correctly draw menubar text colour + of inactive windows. +10. Fix potential crash when using pixmap cache. +11. Fix tab coloured mouse-over when not rounded. +12. Implement size grip. +13. New mouse over effect - glow. Only applicable if etching or shadowing. +14. New default button indicator - glow. Only applicable if etching + or shadowing. +15. Allow up to 10 custom defined gradients. +16. Allow custom shades to be specified. +17. Add option to specify active tab appearance. +18. Don't do coloured mouse-overs for sunken buttons. +19. Apply 'border menuitems' only to popup menus. +20. If lightening popup menus, and not bordering menuitems, then remove 1 + pix border arund popup menus. +21. Change default to not border menuitems. +22. Re-arrange config GUI. +23. Remove some frames from kate. +24. Scrolview options: allow sunken, highlight, and square. +25. Option to specify progressbar groove appearance. + +0.58 +---- +1. Add a config option for menu stripe appearance - defaults to gradient. +2. Add a config option for selection appearance - defaults to flat. KDE4 (Qt4.4) & Gtk2 only. +3. Use background colour for disabled scrollbar buttons. +4. Remove some frames from systemsettings. +5. Don't draw menu separators through stripe. +6. Draw menu stripe on the right for RTL languages. +7. Supply a QtCurve colours file. +8. Lighter menustripe when not lightening menus. +9. Lighter menu separators. + +0.57.1 +------ +1. Fix for frameless groupboxes krusader's config dialog. +2. Draw QDockWindowResize handles like QSplitters. +3. Make dock windows more KDE4 like. +4. Don't draw frames around kicker buttons. +5. Fix kicker menu stripe. + +0.57 +---- +1. Modify defaults: + Turn off shade menubar only of active window + Set default button indicator to tint +2. Re-added option to highlight background of check/radio text on mouseover. + +0.56.3 +------ +1. Don't set sliders to flat just because appearance is flat. + +0.56.2 +------ +1. Use case-insesitive string compares when checking Qt and KDE config files. +2. Fix for (sometimes) ever-boldening frameless groupbox titles. +3. Don't colour non-maxed sliders of disabled scrollviews. + +0.56.1 +------ +1. Fix crash when using corner default button indicator and no coloured + mouse over. + +0.56 +---- +1. Change default settings: + Dont animate progressbars + Frameless groupboxes + Gradient KDE4 window titlebars +2. Correctly position corner indicator. +3. Use mouse over colours for corner indicator. +4. Add option to control window titlebar appearance - default to + gradient. +5. Read in KWin's pallete, and use to colour MDI windows. +6. Draw own icons for titlebar buttons - more KDE4 like. +7. Option to tint the default button colour. +8. Option to draw a stripe on the left hand side of popupmenus. +9. Only mark default button if it is enabled. + +0.55.3 +------ +1. Style "Ideal::Button"s on "Ideal::ButtonBar"s as per KMultiTabBar tabs. + (Makes KTorrent's tab buttons look like Kate's sidebar buttons) +2. Read KDE4's contrast setting if running under KDE4. + 0.55.2 ------ 1. Add ability to import qtc_*.themerc settings into config dialog. @@ -23,7 +609,7 @@ 6. Optional diagonal progressbar sripes. 7. Use alternating dark/light for dashed toolbar handles. 8. New 'split' style gradient. - 9. Option to specift slider style: plain, round (only when appearance=round), + 9. Option to specify slider style: plain, round (only when appearance=round), and triangular (plastik-ish) 10. Modify default style: flat splitter lines, flat slider thumbs, no toolbar separators, triangular slider, diagonal progressbar stripes. @@ -113,7 +699,7 @@ light colour schemes. 9. Dont draw sunken panel around checked menuitems. 10. Fix karm (and others?) statusbar icon. -11. Fix for radio buttons in apps where QApplication::NormalColor!=QApplication::colorSpec() +11. Fix for radio buttons in apps where QApplication::NormalColour!=QApplication::colourSpec() (e.g. designer) 0.50 @@ -221,7 +807,7 @@ follows general appearance. Tab appearance - set from general appearace. Draw dock window titles - never. - Colored sidebar buttons - always. + Coloured sidebar buttons - always. 3. Changed appearance of check/radios - now filled with base colour. 4. Etch look for button, combos, line edits, and spin boxes. @@ -294,7 +880,7 @@ 0.45 ---- 1. Option to control whether highlighted items should use - the highlight color in inactive windows. + the highlight colour in inactive windows. 2. Option to control whether menubars should be shaded in inactive windows. 3. Fix loading / selection of options. @@ -334,7 +920,7 @@ next, or none. 9. Slightly better radios in khtml. 10. Slightly smaller buttons. -11. Option to have colored side-bar buttons - e.g. the buttons on the +11. Option to have coloured side-bar buttons - e.g. the buttons on the edge of kate's windows. 12. Improvement to Opera's MDI buttons in menubar area. Not perfect, but better. @@ -343,7 +929,7 @@ 0.43.2 ------ -1. Fix the config dialog to notice changes in menu text color settings. +1. Fix the config dialog to notice changes in menu text colour settings. 2. Dont draw menubar text twice! 0.43.1 @@ -359,7 +945,7 @@ 5. Really fix KDE 3.5.5 taskbar flicker... 6. Slight improvement to combobox when right-to-left 7. Seperate specification of scollbar slider, and range slider, settings. - 8. Option to specify menubar text colors. + 8. Option to specify menubar text colours. 9. New 'flat' appearance. 10. Options to use a coloured border for mouse-over. 11. Nicer looking check and radio buttons - using pixmaps. @@ -508,7 +1094,7 @@ 7. KDE: Use dots also for general handles - more consistent. 8. KDE: Theme dock window handles - i.e. no more text. 9. KDE: Fix/hack look of MDI window buttons. -10. GTK2: Hackish fix for firefox and KDE's "apply colors to non-KDE apps" +10. GTK2: Hackish fix for firefox and KDE's "apply colours to non-KDE apps" setting. 11. GTK: Fix for tear of menu background. @@ -569,7 +1155,7 @@ 6. ALL: New gradient style: bevelled - gradient top/bot, and plain in the middle. Affects listview headers, buttons, and combos. 7. ALL: Allow setting of listview appearance. - 8. ALL: Allow setting of listview header color - background, button, or + 8. ALL: Allow setting of listview header colour - background, button, or custom. 9. ALL: Option to only round top of selected menubar items. 10. ALL: New toolbar handle style: dashes @@ -605,8 +1191,8 @@ wont happen in Gtk2 apps until they are restarted. 4. GTK: Dont draw dividers in listview headers, unless header is >10 pixels 5. ALL: Gradient non-selected tabs as well as selected. -6. GTK2: Also look in "hicolor" for icons. Search order will be: - , crystalsvg, hicolor +6. GTK2: Also look in "hicolour" for icons. Search order will be: + , crystalsvg, hicolour 7. GTK2: Map gt-add and gtk-remove stock icons 0.30 @@ -691,7 +1277,7 @@ 11. ALL: Fix for tab-bar highlight when using light selection colours. 12. KDE: Fix for non-bordered gradient radio buttons. 13. GTK: More KDE like menu sizing. -14. KDE: Fix/hack for OO.o2.x menubars. If the selected menu color is toodark, +14. KDE: Fix/hack for OO.o2.x menubars. If the selected menu colour is toodark, then lighten. This is required as OO.o always draws the menu text dark! It seems to have a check for plastik style though, and then it draws selected popup menu items white. diff --git a/README b/README index acd7309..733220f 100644 --- a/README +++ b/README @@ -8,6 +8,27 @@ To build and install: 4. make 5. make install +The following options may be supplied to cmake: + + -DQTC_QT_ONLY=true + Build style as a pure Qt3 style. NOTE: May also need to set QTDIR *before* + calling cmake. + This is the default as from QtCurve 1.0.0 + + -DQTC_BUILD_CONFIG_MODULE=true + Build KDE3 config module. NOTE: This is no longer maintained. + + -DQTC_DEFAULT_TO_KDE3=true + If the KDE_SESSION_VERSION is not set, then assume we are running + under KDE3. If this cmake option is not set, then KDE4 is assumed. + + -DQTC_STYLE_SUPPORT=true + Support QtCurve style files. These are stored as + /share/apps/kstyle/themes/qtc_.themerc + + -DQTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT=true + Enable support for the 'fixParentlessDialogs' config option. NOTE: This is + known to break some applications - hence is disabled by default! Themes ------ @@ -36,10 +57,20 @@ or copy to /share/apps/kstyle/themes/ (usually When KDE's style panel is restarted, your new theme should appear in the list. +NOTE: As of QtCurve 1.0.0 style support has been disabled by default, and you will +need to explicitly enable it via QTC_STYLE_SUPPORT + +Testing +------- +As of v1.2.1, QtCurve can be forced to read its settings from an alternate config +file via the QTCURVE_CONFIG_FILE environment variable. This is only really useful +for testing alternate config settings without changing the users current settings. +Usage: + + QTCURVE_CONFIG_FILE=~/testfile kcalc Creating Distribution Packages ------------------------------ - CMake (as of v2.4.x) does not support building rpm or deb packages, and a simple checkinstall will not work. CMake 2.6 should support rpm and deb packages, but until then I have supplied a simple shell script to build a package with checkinstall. @@ -52,7 +83,6 @@ To use this: pixmaps.h --------- - To regenerate this, run the following: - qembed radio_frame.png radio_light.png radio_on.png check_on.png slider.png slider_light.png slider_v.png slider_light_v.png check_x_on.png > pixmaps.h \ No newline at end of file + qembed radio_frame.png radio_inner.png radio_light.png radio_on.png radio_on_small.png check_on.png slider.png slider_light.png check_x_on.png dot.png > pixmaps.h diff --git a/cmake/QtCurveQt3.cmake b/cmake/QtCurveQt3.cmake new file mode 100644 index 0000000..dac1b1b --- /dev/null +++ b/cmake/QtCurveQt3.cmake @@ -0,0 +1,27 @@ +FILE(GLOB GLOB_PATHS_BIN /usr/lib/qt-3*/bin/) +FIND_PATH(QT_PLUGINS_DIR imageformats + $ENV{QTDIR}/plugins + ${GLOB_PATHS_BIN} + /usr/local/qt/plugins + /usr/lib/qt/plugins + /usr/lib/qt3/plugins + /usr/share/qt3/plugins + ) + +MACRO(QTCURVE_QT_WRAP_CPP outfiles ) + # get include dirs + GET_DIRECTORY_PROPERTY(moc_includes_tmp INCLUDE_DIRECTORIES) + SET(moc_includes) + + FOREACH(it ${ARGN}) + GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/${outfilename}.moc) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS -o ${outfile} ${infile} + DEPENDS ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH(it) + +ENDMACRO(QTCURVE_QT_WRAP_CPP) diff --git a/colors/CMakeLists.txt b/colors/CMakeLists.txt new file mode 100644 index 0000000..423bda3 --- /dev/null +++ b/colors/CMakeLists.txt @@ -0,0 +1 @@ +install(FILES QtCurve.kcsrc DESTINATION ${DATA_INSTALL_DIR}/kdisplay/color-schemes) diff --git a/colors/QtCurve.kcsrc b/colors/QtCurve.kcsrc new file mode 100644 index 0000000..d7409dc --- /dev/null +++ b/colors/QtCurve.kcsrc @@ -0,0 +1,27 @@ +[Color Scheme] +Name=QtCurve +activeBackground=169,195,228 +activeBlend=169,195,228 +activeForeground=255,255,255 +activeTitleBtnBg=220,220,220 +alternateBackground=240,240,240 +background=239,236,231 +buttonBackground=239,236,231 +buttonForeground=0,0,0 +contrast=7 +foreground=0,0,0 +frame=238,238,230 +handle=238,238,230 +inactiveBackground=244,244,244 +inactiveBlend=244,244,244 +inactiveForeground=20,19,18 +inactiveFrame=238,238,230 +inactiveHandle=238,238,230 +inactiveTitleBtnBg=220,220,220 +linkColor=0,0,192 +selectBackground=69,126,224 +selectForeground=255,255,255 +shadeSortColumn=true +visitedLinkColor=128,0,128 +windowBackground=224,232,238 +windowForeground=0,0,0 diff --git a/common/colorutils.c b/common/colorutils.c new file mode 100644 index 0000000..05aaaea --- /dev/null +++ b/common/colorutils.c @@ -0,0 +1,305 @@ +/* + This file is taken from kcolorspaces.cpp and kcolorutils.cpp from kdelibs +The code has been modified to work with QColor (Qt3 &Qt4) and GdkColor +*/ + +/* This file is part of the KDE project + * Copyright (C) 2007 Matthew Woehlke + * Copyright (C) 2007 Olaf Schmidt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include + +#ifdef __cplusplus +#if defined QT_VERSION && (QT_VERSION >= 0x040000) +#define FLOAT_COLOR(VAL, COL) (VAL).COL##F() +#define TO_COLOR(R, G, B) QColor::fromRgbF(R, G, B) +#else +#define FLOAT_COLOR(VAL, COL) ((double)(((VAL).COL()*1.0)/255.0)) +#define TO_COLOR(R, G, B) QColor(limit(R*255.0), limit(G*255.0), limit(B*255.0)) +#endif +#else +#define inline +#define FLOAT_COLOR(VAL, COL) ((double)(((VAL).COL*1.0)/65535.0)) +static GdkColor qtcGdkColor(double r, double g, double b) +{ + GdkColor col; + + col.red=limit(r*65535); + col.green=limit(g*65535); + col.blue=limit(b*65535); + + return col; +} + +#define TO_COLOR(R, G, B) qtcGdkColor(R, G, B) +#endif + +static inline double ColorUtils_normalize(double a) +{ + return (a < 1.0 ? (a > 0.0 ? a : 0.0) : 1.0); +} + +static inline double ColorUtils_wrap(double a) +{ + static double d = 1.0; + double r = fmod(a, d); + return (r < 0.0 ? d + r : (r > 0.0 ? r : 0.0)); +} + +#define HCY_REC 709 // use 709 for now +#if HCY_REC == 601 +static const double yc[3] = { 0.299, 0.587, 0.114 }; +#elif HCY_REC == 709 +static const double yc[3] = {0.2126, 0.7152, 0.0722}; +#else // use Qt values +static const double yc[3] = { 0.34375, 0.5, 0.15625 }; +#endif + +static inline double ColorUtils_HCY_gamma(double n) +{ + return pow(ColorUtils_normalize(n), 2.2); +} + +static inline double ColorUtils_HCY_igamma(double n) +{ + return pow(ColorUtils_normalize(n), 1.0/2.2); +} + +static inline double ColorUtils_HCY_lumag(double r, double g, double b) +{ + return r*yc[0] + g*yc[1] + b*yc[2]; +} + +typedef struct +{ + double h, c, y; +} ColorUtils_HCY; + +// static ColorUtils_HCY ColorUtils_HCY_fromValues(double h_, double c_, double y_/*, double a_*/) +// { +// h = h_; +// c = c_; +// y = y_; +// // a = a_; +// } + +static ColorUtils_HCY ColorUtils_HCY_fromColor(const color *color) +{ + ColorUtils_HCY hcy; + double r = ColorUtils_HCY_gamma(FLOAT_COLOR(*color, red)); + double g = ColorUtils_HCY_gamma(FLOAT_COLOR(*color, green)); + double b = ColorUtils_HCY_gamma(FLOAT_COLOR(*color, blue)); +// a = color.alphaF(); + + // luma component + hcy.y = ColorUtils_HCY_lumag(r, g, b); + + // hue component + double p = MAX(MAX(r, g), b); + double n = MIN(MIN(r, g), b); + double d = 6.0 * (p - n); + if (n == p) + hcy.h = 0.0; + else if (r == p) + hcy.h = ((g - b) / d); + else if (g == p) + hcy.h = ((b - r) / d) + (1.0 / 3.0); + else + hcy.h = ((r - g) / d) + (2.0 / 3.0); + + // chroma component + if (0.0 == hcy.y || 1.0 == hcy.y) + hcy.c = 0.0; + else + hcy.c = MAX( (hcy.y - n) / hcy.y, (p - hcy.y) / (1 - hcy.y) ); + return hcy; +} + +static color ColorUtils_HCY_toColor(ColorUtils_HCY *hcy) +{ + // start with sane component values + double _h = ColorUtils_wrap(hcy->h); + double _c = ColorUtils_normalize(hcy->c); + double _y = ColorUtils_normalize(hcy->y); + + // calculate some needed variables + double _hs = _h * 6.0, th, tm; + if (_hs < 1.0) { + th = _hs; + tm = yc[0] + yc[1] * th; + } + else if (_hs < 2.0) { + th = 2.0 - _hs; + tm = yc[1] + yc[0] * th; + } + else if (_hs < 3.0) { + th = _hs - 2.0; + tm = yc[1] + yc[2] * th; + } + else if (_hs < 4.0) { + th = 4.0 - _hs; + tm = yc[2] + yc[1] * th; + } + else if (_hs < 5.0) { + th = _hs - 4.0; + tm = yc[2] + yc[0] * th; + } + else { + th = 6.0 - _hs; + tm = yc[0] + yc[2] * th; + } + + // calculate RGB channels in sorted order + double tn, to, tp; + if (tm >= _y) { + tp = _y + _y * _c * (1.0 - tm) / tm; + to = _y + _y * _c * (th - tm) / tm; + tn = _y - (_y * _c); + } + else { + tp = _y + (1.0 - _y) * _c; + to = _y + (1.0 - _y) * _c * (th - tm) / (1.0 - tm); + tn = _y - (1.0 - _y) * _c * tm / (1.0 - tm); + } + + // return RGB channels in appropriate order + if (_hs < 1.0) + return TO_COLOR(ColorUtils_HCY_igamma(tp), ColorUtils_HCY_igamma(to), ColorUtils_HCY_igamma(tn)); + else if (_hs < 2.0) + return TO_COLOR(ColorUtils_HCY_igamma(to), ColorUtils_HCY_igamma(tp), ColorUtils_HCY_igamma(tn)); + else if (_hs < 3.0) + return TO_COLOR(ColorUtils_HCY_igamma(tn), ColorUtils_HCY_igamma(tp), ColorUtils_HCY_igamma(to)); + else if (_hs < 4.0) + return TO_COLOR(ColorUtils_HCY_igamma(tn), ColorUtils_HCY_igamma(to), ColorUtils_HCY_igamma(tp)); + else if (_hs < 5.0) + return TO_COLOR(ColorUtils_HCY_igamma(to), ColorUtils_HCY_igamma(tn), ColorUtils_HCY_igamma(tp)); + else + return TO_COLOR(ColorUtils_HCY_igamma(tp), ColorUtils_HCY_igamma(tn), ColorUtils_HCY_igamma(to)); +} + +// #ifndef __cplusplus +static inline double ColorUtils_HCY_luma(const color *color) +{ + return ColorUtils_HCY_lumag(ColorUtils_HCY_gamma(FLOAT_COLOR(*color, red)), + ColorUtils_HCY_gamma(FLOAT_COLOR(*color, green)), + ColorUtils_HCY_gamma(FLOAT_COLOR(*color, blue))); +} + +static inline double ColorUtils_mixQreal(double a, double b, double bias) +{ + return a + (b - a) * bias; +} + +static inline double ColorUtils_luma(const color *color) +{ + return ColorUtils_HCY_luma(color); +} + +static double ColorUtils_contrastRatio(const color *c1, const color *c2) +{ + double y1 = ColorUtils_luma(c1), y2 = ColorUtils_luma(c2); + if (y1 > y2) + return (y1 + 0.05) / (y2 + 0.05); + else + return (y2 + 0.05) / (y1 + 0.05); +} + +static color ColorUtils_lighten(const color *color, double ky, double kc) +{ + ColorUtils_HCY c=ColorUtils_HCY_fromColor(color); + + c.y = 1.0 - ColorUtils_normalize((1.0 - c.y) * (1.0 - ky)); + c.c = 1.0 - ColorUtils_normalize((1.0 - c.c) * kc); + return ColorUtils_HCY_toColor(&c); +} + +static color ColorUtils_darken(const color *color, double ky, double kc) +{ + ColorUtils_HCY c=ColorUtils_HCY_fromColor(color); + c.y = ColorUtils_normalize(c.y * (1.0 - ky)); + c.c = ColorUtils_normalize(c.c * kc); + return ColorUtils_HCY_toColor(&c); +} + +static color ColorUtils_shade(const color *color, double ky, double kc) +{ + ColorUtils_HCY c=ColorUtils_HCY_fromColor(color); + c.y = ColorUtils_normalize(c.y + ky); + c.c = ColorUtils_normalize(c.c + kc); + return ColorUtils_HCY_toColor(&c); +} + +static color ColorUtils_mix(const color *c1, const color *c2, double bias); + +static color ColorUtils_tintHelper(const color *base, const color *col, double amount) +{ + color mixed=ColorUtils_mix(base, col, pow(amount, 0.3)); + ColorUtils_HCY c=ColorUtils_HCY_fromColor(&mixed); + c.y = ColorUtils_mixQreal(ColorUtils_luma(base), c.y, amount); + + return ColorUtils_HCY_toColor(&c); +} + +static color ColorUtils_tint(const color *base, const color *col, double amount) +{ + if (amount <= 0.0) return *base; + if (amount >= 1.0) return *col; + if (isnan(amount)) return *base; + + double ri = ColorUtils_contrastRatio(base, col); + double rg = 1.0 + ((ri + 1.0) * amount * amount * amount); + double u = 1.0, l = 0.0; + color result; + int i; + for (i = 12 ; i ; --i) { + double a = 0.5 * (l+u); + result = ColorUtils_tintHelper(base, col, a); + double ra = ColorUtils_contrastRatio(base, &result); + if (ra > rg) + u = a; + else + l = a; + } + return result; +} + +static color ColorUtils_mix(const color *c1, const color *c2, double bias) +{ + if (bias <= 0.0) return *c1; + if (bias >= 1.0) return *c2; + if (isnan(bias)) return *c1; + + { + double r = ColorUtils_mixQreal(FLOAT_COLOR(*c1, red), FLOAT_COLOR(*c2, red), bias); + double g = ColorUtils_mixQreal(FLOAT_COLOR(*c1, green), FLOAT_COLOR(*c2, green), bias); + double b = ColorUtils_mixQreal(FLOAT_COLOR(*c1, blue), FLOAT_COLOR(*c2, blue), bias); + /*double a = ColorUtils_mixQreal(FLOAT_COLOR(*c1, alpha), FLOAT_COLOR(*c2, alpha), bias);*/ + + return TO_COLOR(r, g, b); + } +} + +// #endif +/* Added!!! */ +// static color ColorUtils_shade_qtc(const color *color, double k) +// { +// ColorUtils_HCY c=ColorUtils_HCY_fromColor(color); +// c.y = ColorUtils_normalize(c.y * (k>1.0 ? (k*1.1) : (k<1.0 ? (k*0.9) : k))); +// return ColorUtils_HCY_toColor(&c); +// } diff --git a/common/common.h b/common/common.h index 21f6bae..c64872b 100644 --- a/common/common.h +++ b/common/common.h @@ -2,7 +2,7 @@ #define __COMMON_H__ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -25,17 +25,29 @@ between Qt and Gtk, but not polute the namespace with exported functions... */ #include +#include #include #include "config.h" -/* - The following #define disables the rounding when scrollbar type==none. -#define QTC_SIMPLE_SCROLLBARS -*/ +#if defined _WIN32 && defined QT_VERSION && (QT_VERSION >= 0x040000) +#include +#include +#include + +static int isnan(double x) +{ + return _isnan(x); +} + +static int lstat(const char* fileName, struct stat* s) +{ + return stat(fileName, s); +} +#endif /* - The following #define disables the custom focus rectangle -#define QTC_PLAIN_FOCUS_ONLY + The following #define disables the rounding when scrollbar type==none. +#define SIMPLE_SCROLLBARS */ /* @@ -43,64 +55,62 @@ the scrollbar buttons when at min/max. This removes the thick looking line between the slider and the buttons. */ -#define QTC_INCREASE_SB_SLIDER - -/* - Enable this to do focus highlighting for scrollviews... NOTE: Gtk2 currently does not do this. -#define QTC_HIGHLIGHT_SCROLVIEWS -*/ - -/* - Control shading used for glass variants. - 0 => As used in 0.51.1 + - 1 => As used in 0.51 - 2 => As used in <0.51 -*/ -#define QTC_GLASS_SHADING 0 +#define INCREASE_SB_SLIDER typedef enum { SHADING_SIMPLE=0, SHADING_HSL=1, - SHADING_HSV=2 + SHADING_HSV=2, + SHADING_HCY=3 } EShading; -#if (!defined QTC_CONFIG_DIALOG) && (!defined QTC_KWIN) -static EShading shading=SHADING_HSL; -#endif - #ifdef __cplusplus #include -#ifdef QTC_CONFIG_DIALOG +#ifdef CONFIG_DIALOG #include #endif +#include +#include +#if !defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION >= 0x040000) +#include +#endif #else #include #endif #ifdef __cplusplus +#include typedef QColor color; + +#if defined QT_VERSION && (QT_VERSION >= 0x040000) +#include +typedef QSet Strings; +#else +typedef QStringList Strings; +#endif + #else typedef gboolean bool; typedef GdkColor color; +typedef gchar ** Strings; #define true TRUE #define false FALSE #endif -#define QTC_GROUP "Settings" -/*#define QTC_DESCR_GROUP "Description"*/ +#define SETTINGS_GROUP "Settings" +#define KWIN_GROUP "KWin" +/*#define DESCR_GROUP "Description"*/ /* qtc_.themerc support */ #define KDE_PREFIX(V) ((4==(V)) ? KDE4PREFIX : KDE3PREFIX) -#define QTC_THEME_DIR "/share/apps/kstyle/themes/" -#define QTC_THEME_PREFIX "qtc_" -#define QTC_THEME_SUFFIX ".themerc" - +#define THEME_DIR "/share/apps/kstyle/themes/" +#define THEME_DIR4 "/share/kde4/apps/kstyle/themes/" +#define THEME_PREFIX "qtc_" +#define THEME_SUFFIX ".themerc" +#define BORDER_SIZE_FILE "windowBorderSizes" -#define QTC_CHECK_SIZE 13 -#define QTC_RADIO_SIZE 13 -#define QTC_MIN_BTN_SIZE 8 -#define QTC_LV_SIZE 7 +#define LV_SIZE 7 #define LARGE_ARR_WIDTH 7 #define LARGE_ARR_HEIGHT 4 @@ -110,6 +120,13 @@ typedef GdkColor color; #define NUM_STD_SHADES 6 #define NUM_EXTRA_SHADES 3 +enum +{ + ALPHA_ETCH_LIGHT = 0, + ALPHA_ETCH_DARK, + NUM_STD_ALPHAS +}; + #define TOTAL_SHADES NUM_STD_SHADES+NUM_EXTRA_SHADES #define ORIGINAL_SHADE TOTAL_SHADES @@ -118,7 +135,7 @@ typedef GdkColor color; #define SHADE_2_HIGHLIGHT NUM_STD_SHADES+2 /* 3d effect - i.e. buttons, etc */ -#define QTC_SHADES \ +#define SHADES \ static const double shades[2][11][NUM_STD_SHADES]=\ { \ { /* HSV & HSL */ \ @@ -149,88 +166,70 @@ typedef GdkColor color; } \ } ; -#define QTC_SIMPLE_SHADING (!shading) - -#define QT_STD_BORDER 5 -#define QT_DISABLED_BORDER QT_STD_BORDER /*3*/ -#define QT_BORDER(E) (/*(E) ?*/ QT_STD_BORDER/* : QT_DISABLED_BORDER*/) - -#define QT_FRAME_DARK_SHADOW 2 -#define QT_FOCUS 3 - -#define QTC_SHADE(c, s) \ +#define SIMPLE_SHADING (!shading) +#define DEFAULT_CONTRAST 7 + +#define THIN_SBAR_MOD ((opts.sliderWidthDEFAULT_SLIDER_WIDTH ? (opts.sliderWidth-9)/2 : 4)+(EFFECT_NONE==opts.buttonEffect ? 1 : 0)) +#define SLIDER_SIZE (opts.sliderWidth10 || c<0 || s>=NUM_STD_SHADES || s<0 \ ? 1.0 \ - : opts.darkerBorders && (QT_STD_BORDER==i || QT_DISABLED_BORDER==i) \ - ? shades[SHADING_SIMPLE==shading ? 1 : 0][c][s] - 0.1 \ - : shades[SHADING_SIMPLE==shading ? 1 : 0][c][s] ) + : opts.darkerBorders && (STD_BORDER==i || DISABLED_BORDER==i) \ + ? shades[SHADING_SIMPLE==opts.shading ? 1 : 0][c][s] - 0.1 \ + : shades[SHADING_SIMPLE==opts.shading ? 1 : 0][c][s] ) #define TAB_APPEARANCE(A) (A) /* (APPEARANCE_GLASS==(A) ? APPEARANCE_GRADIENT : (A)) */ -#define QTC_COLOR_SEL_TAB_FACTOR 1.2 - -#define QTC_ROUNDED (ROUND_NONE!=opts.round) - -#define QTC_ETCHED_DARK 0.95 -#define SHADE_BEVEL_GRAD_LIGHT (QTC_SIMPLE_SHADING ? 1.05 : 1.07) -#define SHADE_BEVEL_GRAD_DARK (QTC_SIMPLE_SHADING ? 0.93 : 0.91) -#define SHADE_BEVEL_GRAD_SEL_LIGHT (QTC_SIMPLE_SHADING ? 1.05 : 1.07) -#define SHADE_BEVEL_GRAD_SEL_DARK (QTC_SIMPLE_SHADING ? 0.95 : 0.93) - -#define SHADE_BEVEL_MENU_ITEM_LIGHT (QTC_SIMPLE_SHADING ? 1.07 : 1.09) -#define SHADE_BEVEL_MENU_ITEM_DARK (QTC_SIMPLE_SHADING ? 0.85 : 0.83) - -#define SHADE_SLIDER_LIGHT 1.1 -#define SHADE_SLIDER_DARK 0.8 - -#define SHADE_SBAR_LIGHT 1.02 -#define SHADE_SBAR_DARK 0.95 - -#define SHADE_MENU_LIGHT 1.02 -#define SHADE_MENU_DARK 0.96 - -#define SHADE_TAB_SEL_LIGHT 1.1 -#define SHADE_TAB_SEL_DARK 1.0 -#define SHADE_BOTTOM_TAB_SEL_LIGHT 1.0 -#define SHADE_BOTTOM_TAB_SEL_DARK 0.96 - -#define SPLIT_GRADIENT_FACTOR 0.415 - -#if !defined QTC_GLASS_SHADING || QTC_GLASS_SHADING==0 - - #define SHADE_GLASS_TOP_A(A, W) (APPEARANCE_DULL_GLASS==A \ - ? (WIDGET_DEF_BUTTON==W ? 0.99 : 0.98) \ - : (WIDGET_DEF_BUTTON==W ? 1.08 : 1.55)) - #define SHADE_GLASS_TOP_B(A, W) (APPEARANCE_DULL_GLASS==A \ - ? (WIDGET_DEF_BUTTON==W ? 0.94 : 0.92) \ - : 0.92) - #define SHADE_GLASS_BOT_A(A) (APPEARANCE_DULL_GLASS==A ? 1.02 : 0.99) - #define SHADE_GLASS_BOT_B(A) (APPEARANCE_DULL_GLASS==A ? 1.10 : 1.16) - -#elif QTC_GLASS_SHADING==1 - - #define SHADE_GLASS_TOP_A(A, W) (APPEARANCE_DULL_GLASS==A \ - ? (WIDGET_DEF_BUTTON==W ? 1.0 : 1.0) \ - : (WIDGET_DEF_BUTTON==W ? 1.08 : 1.7)) - #define SHADE_GLASS_TOP_B(A, W) (APPEARANCE_DULL_GLASS==A ? 0.96 : 0.96) - #define SHADE_GLASS_BOT_A(A) 0.99 - #define SHADE_GLASS_BOT_B(A) (APPEARANCE_DULL_GLASS==A ? 1.08 : 1.16) - -#else +#define INVERT_SHADE(A) (1.0+(1.0-(A))) - #define SHADE_GLASS_TOP_A(A, W) (APPEARANCE_DULL_GLASS==A \ - ? (WIDGET_DEF_BUTTON==W ? 1.05 : 1.05) \ - : (WIDGET_DEF_BUTTON==W ? 1.08 : 1.7)) - #define SHADE_GLASS_TOP_B(A, W) 0.96 - #define SHADE_GLASS_BOT_A(A) 0.99 - #define SHADE_GLASS_BOT_B(A) (APPEARANCE_DULL_GLASS==A ? 1.08 : 1.16) +#define ROUNDED (ROUND_NONE!=opts.round) -#endif +#define TOOLBAR_SEP_GAP (opts.fadeLines ? 5 : 6) +#define FADE_SIZE 0.4 +#define ETCHED_DARK 0.95 -#define IS_GLASS(A) (APPEARANCE_DULL_GLASS==A || APPEARANCE_SHINY_GLASS==A) -#define IS_FLAT(A) (APPEARANCE_FLAT==A || APPEARANCE_RAISED==A) -#define SHADE_SELECTION_TOP 1.15 -#define SHADE_SELECTION_BOT 0.9 +#define IS_GLASS(A) (APPEARANCE_DULL_GLASS==(A) || APPEARANCE_SHINY_GLASS==(A)) +#define IS_CUSTOM(A) ((A)>=APPEARANCE_CUSTOM1 && (A)<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD)) +#define IS_FLAT(A) (APPEARANCE_FLAT==(A) || APPEARANCE_RAISED==(A) || APPEARANCE_FADE==(A)) +#define IS_FLAT_BGND(A) (APPEARANCE_FLAT==(A) || APPEARANCE_RAISED==(A)) #ifdef __cplusplus #define MENUBAR_DARK_LIMIT 160 @@ -240,71 +239,338 @@ typedef GdkColor color; #define TOO_DARK(A) ((A).redborder) && WIDGET_MENU_ITEM!=(WIDGET) && !IS_TROUGH(WIDGET) && \ + (WIDGET_DEF_BUTTON!=(WIDGET) || IND_COLORED!=opts.defBtnIndicator)) + +#define DRAW_3D_FULL_BORDER(SUNKEN, APP) \ + (!(SUNKEN) && GB_3D_FULL==getGradient((APP), &opts)->border) + +#define DRAW_3D_BORDER(SUNKEN, APP) \ + (!(SUNKEN) && GB_3D==getGradient((APP), &opts)->border) + +#define DRAW_SHINE(SUNKEN, APP) \ + (!(SUNKEN) && GB_SHINE==getGradient((APP), &opts)->border) + +#define LIGHT_BORDER(APP) (APPEARANCE_DULL_GLASS==(APP) ? 1 : 0) #define PROGRESS_ANIMATION 100 -#define MIN_SLIDER_SIZE(A) (LINE_DOTS==A ? 24 : 20) - -#define QTC_NORM_TAB_APP (APPEARANCE_BEVELLED==opts.tabAppearance || APPEARANCE_SPLIT_GRADIENT==opts.appearance \ - ? APPEARANCE_GRADIENT : opts.tabAppearance) -#define QTC_SEL_TAB_APP (APPEARANCE_INVERTED==opts.tabAppearance ? APPEARANCE_FLAT : (QTC_NORM_TAB_APP)) -#define QTC_SLIDER_MO_SHADE (SHADE_SELECTED==opts.shadeSliders ? 1 : (SHADE_BLEND_SELECTED==opts.shadeSliders ? 0 : ORIGINAL_SHADE)) -#define QTC_SLIDER_MO_BORDER (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 2 : 1) -#define QTC_SLIDER_MO_LEN (SLIDER_TRIANGULAR==opts.sliderStyle ? 2 : (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 4 : 3)) -#define QTC_SB_SLIDER_MO_LEN(A) ((A)<22 && ROUND_FULL!=opts.round \ +#define MIN_SLIDER_SIZE(A) (LINE_DOTS==(A) ? 24 : 20) + +#define CR_SMALL_SIZE 13 +#define CR_LARGE_SIZE 15 + +#define TAB_APP(A) (APPEARANCE_BEVELLED==(A) || APPEARANCE_SPLIT_GRADIENT==(A) ? APPEARANCE_GRADIENT : (A)) +#define NORM_TAB_APP TAB_APP(opts.tabAppearance) +#define SEL_TAB_APP TAB_APP(opts.activeTabAppearance) + +#define SLIDER_MO_SHADE (SHADE_SELECTED==opts.shadeSliders ? 1 : (SHADE_BLEND_SELECTED==opts.shadeSliders ? 0 : ORIGINAL_SHADE)) +#define SLIDER_MO_PLASTIK_BORDER (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 2 : 1) +#define SLIDER_MO_LEN (SLIDER_TRIANGULAR==opts.sliderStyle ? 2 : (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 4 : 3)) +#define SB_SLIDER_MO_LEN(A) ((A)<22 && !FULLLY_ROUNDED \ ? 2 \ : ((A)<32 || (SHADE_SELECTED!=opts.shadeSliders && SHADE_BLEND_SELECTED!=opts.shadeSliders) \ ? 4 \ : 6)) -#define QTC_CR_MO_FILL (SHADE_BLEND_SELECTED==opts.shadeCheckRadio || SHADE_SELECTED==opts.shadeCheckRadio ? 1 : 2) -#define QTC_MO_DEF_BTN 2 -#define QTC_MO_PLASTIK_DARK(W) (WIDGET_DEF_BUTTON==W && IND_COLORED==opts.defBtnIndicator ? 3 : 2) /*? 2 : 1) */ -#define QTC_MO_PLASTIK_LIGHT(W) (WIDGET_DEF_BUTTON==W && IND_COLORED==opts.defBtnIndicator ? 4 : 1) /*? 2 : 0) */ +#define CR_MO_FILL 1 +#define MO_DEF_BTN 2 +#define MO_PLASTIK_DARK(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 3 : 2) /*? 2 : 1) */ +#define MO_PLASTIK_LIGHT(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 4 : 1) /*? 2 : 0) */ + +#define MO_STD_DARK(W) (MO_GLOW==opts.coloredMouseOver \ + ? 1 \ + : MO_PLASTIK_DARK(W)) +#define MO_STD_LIGHT(W, S) (MO_GLOW==opts.coloredMouseOver \ + ? 1 \ + : MO_PLASTIK_LIGHT(W)) + +#define FULLLY_ROUNDED (opts.round>=ROUND_FULL) +#define DO_EFFECT (EFFECT_NONE!=opts.buttonEffect) +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) +#define SLIDER_GLOW (DO_EFFECT && MO_GLOW==opts.coloredMouseOver /*&& SLIDER_TRIANGULAR!=opts.sliderStyle*/ ? 2 : 0) +#endif -#define QTC_MO_STD_DARK(W) QTC_MO_PLASTIK_DARK(W) /*(WIDGET_DEF_BUTTON==W && IND_COLORED==opts.defBtnIndicator ? 4 : 1) */ -#define QTC_MO_STD_LIGHT(W, S) QTC_MO_PLASTIK_LIGHT(W) /*(WIDGET_DEF_BUTTON==W && IND_COLORED==opts.defBtnIndicator ? 2 : (S ? 1 : 0))*/ +#define ENTRY_MO (opts.unifyCombo && opts.unifySpin) + +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) +#define FOCUS_ALPHA 0.08 +#define FOCUS_GLOW_LINE_ALPHA 0.5 +#define BORDER_BLEND_ALPHA 0.7 +#define ETCH_TOP_ALPHA 0.055 +#define ETCH_BOTTOM_ALPHA 0.1 +// #if defined QT_VERSION && (QT_VERSION >= 0x040000) +// #define ETCH_RADIO_TOP_ALPHA 0.055 +// #define ETCH_RADIO_BOTTOM_ALPHA 0.80 +// #else +#define ETCH_RADIO_TOP_ALPHA 0.09 +#define ETCH_RADIO_BOTTOM_ALPHA 1.0 +// #endif + +#define RINGS_INNER_ALPHA(T) qtcRingAlpha[IMG_PLAIN_RINGS==(T) ? 1 : 0] //(IMG_PLAIN_RINGS==opts.bgndImage.type ? 0.25 : 0.125) +#define RINGS_OUTER_ALPHA qtcRingAlpha[2] //0.5 +#define RINGS_WIDTH(T) (IMG_SQUARE_RINGS==T ? 260 : 450) +#define RINGS_HEIGHT(T) (IMG_SQUARE_RINGS==T ? 220 : 360) + +#define RINGS_SQUARE_LARGE_ALPHA (RINGS_OUTER_ALPHA*0.675) +#define RINGS_SQUARE_SMALL_ALPHA (RINGS_OUTER_ALPHA*0.50) +#define RINGS_SQUARE_LINE_WIDTH 20.0 +#define RINGS_SQUARE_RADIUS 18.0 +#define RINGS_SQUARE_LARGE_SIZE 120.0 +#define RINGS_SQUARE_SMALL_SIZE 100.0 + +#if !defined __cplusplus +#define MENU_AND_TOOLTIP_RADIUS (opts.round>=ROUND_FULL ? 5.0 : 3.5) +#else +#define MENU_AND_TOOLTIP_RADIUS (opts.round>=ROUND_FULL ? 5.0 : 2.5) +#endif -#define QTC_DO_EFFECT (ROUND_FULL==opts.round && EFFECT_NONE!=opts.buttonEffect) +#define CUSTOM_BGND (!(IS_FLAT_BGND(opts.bgndAppearance)) || IMG_NONE!=opts.bgndImage.type || 100!=opts.bgndOpacity || 100!=opts.dlgOpacity) + +#define GLOW_PROG_ALPHA 0.55 + +#endif + +#if defined __cplusplus && defined QT_VERSION && (QT_VERSION >= 0x040000) -#ifdef __cplusplus #include typedef enum { - QtC_Round = QStyle::PM_CustomBase + QtC_Round = QStyle::PM_CustomBase, + QtC_TitleBarButtonAppearance, + QtC_TitleAlignment, + QtC_TitleBarButtons, + QtC_TitleBarIcon, + QtC_TitleBarIconColor, + QtC_TitleBarEffect, + QtC_BlendMenuAndTitleBar, + QtC_ShadeMenubarOnlyWhenActive, + QtC_ToggleButtons, + QtC_MenubarColor, + QtC_WindowBorder, + QtC_CustomBgnd, + QtC_TitleBarApp } QtCMetrics; + +#define QtC_StateKWin ((QStyle::StateFlag)0x10000000) +// PE_FrameWindow +#define QtC_StateKWinNotFull ((QStyle::StateFlag)0x20000000) +// CC_TitleBar +#define QtC_StateKWinFillBgnd ((QStyle::StateFlag)0x20000000) +#define QtC_StateKWinNoBorder ((QStyle::StateFlag)0x40000000) +#define QtC_StateKWinCompositing ((QStyle::StateFlag)0x80000000) +#define QtC_StateKWinTabDrag ((QStyle::StateFlag)0x00000001) + +#define QtC_PE_DrawBackground ((QStyle::PrimitiveElement)(QStyle::PE_CustomBase+10000)) + +#define CLOSE_COLOR QColor(191, 82, 82) +#define DARK_WINDOW_TEXT(A) ((A).red()<230 || (A).green()<230 || (A).blue()<230) +#define HOVER_BUTTON_ALPHA(A) (DARK_WINDOW_TEXT(A) ? 0.25 : 0.65) +#define WINDOW_TEXT_SHADOW_ALPHA(A) (EFFECT_SHADOW==(A) ? 0.10 : 0.60) +#define WINDOW_SHADOW_COLOR(A) (EFFECT_SHADOW==(A) ? Qt::black : Qt::white) +#endif + +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) +#define QTCURVE_PREVIEW_CONFIG "QTCURVE_PREVIEW_CONFIG" +#define QTCURVE_PREVIEW_CONFIG_FULL "QTCURVE_PREVIEW_CONFIG_FULL" + +typedef enum +{ + DWT_BUTTONS_AS_PER_TITLEBAR = 0x0001, + DWT_COLOR_AS_PER_TITLEBAR = 0x0002, + DWT_FONT_AS_PER_TITLEBAR = 0x0004, + DWT_TEXT_ALIGN_AS_PER_TITLEBAR = 0x0008, + DWT_EFFECT_AS_PER_TITLEBAR = 0x0010, + DWT_ROUND_TOP_ONLY = 0x0020, + DWT_ICON_COLOR_AS_PER_TITLEBAR = 0x0040 +} EDwtSettingsFlags; + +typedef enum +{ + TITLEBAR_BUTTON_ROUND = 0x0001, + TITLEBAR_BUTTON_HOVER_FRAME = 0x0002, + TITLEBAR_BUTTON_HOVER_SYMBOL = 0x0004, + TITLEBAR_BUTTON_NO_FRAME = 0x0008, + TITLEBAR_BUTTON_COLOR = 0x0010, + TITLEBAR_BUTTON_COLOR_INACTIVE = 0x0020, + TITLEBAR_BUTTON_COLOR_MOUSE_OVER = 0x0040, + TITLEBAR_BUTTON_STD_COLOR = 0x0080, + TITLEBAR_BUTTON_COLOR_SYMBOL = 0x0100, + TITLEBAR_BUTTON_HOVER_SYMBOL_FULL = 0x0200, + TITLEBAR_BUTTON_SUNKEN_BACKGROUND = 0x0400, + TITLEBAR_BUTTOM_ARROW_MIN_MAX = 0x0800, + TITLEBAR_BUTTOM_HIDE_ON_INACTIVE_WINDOW = 0x1000, + TITLEBAR_BUTTON_ICON_COLOR = 0x2000 +} ETitleBarButtonFlags; + +typedef enum +{ + TITLEBAR_ICON_NONE, + TITLEBAR_ICON_MENU_BUTTON, + TITLEBAR_ICON_NEXT_TO_TITLE +} ETitleBarIcon; + +typedef enum +{ + TITLEBAR_CLOSE, + TITLEBAR_MIN, + TITLEBAR_MAX, + TITLEBAR_HELP, + TITLEBAR_MENU, + TITLEBAR_SHADE, + TITLEBAR_ALL_DESKTOPS, + TITLEBAR_KEEP_ABOVE, + TITLEBAR_KEEP_BELOW, + NUM_TITLEBAR_BUTTONS +} ETitleBarButtons; + +#define TBAR_VERSION_HACK 65535 +#define TBAR_BORDER_VERSION_HACK (TBAR_VERSION_HACK+1000) + +typedef std::map TBCols; #endif +typedef enum +{ + WINDOW_BORDER_COLOR_TITLEBAR_ONLY = 0x01, // colorTitlebarOnly + WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR = 0x02, // titlebarMenuColor + WINDOW_BORDER_ADD_LIGHT_BORDER = 0x04, // titlebarBorder + WINDOW_BORDER_BLEND_TITLEBAR = 0x08, // titlebarBlend + WINDOW_BORDER_SEPARATOR = 0x10 +} EWindowBorder; + +typedef enum +{ + IMG_NONE, + IMG_BORDERED_RINGS, + IMG_PLAIN_RINGS, + IMG_SQUARE_RINGS, + IMG_FILE +} EImageType; + +typedef struct +{ + EImageType type; + bool loaded; +#if defined __cplusplus + QString file; + QPixmap pix; +#else // __cplusplus + const char *file; + GdkPixbuf *pix; +#endif // __cplusplus + int width, height; +} QtCImage; + +typedef enum +{ + SQUARE_NONE = 0x0000, + SQUARE_ENTRY = 0x0001, + SQUARE_PROGRESS = 0x0002, + SQUARE_SCROLLVIEW = 0x0004, + SQUARE_LISTVIEW_SELECTION = 0x0008, + SQUARE_FRAME = 0x0010, + SQUARE_TAB_FRAME = 0x0020, + SQUARE_SLIDER = 0x0040, + SQUARE_SB_SLIDER = 0x0080, + SQUARE_WINDOWS = 0x0100, + SQUARE_TOOLTIPS = 0x0200, + SQUARE_POPUP_MENUS = 0x0400 +} ESquare; + +typedef enum +{ + WM_DRAG_NONE = 0, + WM_DRAG_MENUBAR = 1, + WM_DRAG_MENU_AND_TOOLBAR = 2, + WM_DRAG_ALL = 3 +} EWmDrag; + typedef enum { EFFECT_NONE, @@ -314,14 +580,22 @@ typedef enum typedef enum { + PIX_CHECK, +#ifdef __cplusplus +#if defined QT_VERSION && (QT_VERSION < 0x040000) + PIX_RADIO_ON, PIX_RADIO_BORDER, + PIX_RADIO_INNER, PIX_RADIO_LIGHT, - PIX_RADIO_ON, - PIX_CHECK, PIX_SLIDER, PIX_SLIDER_LIGHT, PIX_SLIDER_V, - PIX_SLIDER_LIGHT_V + PIX_SLIDER_LIGHT_V, +#endif + PIX_DOT +#else + PIX_BLANK +#endif } EPixmap; typedef enum @@ -330,46 +604,109 @@ typedef enum WIDGET_TAB_BOT, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, + WIDGET_TOOLBAR_BUTTON, WIDGET_LISTVIEW_HEADER, WIDGET_SLIDER, WIDGET_SLIDER_TROUGH, + WIDGET_FILLED_SLIDER_TROUGH, WIDGET_SB_SLIDER, WIDGET_SB_BUTTON, + WIDGET_SB_BGND, WIDGET_TROUGH, WIDGET_CHECKBOX, - WIDGET_TOGGLE_BUTTON, + WIDGET_RADIO_BUTTON, + WIDGET_COMBO, + WIDGET_COMBO_BUTTON, WIDGET_MENU_ITEM, WIDGET_PROGRESSBAR, + WIDGET_PBAR_TROUGH, #ifndef __cplusplus + WIDGET_ENTRY_PROGRESSBAR, + WIDGET_TOGGLE_BUTTON, WIDGET_SPIN_UP, WIDGET_SPIN_DOWN, + WIDGET_UNCOLOURED_MO_BUTTON, +#else + WIDGET_CHECKBUTTON, // Qt4 only + WIDGET_MDI_WINDOW, // Qt4 only + WIDGET_MDI_WINDOW_TITLE, // Qt4 only + WIDGET_MDI_WINDOW_BUTTON, // Qt4 only + WIDGET_DOCK_WIDGET_TITLE, + WIDGET_DIAL, #endif WIDGET_SPIN, -#ifdef __cplusplus - WIDGET_CHECKBUTTON, // Qt4 only - WIDGET_MDI_WINDOW, // Qt4 only - WIDGET_MDI_WINDOW_TITLE, // Qt4 only WIDGET_ENTRY, + WIDGET_SCROLLVIEW, + WIDGET_SELECTION, WIDGET_FRAME, WIDGET_NO_ETCH_BTN, -#endif + WIDGET_MENU_BUTTON, // Qt4 only + WIDGET_FOCUS, + WIDGET_TAB_FRAME, WIDGET_OTHER } EWidget; typedef enum { - APPEARANCE_FLAT, + APP_ALLOW_BASIC, + APP_ALLOW_FADE, + APP_ALLOW_STRIPED, + APP_ALLOW_NONE +} EAppAllow; + +typedef enum +{ + APPEARANCE_CUSTOM1, + APPEARANCE_CUSTOM2, + APPEARANCE_CUSTOM3, + APPEARANCE_CUSTOM4, + APPEARANCE_CUSTOM5, + APPEARANCE_CUSTOM6, + APPEARANCE_CUSTOM7, + APPEARANCE_CUSTOM8, + APPEARANCE_CUSTOM9, + APPEARANCE_CUSTOM10, + APPEARANCE_CUSTOM11, + APPEARANCE_CUSTOM12, + APPEARANCE_CUSTOM13, + APPEARANCE_CUSTOM14, + APPEARANCE_CUSTOM15, + APPEARANCE_CUSTOM16, + APPEARANCE_CUSTOM17, + APPEARANCE_CUSTOM18, + APPEARANCE_CUSTOM19, + APPEARANCE_CUSTOM20, + APPEARANCE_CUSTOM21, + APPEARANCE_CUSTOM22, + + NUM_CUSTOM_GRAD, + + APPEARANCE_FLAT = NUM_CUSTOM_GRAD, APPEARANCE_RAISED, APPEARANCE_DULL_GLASS, APPEARANCE_SHINY_GLASS, + APPEARANCE_AGUA, + APPEARANCE_SOFT_GRADIENT, APPEARANCE_GRADIENT, + APPEARANCE_HARSH_GRADIENT, APPEARANCE_INVERTED, + APPEARANCE_DARK_INVERTED, APPEARANCE_SPLIT_GRADIENT, - APPEARANCE_BEVELLED + APPEARANCE_BEVELLED, + APPEARANCE_FADE, /* Only for poupmenu items! */ + APPEARANCE_STRIPED = APPEARANCE_FADE, /* Only for windows and menus */ + APPEARANCE_NONE = APPEARANCE_FADE, /* Only for titlebars */ + APPEARANCE_LV_BEVELLED, /* To be used only with getGradient */ + APPEARANCE_AGUA_MOD, + APPEARANCE_LV_AGUA, + NUM_STD_APP = (APPEARANCE_LV_AGUA-NUM_CUSTOM_GRAD)+1 } EAppearance; -#define IS_SLIDER(W) (WIDGET_SLIDER==W || WIDGET_SB_SLIDER==W) -#define IS_TOGGLE_BUTTON(W) (WIDGET_TOGGLE_BUTTON==W || WIDGET_CHECKBOX==W) +#define IS_SLIDER(W) (WIDGET_SLIDER==(W) || WIDGET_SB_SLIDER==(W)) +#define IS_TROUGH(W) (WIDGET_SLIDER_TROUGH==(W) || WIDGET_PBAR_TROUGH==(W) || WIDGET_TROUGH==(W) || WIDGET_FILLED_SLIDER_TROUGH==(W)) +#ifndef __cplusplus +#define IS_TOGGLE_BUTTON(W) (WIDGET_TOGGLE_BUTTON==(W) || WIDGET_CHECKBOX==(W)) +#endif typedef enum { @@ -379,49 +716,54 @@ typedef enum CORNER_BL = 0x8 } ECornerBits; -#define ROUNDED_NONE 0x0 -#define ROUNDED_TOP (CORNER_TL|CORNER_TR) -#define ROUNDED_BOTTOM (CORNER_BL|CORNER_BR) -#define ROUNDED_LEFT (CORNER_TL|CORNER_BL) -#define ROUNDED_RIGHT (CORNER_TR|CORNER_BR) -#define ROUNDED_TOPRIGHT CORNER_TR -#define ROUNDED_BOTTOMRIGHT CORNER_BR -#define ROUNDED_TOPLEFT CORNER_TL -#define ROUNDED_BOTTOMLEFT CORNER_BL -#define ROUNDED_ALL (CORNER_TL|CORNER_TR|CORNER_BR|CORNER_BL) +#define ROUNDED_NONE 0x0 +#define ROUNDED_TOP (CORNER_TL|CORNER_TR) +#define ROUNDED_BOTTOM (CORNER_BL|CORNER_BR) +#define ROUNDED_LEFT (CORNER_TL|CORNER_BL) +#define ROUNDED_RIGHT (CORNER_TR|CORNER_BR) +#define ROUNDED_TOPRIGHT CORNER_TR +#define ROUNDED_BOTTOMRIGHT CORNER_BR +#define ROUNDED_TOPLEFT CORNER_TL +#define ROUNDED_BOTTOMLEFT CORNER_BL +#define ROUNDED_ALL (CORNER_TL|CORNER_TR|CORNER_BR|CORNER_BL) typedef enum { IND_CORNER, IND_FONT_COLOR, IND_COLORED, + IND_TINT, + IND_GLOW, + IND_DARKEN, + IND_SELECTED, IND_NONE } EDefBtnIndicator; typedef enum { + LINE_NONE, LINE_SUNKEN, LINE_FLAT, LINE_DOTS, - LINE_DASHES + LINE_1DOT, + LINE_DASHES, } ELine; -#define LINE_NONE LINE_DASHES - typedef enum { TB_NONE, TB_LIGHT, TB_DARK, TB_LIGHT_ALL, - TB_DARK_ALL, + TB_DARK_ALL } ETBarBorder; typedef enum { BORDER_FLAT, BORDER_RAISED, - BORDER_SUNKEN + BORDER_SUNKEN, + BORDER_LIGHT } EBorder; /* @@ -433,16 +775,26 @@ typedef enum { SHADE_NONE, SHADE_CUSTOM, - SHADE_BLEND_SELECTED, /* In the case of check/radios this is SHADE_SELECTED */ - SHADE_SELECTED, - SHADE_DARKEN = SHADE_SELECTED , /* For menubar only! */ + SHADE_SELECTED, + SHADE_BLEND_SELECTED, + SHADE_DARKEN, + SHADE_WINDOW_BORDER } EShade; +typedef enum +{ + ECOLOR_BASE, + ECOLOR_BACKGROUND, + ECOLOR_DARK, +} EColor; + typedef enum { ROUND_NONE, ROUND_SLIGHT, - ROUND_FULL + ROUND_FULL, + ROUND_EXTRA, + ROUND_MAX } ERound; typedef enum @@ -454,68 +806,439 @@ typedef enum SCROLLBAR_NONE } EScrollbar; +typedef enum +{ + FRAME_NONE, + FRAME_PLAIN, + FRAME_LINE, + FRAME_SHADED, + FRAME_FADED +} EFrame; + +typedef enum +{ + GB_LBL_BOLD = 0x01, + GB_LBL_CENTRED = 0x02, + GB_LBL_INSIDE = 0x04, + GB_LBL_OUTSIDE = 0x08 +} EGBLabel; + +#define NO_FRAME(A) (FRAME_NONE==(A) || FRAME_LINE==(A)) + typedef enum { MO_NONE, MO_COLORED, - MO_PLASTIK + MO_COLORED_THICK, + MO_PLASTIK, + MO_GLOW } EMouseOver; typedef enum { STRIPE_NONE, STRIPE_PLAIN, - STRIPE_DIAGONAL + STRIPE_DIAGONAL, + STRIPE_FADE } EStripe; typedef enum { SLIDER_PLAIN, SLIDER_ROUND, + SLIDER_PLAIN_ROTATED, + SLIDER_ROUND_ROTATED, SLIDER_TRIANGULAR, + SLIDER_CIRCULAR } ESliderStyle; -#define DEF_IND_STR "fontcolor" -#define DEF_LINE_STR "dots" -#define DEF_TB_BORDER "none" -#define DEF_APPEARANCE_STR "bevelled" -#define DEF_MENU_APPEARANCE_STR "gradient" -#define DEF_TOOLBAR_APPEARANCE_STR "gradient" -#define DEF_SLIDER_SHADE_STR "selected" -#define DEF_TBS_STR "dots" -#define DEF_COLOR_STR "background" -#define DEF_TOOLBAR_SHADE_STR "none" +#define ROTATED_SLIDER (SLIDER_PLAIN_ROTATED==opts.sliderStyle || SLIDER_ROUND_ROTATED==opts.sliderStyle) -#ifdef QTC_COMMON_FUNCTIONS -static double getWidgetShade(EWidget w, bool light, bool sunken, EAppearance app) +typedef enum { - switch(w) + FOCUS_STANDARD, + FOCUS_RECTANGLE, + FOCUS_FULL, + FOCUS_FILLED, + FOCUS_LINE, + FOCUS_GLOW +} EFocus; + +typedef enum +{ + TAB_MO_TOP, + TAB_MO_BOTTOM, + TAB_MO_GLOW +} ETabMo; + +typedef enum +{ + GT_HORIZ, + GT_VERT +} EGradType; + +typedef enum +{ + GLOW_NONE, + GLOW_START, + GLOW_MIDDLE, + GLOW_END +} EGlow; + +#define FULL_FOCUS (FOCUS_FULL==opts.focus || FOCUS_FILLED==opts.focus) + +enum +{ + HIDE_NONE = 0x00, + HIDE_KEYBOARD = 0x01, + HIDE_KWIN = 0x02 +}; + +#if defined __cplusplus +typedef enum +{ + ALIGN_LEFT, + ALIGN_CENTER, + ALIGN_FULL_CENTER, + ALIGN_RIGHT +} EAlign; +#endif + +#ifdef __cplusplus +inline +#else +static +#endif +bool equal(double d1, double d2) +{ + return (fabs(d1 - d2) < 0.0001); +} + +#ifdef __cplusplus +struct GradientStop +#else +typedef struct +#endif +{ +#ifdef __cplusplus + GradientStop(double p=0.0, double v=0.0, double a=1.0) : pos(p), val(v), alpha(a) { } + + bool operator==(const GradientStop &o) const { - case WIDGET_TROUGH: - return light ? SHADE_SBAR_LIGHT : SHADE_SBAR_DARK; - case WIDGET_SLIDER_TROUGH: - return light ? SHADE_SLIDER_LIGHT : SHADE_SLIDER_DARK; - case WIDGET_MENU_ITEM: - if(APPEARANCE_DULL_GLASS!=app && APPEARANCE_SHINY_GLASS!=app) - return light ? SHADE_BEVEL_MENU_ITEM_LIGHT : SHADE_BEVEL_MENU_ITEM_DARK; - default: - return light - ? sunken - ? SHADE_BEVEL_GRAD_SEL_LIGHT - : SHADE_BEVEL_GRAD_LIGHT - : sunken - ? SHADE_BEVEL_GRAD_SEL_DARK - : SHADE_BEVEL_GRAD_DARK; + return equal(pos, o.pos) && equal(val, o.val) && equal(alpha, o.alpha); + } + + bool operator<(const GradientStop &o) const + { + return pos +{ + GradientStopCont fix() const + { + GradientStopCont c(*this); + if(size()) + { + GradientStopCont::const_iterator first(c.begin()); + GradientStopCont::reverse_iterator last(c.rbegin()); + + if((*first).pos>0.001) + c.insert(GradientStop(0.0, 1.0)); + if((*last).pos<0.999) + c.insert(GradientStop(1.0, 1.0)); + } + return c; + } +}; +struct Gradient +#else +typedef struct +#endif +{ +#ifdef __cplusplus + Gradient() : border(GB_3D) { } + +#ifdef CONFIG_DIALOG + bool operator==(const Gradient &o) const + { + return border==o.border && stops==o.stops; + } +#endif +#endif + EGradientBorder border; +#ifdef __cplusplus + GradientStopCont stops; +#else + int numStops; + GradientStop *stops; +#endif } +#ifndef __cplusplus +Gradient +#endif +; + +#define USE_CUSTOM_SHADES(A) ((A).customShades[0]>0.00001) +#define USE_CUSTOM_ALPHAS(A) ((A).customAlphas[0]>0.00001) + +#ifdef __cplusplus +typedef std::map GradientCont; +struct Options +#else +typedef struct +#endif +{ + + int version, + contrast, + passwordChar, + highlightFactor, + lighterPopupMenuBgnd, + menuDelay, + sliderWidth, + tabBgnd, + colorSelTab, + expanderHighlight, + crHighlight, + splitterHighlight, + crSize, + gbFactor, + gbLabel; + ERound round; + bool embolden, + highlightTab, + roundAllTabs, + animatedProgress, +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + fixParentlessDialogs, +#endif + customMenuTextColor, + menubarMouseOver, + useHighlightForMenu, + shadeMenubarOnlyWhenActive, + thinnerMenuItems, + thinnerBtns, + lvButton, + drawStatusBarFrames, + fillSlider, + roundMbTopOnly, + gtkScrollViews, + stdSidebarButtons, + toolbarTabs, +#ifdef __cplusplus + gtkComboMenus, +/* +#else + setDialogButtonOrder, +*/ +#endif + mapKdeIcons, +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + gtkButtonOrder, + fadeLines, +#endif + reorderGtkButtons, + borderMenuitems, + colorMenubarMouseOver, + darkerBorders, + vArrows, + xCheck, + crButton, + smallRadio, + fillProgress, + comboSplitter, + highlightScrollViews, + sunkenScrollViews, + etchEntry, + colorSliderMouseOver, + thinSbarGroove, + flatSbarButtons, + borderSbarGroove, + borderProgress, + popupBorder, + unifySpinBtns, + unifyCombo, + unifySpin, + borderTab, + borderInactiveTab, + doubleGtkComboArrow, + menuIcons, +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + stdBtnSizes, +#endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + xbar, +#endif + forceAlternateLvCols, + invertBotTab, + boldProgress, + coloredTbarMo, + borderSelection, + stripedSbar, + shadePopupMenu; + EFrame groupBox; + EGlow glowProgress; + ELvLines lvLines; + EGradType bgndGrad, + menuBgndGrad; + int menubarHiding, + statusbarHiding, + square, + windowDrag, + windowBorder, + bgndOpacity, + menuBgndOpacity, + dlgOpacity; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + int dwtSettings; +#endif +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + int titlebarButtons; + TBCols titlebarButtonColors; + ETitleBarIcon titlebarIcon; +#endif + EStripe stripedProgress; + ESliderStyle sliderStyle; + EMouseOver coloredMouseOver; + ETBarBorder toolbarBorders; + EDefBtnIndicator defBtnIndicator; + ELine sliderThumbs, + handles, + toolbarSeparators, + splitters; + ETabMo tabMouseOver; +/* NOTE: If add an appearance setting, increase the number of custmo gradients to match! */ + EAppearance appearance, + bgndAppearance, + menuBgndAppearance, + menubarAppearance, + menuitemAppearance, + toolbarAppearance, + lvAppearance, + tabAppearance, + activeTabAppearance, + sliderAppearance, + titlebarAppearance, + inactiveTitlebarAppearance, +#ifdef __cplusplus + titlebarButtonAppearance, + dwtAppearance, +#endif + selectionAppearance, + menuStripeAppearance, + progressAppearance, + progressGrooveAppearance, + grooveAppearance, + sunkenAppearance, + sbarBgndAppearance, + sliderFill, + tooltipAppearance; + EShade shadeSliders, + shadeMenubars, + menuStripe, + shadeCheckRadio, + comboBtn, + sortedLv, + crColor, + progressColor; + EColor progressGrooveColor; + EEffect buttonEffect; + EScrollbar scrollbarType; + EFocus focus; + color customMenubarsColor, + customSlidersColor, + customMenuNormTextColor, + customMenuSelTextColor, + customMenuStripeColor, + customCheckRadioColor, + customComboBtnColor, + customSortedLvColor, + customCrBgndColor, + customProgressColor; + EShading shading; +#if defined __cplusplus + EAlign titlebarAlignment; + EEffect titlebarEffect; + bool centerTabText; +#endif + double customShades[NUM_STD_SHADES], + customAlphas[NUM_STD_ALPHAS]; +#ifdef __cplusplus + GradientCont customGradient; +#else + Gradient *customGradient[NUM_CUSTOM_GRAD]; +#endif + QtCImage bgndImage, + menuBgndImage; +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + /* NOTE: If add any more settings here, need to alter copyOpts/freeOpts/defaultSettings in config_file.c */ + Strings noBgndGradientApps, + noBgndOpacityApps, + noMenuBgndOpacityApps, + noBgndImageApps; +#endif +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + Strings noDlgFixApps; +#endif + Strings noMenuStripeApps; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + Strings menubarApps, + statusbarApps, + useQtFileDialogApps, + windowDragWhiteList, + windowDragBlackList; +#endif + +#ifndef __cplusplus +} Options; +#else +}; +#endif + +#ifdef COMMON_FUNCTIONS + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((b) < (a) ? (a) : (b)) +#endif /* Taken from rgb->hsl routines taken from KColor Copyright 2007 Matthew Woehlke @@ -551,8 +1274,8 @@ static inline double h2c(double h, double m1, double m2) static inline void rgbToHsl(double r, double g, double b, double *h, double *s, double *l) { - double min=QTC_MIN(QTC_MIN(r, g), b), - max=QTC_MAX(QTC_MAX(r, g), b); + double min=MIN(MIN(r, g), b), + max=MAX(MAX(r, g), b); *l = 0.5 * (max + min); *s = 0.0; @@ -600,29 +1323,30 @@ static inline void hslToRgb(double h, double s, double l, double *r, double *g, static void rgbToHsv(double r, double g, double b, double *h, double *s, double *v) { - double min=QTC_MIN(QTC_MIN(r, g), b), - max=QTC_MAX(QTC_MAX(r, g), b), + double min=MIN(MIN(r, g), b), + max=MAX(MAX(r, g), b), delta=max - min; *v=max; if(max != 0) *s=delta / max; else - { - /* r=g=b=0 s=0, v is undefined */ *s=0; - *h=-1; - return; - } - if(r == max) - *h=(g - b) / delta; /* between yellow & magenta */ - else if(g == max) - *h=2 + (b - r) / delta; /* between cyan & yellow */ + + if (*s==0.0) + *h = 0.0; else - *h=4 + (r - g) / delta; /* between magenta & cyan */ - *h *= 60; /* degrees */ - if(*h < 0) - *h += 360; + { + if(r == max) + *h=(g - b) / delta; /* between yellow & magenta */ + else if(g == max) + *h=2 + (b - r) / delta; /* between cyan & yellow */ + else if(b == max) + *h=4 + (r - g) / delta; /* between magenta & cyan */ + *h *= 60; /* degrees */ + if(*h < 0) + *h += 360; + } } static void hsvToRgb(double *r, double *g, double *b, double h, double s, double v) @@ -692,10 +1416,26 @@ inline int limit(double c) } #endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) && !defined QTC_QT_ONLY +#include +#define tint(COLA, COLB, FACTOR) KColorUtils::tint((COLA), (COLB), (FACTOR)) +#define midColor(COLA, COLB) KColorUtils::mix((COLA), (COLB), 0.5) +#else +#include "colorutils.c" +#ifdef __cplusplus +#define tint(COLA, COLB, FACTOR) ColorUtils_tint(&(COLA), &(COLB), (FACTOR)) +#define midColor(COLA, COLB) ColorUtils_mix(&(COLA), &(COLB), 0.5) +#define midColorF(COLA, COLB, FACTOR) ColorUtils_mix(&(COLA), &(COLB), FACTOR-0.5) +#else +#define tint(COLA, COLB, FACTOR) ColorUtils_tint((COLA), (COLB), (FACTOR)) +#define midColor(COLA, COLB) ColorUtils_mix((COLA), (COLB), 0.5) +#endif +#endif + #ifdef __cplusplus -static void shade(const color &ca, color *cb, double k) +static void shade(const Options *opts, const color &ca, color *cb, double k) #else -static void shade(const color *ca, color *cb, double k) +static void shade(const Options *opts, const color *ca, color *cb, double k) #endif { if(equal(k, 1.0)) @@ -709,7 +1449,7 @@ static void shade(const color *ca, color *cb, double k) #endif } else - switch(shading) + switch(opts->shading) { case SHADING_SIMPLE: { @@ -782,11 +1522,39 @@ static void shade(const color *ca, color *cb, double k) cb->red=limit(r*65535.0); cb->green=limit(g*65535.0); cb->blue=limit(b*65535.0); + #endif + break; + } + case SHADING_HCY: + { + #define HCY_FACTOR 0.15 + #if defined QT_VERSION && (QT_VERSION >= 0x040000) && !defined QTC_QT_ONLY + if(k>1.0) + *cb=KColorUtils::lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0); + else + *cb=KColorUtils::darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); + #elif defined __cplusplus + if(k>1.0) + *cb=ColorUtils_lighten(&ca, (k*(1+HCY_FACTOR))-1.0, 1.0); + else + *cb=ColorUtils_darken(&ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); + #else + if(k>1.0) + *cb=ColorUtils_lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0); + else + *cb=ColorUtils_darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0); #endif } } +#if defined __cplusplus && defined QT_VERSION && (QT_VERSION >= 0x040000) + cb->setAlpha(ca.alpha()); +#endif +#ifndef __cplusplus + cb->pixel = ca->pixel; +#endif } +#if (!defined CONFIG_DIALOG) static unsigned char checkBounds(int num) { return num < 0 ? 0 : @@ -835,121 +1603,445 @@ static void adjustPix(unsigned char *data, int numChannels, int w, int h, int st offset+=stride; } } -#endif /* QTC_COMMON_NO_FUNCTIONS */ +#endif + +static void setupGradient(Gradient *grad, EGradientBorder border, int numStops, ...) +{ + va_list ap; + int i; + grad->border=border; +#ifndef __cplusplus + grad->numStops=numStops; + grad->stops=malloc(sizeof(GradientStop) * numStops); +#endif + va_start(ap, numStops); + for(i=0; istops.insert(GradientStop(pos, val)); #else -typedef struct + grad->stops[i].pos=pos; + grad->stops[i].val=val; + grad->stops[i].alpha=1.0; #endif + } + va_end(ap); +} + +static const Gradient * getGradient(EAppearance app, const Options *opts) { - int contrast, - passwordChar; - double highlightFactor; - ERound round; - bool embolden, - lighterPopupMenuBgnd, - highlightTab, - colorSelTab, - animatedProgress, - fixParentlessDialogs, - customMenuTextColor, - menubarMouseOver, - shadeMenubarOnlyWhenActive, - thinnerMenuItems, -#ifndef QTC_PLAIN_FOCUS_ONLY - stdFocus, -#endif - lvLines, - drawStatusBarFrames, - fillSlider, - roundMbTopOnly, - gradientPbGroove, + if(IS_CUSTOM(app)) + { #ifdef __cplusplus - stdSidebarButtons, - gtkScrollViews, - gtkComboMenus, -/* + GradientCont::const_iterator grad(opts->customGradient.find(app)); + + if(grad!=opts->customGradient.end()) + return &((*grad).second); #else - setDialogButtonOrder, -*/ -#endif -#if !defined __cplusplus || defined QTC_CONFIG_DIALOG - mapKdeIcons, -#endif -#if defined QTC_CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus - gtkButtonOrder, + Gradient *grad=opts->customGradient[app-APPEARANCE_CUSTOM1]; + + if(grad) + return grad; #endif - borderMenuitems, - colorMenubarMouseOver, - darkerBorders, - vArrows, - xCheck, - framelessGroupBoxes, - inactiveHighlight; - EStripe stripedProgress; - ESliderStyle sliderStyle; - EMouseOver coloredMouseOver; - ETBarBorder toolbarBorders; - EDefBtnIndicator defBtnIndicator; - ELine sliderThumbs, - handles, - toolbarSeparators, - splitters; - EAppearance appearance, - menubarAppearance, - menuitemAppearance, - toolbarAppearance, - lvAppearance, - tabAppearance, - sliderAppearance, - progressAppearance; - EShade shadeSliders, - shadeMenubars, - shadeCheckRadio; - EEffect buttonEffect; - EScrollbar scrollbarType; - color customMenubarsColor, - customSlidersColor, - customMenuNormTextColor, - customMenuSelTextColor, - customCheckRadioColor; - #ifdef QTC_CONFIG_DIALOG - EShading shading; - #endif -#ifndef __cplusplus -} Options; -#else -}; + app=APPEARANCE_RAISED; + } + + { + static Gradient stdGradients[NUM_STD_APP]; + static bool init=false; + + if(!init) + { + setupGradient(&stdGradients[APPEARANCE_FLAT-APPEARANCE_FLAT], GB_3D,2,0.0,1.0,1.0,1.0); + setupGradient(&stdGradients[APPEARANCE_RAISED-APPEARANCE_FLAT], GB_3D_FULL,2,0.0,1.0,1.0,1.0); + setupGradient(&stdGradients[APPEARANCE_DULL_GLASS-APPEARANCE_FLAT], GB_LIGHT,4,0.0,1.05,0.499,0.984,0.5,0.928,1.0,1.0); + setupGradient(&stdGradients[APPEARANCE_SHINY_GLASS-APPEARANCE_FLAT], GB_LIGHT,4,0.0,1.2,0.499,0.984,0.5,0.9,1.0,1.06); + setupGradient(&stdGradients[APPEARANCE_AGUA-APPEARANCE_FLAT], GB_SHINE, 2,0.0,0.6,1.0,1.1); + setupGradient(&stdGradients[APPEARANCE_SOFT_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.04,1.0,0.98); + setupGradient(&stdGradients[APPEARANCE_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.1,1.0,0.94); + setupGradient(&stdGradients[APPEARANCE_HARSH_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.3,1.0,0.925); + setupGradient(&stdGradients[APPEARANCE_INVERTED-APPEARANCE_FLAT], GB_3D,2,0.0,0.93,1.0,1.04); + setupGradient(&stdGradients[APPEARANCE_DARK_INVERTED-APPEARANCE_FLAT], GB_NONE,3,0.0,0.8,0.7,0.95,1.0,1.0); + setupGradient(&stdGradients[APPEARANCE_SPLIT_GRADIENT-APPEARANCE_FLAT], GB_3D,4,0.0,1.06,0.499,1.004,0.5,0.986,1.0,0.92); + setupGradient(&stdGradients[APPEARANCE_BEVELLED-APPEARANCE_FLAT], GB_3D,4,0.0,1.05,0.1,1.02,0.9,0.985,1.0,0.94); + setupGradient(&stdGradients[APPEARANCE_LV_BEVELLED-APPEARANCE_FLAT], GB_3D,3,0.0,1.00,0.85,1.0,1.0,0.90); + setupGradient(&stdGradients[APPEARANCE_AGUA_MOD-APPEARANCE_FLAT], GB_NONE,3,0.0,1.5,0.49,0.85,1.0,1.3); + setupGradient(&stdGradients[APPEARANCE_LV_AGUA-APPEARANCE_FLAT], GB_NONE,4,0.0,0.98,0.35,0.95,0.4,0.93,1.0,1.15); + init=true; + } + + return &stdGradients[app-APPEARANCE_FLAT]; + } + + return 0L; /* Will never happen! */ +} + #endif -#if defined QTC_COMMON_FUNCTIONS && !defined QTC_CONFIG_DIALOG +#if defined COMMON_FUNCTIONS && !defined CONFIG_DIALOG + +#ifdef __cplusplus +static EAppearance widgetApp(EWidget w, const Options *opts, bool active=true) +#else static EAppearance widgetApp(EWidget w, const Options *opts) +#endif { switch(w) { + case WIDGET_SB_BGND: + return opts->sbarBgndAppearance; case WIDGET_LISTVIEW_HEADER: return opts->lvAppearance; case WIDGET_SB_BUTTON: case WIDGET_SLIDER: case WIDGET_SB_SLIDER: return opts->sliderAppearance; + case WIDGET_FILLED_SLIDER_TROUGH: + return opts->sliderFill; case WIDGET_TAB_TOP: case WIDGET_TAB_BOT: return opts->tabAppearance; case WIDGET_MENU_ITEM: return opts->menuitemAppearance; case WIDGET_PROGRESSBAR: +#ifndef __cplusplus + case WIDGET_ENTRY_PROGRESSBAR: +#endif return opts->progressAppearance; + case WIDGET_PBAR_TROUGH: + return opts->progressGrooveAppearance; + case WIDGET_SELECTION: + return opts->selectionAppearance; +#ifdef __cplusplus + case WIDGET_DOCK_WIDGET_TITLE: + return opts->dwtAppearance; + case WIDGET_MDI_WINDOW: + case WIDGET_MDI_WINDOW_TITLE: + return active ? opts->titlebarAppearance : opts->inactiveTitlebarAppearance; + case WIDGET_MDI_WINDOW_BUTTON: + return opts->titlebarButtonAppearance; + case WIDGET_DIAL: + return IS_FLAT(opts->appearance) ? APPEARANCE_RAISED : APPEARANCE_SOFT_GRADIENT; +#endif + case WIDGET_TROUGH: case WIDGET_SLIDER_TROUGH: - return APPEARANCE_FLAT==opts->appearance || APPEARANCE_RAISED==opts->appearance - ? APPEARANCE_FLAT : APPEARANCE_GRADIENT; + return opts->grooveAppearance; +#ifndef __cplusplus + case WIDGET_SPIN_UP: + case WIDGET_SPIN_DOWN: +#endif + case WIDGET_SPIN: + return MODIFY_AGUA(opts->appearance); default: break; } return opts->appearance; }; + +#define MIN_ROUND_FULL_SIZE 8 +#ifdef __cplusplus +#define MIN_ROUND_EXTRA_SIZE(W) (WIDGET_SPIN==(W) ? 7 : 14) +#else +#define MIN_ROUND_EXTRA_SIZE(W) (WIDGET_SPIN_UP==(W) || WIDGET_SPIN_DOWN==(W) || WIDGET_SPIN==(W) ? 7 : 14) +#endif +#define MIN_ROUND_MAX_HEIGHT 12 +#define MIN_ROUND_MAX_WIDTH 24 + +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + +#if defined __cplusplus +#define EXTRA_INNER_RADIUS 3.5 +#define EXTRA_OUTER_RADIUS 4.5 +#define EXTRA_ETCH_RADIUS 5.5 +#define FULL_INNER_RADIUS 1.5 +#define FULL_OUTER_RADIUS 2.5 +#define FULL_ETCH_RADIUS 3.5 + +#if defined QT_VERSION && (QT_VERSION < 0x040600) +#define SLIGHT_INNER_RADIUS 0.5 +#define SLIGHT_OUTER_RADIUS 1.5 +#define SLIGHT_ETCH_RADIUS 2.5 +#else +#define SLIGHT_INNER_RADIUS 0.75 +#define SLIGHT_OUTER_RADIUS 1.75 +#define SLIGHT_ETCH_RADIUS 2.75 #endif +#else +#define EXTRA_INNER_RADIUS 4 +#define EXTRA_OUTER_RADIUS 5 +#define EXTRA_ETCH_RADIUS 6 +#define FULL_INNER_RADIUS 2 +#define FULL_OUTER_RADIUS 3 +#define FULL_ETCH_RADIUS 4 +#define SLIGHT_INNER_RADIUS 1 +#define SLIGHT_OUTER_RADIUS 2 +#define SLIGHT_ETCH_RADIUS 3 #endif + +#define MAX_RADIUS_INTERNAL 9.0 +#define MAX_RADIUS_EXTERNAL (MAX_RADIUS_INTERNAL+2.0) + +typedef enum +{ + RADIUS_SELECTION, + RADIUS_INTERNAL, + RADIUS_EXTERNAL, + RADIUS_ETCH +} ERadius; + +#ifdef __cplusplus +#define IS_MAX_ROUND_WIDGET(A) \ + (WIDGET_STD_BUTTON==A || WIDGET_DEF_BUTTON==A /*|| WIDGET_MENU_BUTTON==A*/) +#define IS_EXTRA_ROUND_WIDGET(A) \ + (A!=WIDGET_MENU_ITEM && A!=WIDGET_TAB_FRAME && A!=WIDGET_PBAR_TROUGH && A!=WIDGET_PROGRESSBAR && \ + A!=WIDGET_MDI_WINDOW && A!=WIDGET_MDI_WINDOW_TITLE) +#else +#define IS_MAX_ROUND_WIDGET(A) \ + (WIDGET_STD_BUTTON==A || WIDGET_DEF_BUTTON==A || WIDGET_TOGGLE_BUTTON==A /*|| WIDGET_MENU_BUTTON==A*/) +#define IS_EXTRA_ROUND_WIDGET(A) \ + (A!=WIDGET_MENU_ITEM && A!=WIDGET_TAB_FRAME && A!=WIDGET_PBAR_TROUGH && A!=WIDGET_PROGRESSBAR) +#endif + +#define CAN_EXTRA_ROUND(MOD) \ + (IS_EXTRA_ROUND_WIDGET(widget) && \ + (IS_SLIDER(widget) || WIDGET_TROUGH==widget || \ + ( ( (w>(MIN_ROUND_EXTRA_SIZE(widget)+MOD)) || (WIDGET_NO_ETCH_BTN==widget || WIDGET_MENU_BUTTON==widget) ) &&\ + (h>(MIN_ROUND_EXTRA_SIZE(widget)+MOD))))) +#define CAN_FULL_ROUND(MOD) (w>(MIN_ROUND_FULL_SIZE+MOD) && h>(MIN_ROUND_FULL_SIZE+MOD)) + +// **NOTE** MUST KEEP IN SYNC WITH getRadius/RADIUS_ETCH !!! +ERound getWidgetRound(const Options *opts, int w, int h, EWidget widget) +{ + ERound r=opts->round; + + if( ((WIDGET_PBAR_TROUGH==widget || WIDGET_PROGRESSBAR==widget) && (opts->square&SQUARE_PROGRESS)) || + (WIDGET_ENTRY==widget && (opts->square&SQUARE_ENTRY)) ) + return ROUND_NONE; + + if((WIDGET_CHECKBOX==widget || WIDGET_FOCUS==widget) && ROUND_NONE!=r) + r=ROUND_SLIGHT; + +#if defined __cplusplus && (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if((WIDGET_MDI_WINDOW_BUTTON==widget && (opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) || + WIDGET_RADIO_BUTTON==widget || WIDGET_DIAL==widget) + return ROUND_MAX; +#endif +#ifndef __cplusplus + if(WIDGET_RADIO_BUTTON==widget) + return ROUND_MAX; +#endif + +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if(WIDGET_SLIDER==widget && + (SLIDER_ROUND==opts->sliderStyle || SLIDER_ROUND_ROTATED==opts->sliderStyle || SLIDER_CIRCULAR==opts->sliderStyle)) + return ROUND_MAX; +#endif + + switch(r) + { + case ROUND_MAX: + if(IS_SLIDER(widget) || WIDGET_TROUGH==widget || + (w>(MIN_ROUND_MAX_WIDTH+2) && h>(MIN_ROUND_MAX_HEIGHT+2) && IS_MAX_ROUND_WIDGET(widget))) + return ROUND_MAX; + case ROUND_EXTRA: + if(CAN_EXTRA_ROUND(2)) + return ROUND_EXTRA; + case ROUND_FULL: + if(CAN_FULL_ROUND(2)) + return ROUND_FULL; + case ROUND_SLIGHT: + return ROUND_SLIGHT; + case ROUND_NONE: + return ROUND_NONE; + } + + return ROUND_NONE; +} + +static double getRadius(const Options *opts, int w, int h, EWidget widget, ERadius rad) +{ + ERound r=opts->round; + + if((WIDGET_CHECKBOX==widget || WIDGET_FOCUS==widget) && ROUND_NONE!=r) + r=ROUND_SLIGHT; + + if( ((WIDGET_PBAR_TROUGH==widget || WIDGET_PROGRESSBAR==widget) && (opts->square&SQUARE_PROGRESS)) || + (WIDGET_ENTRY==widget && (opts->square&SQUARE_ENTRY)) ) + return 0.0; + +#if defined __cplusplus && (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if((WIDGET_MDI_WINDOW_BUTTON==widget && (opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) || + WIDGET_RADIO_BUTTON==widget || WIDGET_DIAL==widget) + return (w>h ? h : w)/2.0; +#endif +#ifndef __cplusplus + if(WIDGET_RADIO_BUTTON==widget) + return (w>h ? h : w)/2.0; +#endif + +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if(WIDGET_SLIDER==widget && + (SLIDER_ROUND==opts->sliderStyle || SLIDER_ROUND_ROTATED==opts->sliderStyle || SLIDER_CIRCULAR==opts->sliderStyle)) + return (w>h ? h : w)/2.0; +#endif + + if(RADIUS_EXTERNAL==rad && !opts->fillProgress && (WIDGET_PROGRESSBAR==widget +#ifndef __cplusplus + || WIDGET_ENTRY_PROGRESSBAR==widget +#endif + )) + rad=RADIUS_INTERNAL; + + switch(rad) + { + case RADIUS_SELECTION: + switch(r) + { + case ROUND_MAX: + case ROUND_EXTRA: + if(/* (WIDGET_RUBBER_BAND==widget && w>14 && h>14) || */(w>48 && h>48)) + return 6.0; + case ROUND_FULL: +// if( /*(WIDGET_RUBBER_BAND==widget && w>11 && h>11) || */(w>48 && h>48)) +// return 3.0; + if(w>MIN_ROUND_FULL_SIZE && h>MIN_ROUND_FULL_SIZE) + return 3.0; + case ROUND_SLIGHT: + return 2.0; + case ROUND_NONE: + return 0; + } + case RADIUS_INTERNAL: + switch(r) + { + case ROUND_MAX: + if(IS_SLIDER(widget) || WIDGET_TROUGH==widget) + { + double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0; + return r>MAX_RADIUS_INTERNAL ? MAX_RADIUS_INTERNAL : r; + } + if(w>(MIN_ROUND_MAX_WIDTH-2) && h>(MIN_ROUND_MAX_HEIGHT-2) && IS_MAX_ROUND_WIDGET(widget)) + { + double r=((w>h ? h : w)-2.0)/2.0; + return r>9.5 ? 9.5 : r; + } + case ROUND_EXTRA: + if(CAN_EXTRA_ROUND(-2)) + return EXTRA_INNER_RADIUS; + case ROUND_FULL: + if(CAN_FULL_ROUND(-2)) + return FULL_INNER_RADIUS; + case ROUND_SLIGHT: + return SLIGHT_INNER_RADIUS; + case ROUND_NONE: + return 0; + } + case RADIUS_EXTERNAL: + switch(r) + { + case ROUND_MAX: + if(IS_SLIDER(widget) || WIDGET_TROUGH==widget) + { + double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0; + return r>MAX_RADIUS_EXTERNAL ? MAX_RADIUS_EXTERNAL : r; + } + if(w>MIN_ROUND_MAX_WIDTH && h>MIN_ROUND_MAX_HEIGHT && IS_MAX_ROUND_WIDGET(widget)) + { + double r=((w>h ? h : w)-2.0)/2.0; + return r>10.5 ? 10.5 : r; + } + case ROUND_EXTRA: + if(CAN_EXTRA_ROUND(0)) + return EXTRA_OUTER_RADIUS; + case ROUND_FULL: + if(CAN_FULL_ROUND(0)) + return FULL_OUTER_RADIUS; + case ROUND_SLIGHT: + return SLIGHT_OUTER_RADIUS; + case ROUND_NONE: + return 0; + } + case RADIUS_ETCH: + // **NOTE** MUST KEEP IN SYNC WITH getWidgetRound !!! + switch(r) + { + case ROUND_MAX: + if(IS_SLIDER(widget) || WIDGET_TROUGH==widget) + { + double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0; + return r>MAX_RADIUS_EXTERNAL ? MAX_RADIUS_EXTERNAL : r; + } + if(w>(MIN_ROUND_MAX_WIDTH+2) && h>(MIN_ROUND_MAX_HEIGHT+2) && IS_MAX_ROUND_WIDGET(widget)) + { + double r=((w>h ? h : w)-2.0)/2.0; + return r>11.5 ? 11.5 : r; + } + case ROUND_EXTRA: + if(CAN_FULL_ROUND(2)) + return EXTRA_ETCH_RADIUS; + case ROUND_FULL: + if(w>(MIN_ROUND_FULL_SIZE+2) && h>(MIN_ROUND_FULL_SIZE+2)) + return FULL_ETCH_RADIUS; + case ROUND_SLIGHT: + return SLIGHT_ETCH_RADIUS; + case ROUND_NONE: + return 0; + } + } + + return 0; +} + +static double qtcRingAlpha[3]={0.125, 0.125, 0.5}; + +static void calcRingAlphas(const color *bgnd) +{ +#ifdef __cplusplus + double r=bgnd->red()/255.0, + g=bgnd->green()/255.0, + b=bgnd->blue()/255.0, +#else + double r=bgnd->red/65535.0, + g=bgnd->green/65535.0, + b=bgnd->blue/65535.0, +#endif + h=0, + s=0, + v=0; + rgbToHsv(r, g, b, &h, &s, &v); + qtcRingAlpha[0]=v*0.26; + qtcRingAlpha[1]=v*0.14; + qtcRingAlpha[2]=v*0.55; +} + +#define BGND_SHINE_SIZE 300 +#define BGND_SHINE_STEPS 8 + +static double shineAlpha(const color *bgnd) +{ +#ifdef __cplusplus + double r=bgnd->red()/255.0, + g=bgnd->green()/255.0, + b=bgnd->blue()/255.0, +#else + double r=bgnd->red/65535.0, + g=bgnd->green/65535.0, + b=bgnd->blue/65535.0, +#endif + h=0, + s=0, + v=0; + rgbToHsv(r, g, b, &h, &s, &v); + return v*0.8; +} + +#endif + +#endif + +#endif // __COMMON_H__ diff --git a/common/config_file.c b/common/config_file.c index 930ce21..7174286 100644 --- a/common/config_file.c +++ b/common/config_file.c @@ -1,5 +1,5 @@ -/* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + /* + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -23,15 +23,40 @@ #include #include #include -#include #include #include -#include #include -#define QTC_MAX_FILENAME_LEN 1024 -#define QTC_MAX_INPUT_LINE_LEN 256 -#define QTC_FILE "qtcurvestylerc" +#ifndef _WIN32 +#include +#include +#endif + +#define MAKE_VERSION(a, b) (((a) << 16) | ((b) << 8)) +#define MAKE_VERSION3(a, b, c) (((a) << 16) | ((b) << 8) | (c)) + +#define MAX_CONFIG_FILENAME_LEN 1024 +#define MAX_CONFIG_INPUT_LINE_LEN 256 +#define CONFIG_FILE "stylerc" +#define OLD_CONFIG_FILE "qtcurvestylerc" +#define VERSION_KEY "version" + +#ifdef __cplusplus + +#if QT_VERSION >= 0x040000 +#include +#include +#include +#define TO_LATIN1(A) A.toLatin1().constData() +#else +#define TO_LATIN1(A) A.latin1() + +#include +#include +#include +#endif + +#endif // __cplusplus #ifdef CONFIG_READ static int c2h(char ch) @@ -78,6 +103,14 @@ static EDefBtnIndicator toInd(const char *str, EDefBtnIndicator def) return IND_CORNER; if(0==memcmp(str, "colored", 7)) return IND_COLORED; + if(0==memcmp(str, "tint", 4)) + return IND_TINT; + if(0==memcmp(str, "glow", 4)) + return IND_GLOW; + if(0==memcmp(str, "darken", 6)) + return IND_DARKEN; + if(0==memcmp(str, "origselected", 12)) + return IND_SELECTED; } return def; @@ -97,6 +130,8 @@ static ELine toLine(const char *str, ELine def) return LINE_DOTS; if(0==memcmp(str, "flat", 4)) return LINE_FLAT; + if(0==memcmp(str, "1dot", 5)) + return LINE_1DOT; } return def; } @@ -121,15 +156,19 @@ static EMouseOver toMouseOver(const char *str, EMouseOver def) { if(0==memcmp(str, "true", 4) || 0==memcmp(str, "colored", 7)) return MO_COLORED; + if(0==memcmp(str, "thickcolored", 12)) + return MO_COLORED_THICK; if(0==memcmp(str, "plastik", 7)) return MO_PLASTIK; + if(0==memcmp(str, "glow", 4)) + return MO_GLOW; if(0==memcmp(str, "false", 4) || 0==memcmp(str, "none", 4)) return MO_NONE; } return def; } -static EAppearance toAppearance(const char *str, EAppearance def) +static EAppearance toAppearance(const char *str, EAppearance def, EAppAllow allow) { if(str) { @@ -137,35 +176,69 @@ static EAppearance toAppearance(const char *str, EAppearance def) return APPEARANCE_FLAT; if(0==memcmp(str, "raised", 6)) return APPEARANCE_RAISED; - if(0==memcmp(str, "gradient", 8) || 0==memcmp(str, "lightgradient", 13)) - return APPEARANCE_GRADIENT; - if(0==memcmp(str, "splitgradient", 13)) - return APPEARANCE_SPLIT_GRADIENT; - if(0==memcmp(str, "glass", 5) || 0==memcmp(str, "shinyglass", 10)) - return APPEARANCE_SHINY_GLASS; if(0==memcmp(str, "dullglass", 9)) return APPEARANCE_DULL_GLASS; + if(0==memcmp(str, "glass", 5) || 0==memcmp(str, "shinyglass", 10)) + return APPEARANCE_SHINY_GLASS; + if(0==memcmp(str, "agua", 4)) +#if defined __cplusplus && !defined CONFIG_DIALOG && defined QT_VERSION && QT_VERSION < 0x040000 + return APPEARANCE_AGUA_MOD; +#else + return APPEARANCE_AGUA; +#endif + if(0==memcmp(str, "soft", 4)) + return APPEARANCE_SOFT_GRADIENT; + if(0==memcmp(str, "gradient", 8) || 0==memcmp(str, "lightgradient", 13)) + return APPEARANCE_GRADIENT; + if(0==memcmp(str, "harsh", 5)) + return APPEARANCE_HARSH_GRADIENT; if(0==memcmp(str, "inverted", 8)) return APPEARANCE_INVERTED; + if(0==memcmp(str, "darkinverted", 12)) + return APPEARANCE_DARK_INVERTED; + if(0==memcmp(str, "splitgradient", 13)) + return APPEARANCE_SPLIT_GRADIENT; if(0==memcmp(str, "bevelled", 8)) return APPEARANCE_BEVELLED; + if(APP_ALLOW_FADE==allow && 0==memcmp(str, "fade", 4)) + return APPEARANCE_FADE; + if(APP_ALLOW_STRIPED==allow && 0==memcmp(str, "striped", 7)) + return APPEARANCE_STRIPED; + if(APP_ALLOW_NONE==allow && 0==memcmp(str, "none", 4)) + return APPEARANCE_NONE; + + if(0==memcmp(str, "customgradient", 14) && strlen(str)>14) + { + int i=atoi(&str[14]); + + i--; + if(i>=0 && i= 0x040000)) +static ETitleBarIcon toTitlebarIcon(const char *str, ETitleBarIcon def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return TITLEBAR_ICON_NONE; + if(0==memcmp(str, "menu", 4)) + return TITLEBAR_ICON_MENU_BUTTON; + if(0==memcmp(str, "title", 5)) + return TITLEBAR_ICON_NEXT_TO_TITLE; + } + return def; +} #endif -#ifdef CONFIG_WRITE -#include +static EImageType toImageType(const char *str, EImageType def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return IMG_NONE; + if(0==memcmp(str, "plainrings", 10)) + return IMG_PLAIN_RINGS; + if(0==memcmp(str, "rings", 5)) + return IMG_BORDERED_RINGS; + if(0==memcmp(str, "squarerings", 11)) + return IMG_SQUARE_RINGS; + if(0==memcmp(str, "file", 4)) + return IMG_FILE; + } + return def; +} + +static EGlow toGlow(const char *str, EGlow def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return GLOW_NONE; + if(0==memcmp(str, "start", 5)) + return GLOW_START; + if(0==memcmp(str, "middle", 6)) + return GLOW_MIDDLE; + if(0==memcmp(str, "end", 3)) + return GLOW_END; + } + return def; +} #endif static const char * getHome() { static const char *home=NULL; +#ifdef _WIN32 + home = getenv("HOMEPATH"); +#else if(!home) { struct passwd *p=getpwuid(getuid()); @@ -295,15 +563,82 @@ static const char * getHome() if(!home) home="/tmp"; } - +#endif return home; } -static const char *xdgConfigFolder() +#ifdef __cplusplus + +#if defined QTC_QT_ONLY || QT_VERSION < 0x040000 +#if QT_VERSION < 0x040000 +#include +#include +#endif +// Take from KStandardDirs::makeDir +static bool makeDir(const QString& dir, int mode) +{ + // we want an absolute path + if (QDir::isRelativePath(dir)) + return false; + +#ifdef Q_WS_WIN + return QDir().mkpath(dir); +#else + QString target = dir; + uint len = target.length(); + + // append trailing slash if missing + if (dir.at(len - 1) != '/') + target += '/'; + + QString base; + uint i = 1; + + while( i < len ) + { + struct stat st; +#if QT_VERSION >= 0x040000 + int pos = target.indexOf('/', i); +#else + int pos = target.find('/', i); +#endif + base += target.mid(i - 1, pos - i + 1); + QByteArray baseEncoded = QFile::encodeName(base); + // bail out if we encountered a problem + if (stat(baseEncoded, &st) != 0) + { + // Directory does not exist.... + // Or maybe a dangling symlink ? + if (lstat(baseEncoded, &st) == 0) + (void)unlink(baseEncoded); // try removing + + if (mkdir(baseEncoded, static_cast(mode)) != 0) + { +#if QT_VERSION >= 0x040000 + baseEncoded.prepend("trying to create local folder "); + perror(baseEncoded.constData()); +#else + perror("trying to create QtCurve config folder "); +#endif + return false; // Couldn't create it :-( + } + } + i = pos + 1; + } + return true; +#endif +} + +#else +#include +#endif +#endif + +static const char *qtcConfDir() { - static char xdgDir[QTC_MAX_FILENAME_LEN]={'\0'}; + static char *cfgDir=NULL; - if(!xdgDir[0]) + if(!cfgDir) { static const char *home=NULL; @@ -333,7 +668,12 @@ static const char *xdgConfigFolder() "sudo su" / "kcmshell style". The 1st would write to ~/.config, but if root has a XDG_ set then that would be used on the second :-( */ +#ifndef _WIN32 char *env=0==getuid() ? NULL : getenv("XDG_CONFIG_HOME"); +#else + char *env=0; +#endif + #endif if(!env) @@ -341,59 +681,210 @@ static const char *xdgConfigFolder() if(!home) home=getHome(); - sprintf(xdgDir, "%s/.config", home); + cfgDir=(char *)malloc(strlen(home)+18); + sprintf(cfgDir, "%s/.config/qtcurve/", home); } else - strcpy(xdgDir, env); + { + cfgDir=(char *)malloc(strlen(env)+10); + sprintf(cfgDir, "%s/qtcurve/", env); + } -#if defined CONFIG_WRITE || !defined __cplusplus +//#if defined CONFIG_WRITE || !defined __cplusplus { struct stat info; - if(0!=lstat(xdgDir, &info)) + if(0!=lstat(cfgDir, &info)) { #ifdef __cplusplus - KStandardDirs::makeDir(xdgDir, 0755); +#if defined QTC_QT_ONLY || QT_VERSION < 0x040000 + makeDir(cfgDir, 0755); #else - g_mkdir_with_parents(xdgDir, 0755); + KStandardDirs::makeDir(cfgDir, 0755); +#endif +#else + g_mkdir_with_parents(cfgDir, 0755); #endif } } +//#endif + } + + return cfgDir; +} + +#ifdef __cplusplus +static WindowBorders qtcGetWindowBorderSize(bool force=false) +#else +static WindowBorders qtcGetWindowBorderSize(bool force) +#endif +{ + static WindowBorders def={24, 18, 4, 4}; + static WindowBorders sizes={-1, -1, -1, -1}; + + if(-1==sizes.titleHeight || force) + { +#ifdef __cplusplus + QFile f(qtcConfDir()+QString(BORDER_SIZE_FILE)); + +#if QT_VERSION >= 0x040000 + if(f.open(QIODevice::ReadOnly)) +#else + if(f.open(IO_ReadOnly)) #endif + { + QTextStream stream(&f); + QString line; + + sizes.titleHeight=stream.readLine().toInt(); + sizes.toolTitleHeight=stream.readLine().toInt(); + sizes.bottom=stream.readLine().toInt(); + sizes.sides=stream.readLine().toInt(); + f.close(); + } +#else // __cplusplus + char *filename=(char *)malloc(strlen(qtcConfDir())+strlen(BORDER_SIZE_FILE)+1); + FILE *f=NULL; + + sprintf(filename, "%s"BORDER_SIZE_FILE, qtcConfDir()); + if((f=fopen(filename, "r"))) + { + char *line=NULL; + size_t len; + getline(&line, &len, f); + sizes.titleHeight=atoi(line); + getline(&line, &len, f); + sizes.toolTitleHeight=atoi(line); + getline(&line, &len, f); + sizes.bottom=atoi(line); + getline(&line, &len, f); + sizes.sides=atoi(line); + if(line) + free(line); + fclose(f); + } + free(filename); +#endif // __cplusplus + } + + return sizes.titleHeight<12 ? def : sizes; +} + +#if (!defined QT_VERSION || QT_VERSION >= 0x040000) && !defined CONFIG_DIALOG + +#define MENU_FILE_PREFIX "menubar-" +#define STATUS_FILE_PREFIX "statusbar-" + +#define qtcMenuBarHidden(A) qtcBarHidden((A), MENU_FILE_PREFIX) +#define qtcSetMenuBarHidden(A, H) qtcSetBarHidden((A), (H), MENU_FILE_PREFIX) +#define qtcStatusBarHidden(A) qtcBarHidden((A), STATUS_FILE_PREFIX) +#define qtcSetStatusBarHidden(A, H) qtcSetBarHidden((A), (H), STATUS_FILE_PREFIX) + +#ifdef __cplusplus +static bool qtcBarHidden(const QString &app, const char *prefix) +{ + return QFile::exists(QFile::decodeName(qtcConfDir())+prefix+app); +} + +static void qtcSetBarHidden(const QString &app, bool hidden, const char *prefix) +{ + if(!hidden) + QFile::remove(QFile::decodeName(qtcConfDir())+prefix+app); + else + QFile(QFile::decodeName(qtcConfDir())+prefix+app).open(QIODevice::WriteOnly); +} + +#else // __cplusplus +static bool qtcFileExists(const char *name) +{ + struct stat info; + + return 0==lstat(name, &info) && S_ISREG(info.st_mode); +} + +static char * qtcGetBarFileName(const char *app, const char *prefix) +{ + char *filename=NULL; + + if(!filename) + { + filename=(char *)malloc(strlen(qtcConfDir())+strlen(prefix)+strlen(app)+1); + sprintf(filename, "%s%s%s", qtcConfDir(), prefix, app); + } + + return filename; +} + +static bool qtcBarHidden(const char *app, const char *prefix) +{ + return qtcFileExists(qtcGetBarFileName(app, prefix)); +} + +static void qtcSetBarHidden(const char *app, bool hidden, const char *prefix) +{ + if(!hidden) + unlink(qtcGetBarFileName(app, prefix)); + else + { + FILE *f=fopen(qtcGetBarFileName(app, prefix), "w"); + + if(f) + fclose(f); } +} + +#endif // __cplusplus + +#ifdef __cplusplus +#include +#endif // __cplusplus + +static void loadBgndImage(QtCImage *img) +{ + if(!img->loaded && + img->width>16 && img->width<1024 && img->height>16 && img->height<1024) + { + img->loaded=true; +#ifdef __cplusplus + if(!img->file.isEmpty()) + { + QSvgRenderer svg(img->file); - return xdgDir; + if(svg.isValid()) + { + img->pix=QPixmap(img->width, img->height); + img->pix.fill(Qt::transparent); + QPainter painter(&img->pix); + svg.render(&painter); + painter.end(); + } + } +#else // __cplusplus + img->pix=0L; + if(img->file) + img->pix=gdk_pixbuf_new_from_file_at_scale(img->file, img->width, img->height, FALSE, NULL); +#endif // __cplusplus + } } +#endif // (!defined QT_VERSION || QT_VERSION >= 0x040000) && !defined CONFIG_DIALOG + #ifdef CONFIG_READ #ifdef __cplusplus -#define QTC_IS_BLACK(A) (0==(A).red() && 0==(A).green() && 0==(A).blue()) +#define IS_BLACK(A) (0==(A).red() && 0==(A).green() && 0==(A).blue()) #else -#define QTC_IS_BLACK(A) (0==(A).red && 0==(A).green && 0==(A).blue) +#define IS_BLACK(A) (0==(A).red && 0==(A).green && 0==(A).blue) #endif static void checkColor(EShade *s, color *c) { - if(SHADE_CUSTOM==*s && QTC_IS_BLACK(*c)) + if(SHADE_CUSTOM==*s && IS_BLACK(*c)) *s=SHADE_NONE; } #ifdef __cplusplus -#if QT_VERSION >= 0x040000 -#include -#include -#include -#define QTC_LATIN1(A) A.toLatin1() -#else -#define QTC_LATIN1(A) A.latin1() - -#include -#include -#include -#endif - class QtCConfig { public: @@ -401,7 +892,8 @@ class QtCConfig QtCConfig(const QString &filename); bool ok() const { return values.count()>0; } - const QString & readEntry(const char *key, const QString &def=QString::null); + bool hasKey(const QString &key) { return values.contains(key); } + const QString & readEntry(const QString &key, const QString &def=QString::null); private: @@ -436,47 +928,105 @@ QtCConfig::QtCConfig(const QString &filename) } } -inline const QString & QtCConfig::readEntry(const char *key, const QString &def) +inline const QString & QtCConfig::readEntry(const QString &key, const QString &def) { return values.contains(key) ? values[key] : def; } -inline QString readStringEntry(QtCConfig &cfg, const char *key) +inline QString readStringEntry(QtCConfig &cfg, const QString &key) { return cfg.readEntry(key); } -static int readNumEntry(QtCConfig &cfg, const char *key, int def) +static int readNumEntry(QtCConfig &cfg, const QString &key, int def) { const QString &val(readStringEntry(cfg, key)); return val.isEmpty() ? def : val.toInt(); } -static bool readBoolEntry(QtCConfig &cfg, const char *key, bool def) +static int readVersionEntry(QtCConfig &cfg, const QString &key) { const QString &val(readStringEntry(cfg, key)); + int major, minor, patch; - return val.isEmpty() ? def : (val=="true" ? true : false); + return !val.isEmpty() && 3==sscanf(TO_LATIN1(val), "%d.%d.%d", &major, &minor, &patch) + ? MAKE_VERSION3(major, minor, patch) + : 0; } -#if QT_VERSION >= 0x040000 -#define QTC_LATIN1(A) A.toLatin1() -#else -#define QTC_LATIN1(A) A.latin1() -#endif +static bool readBoolEntry(QtCConfig &cfg, const QString &key, bool def) +{ + const QString &val(readStringEntry(cfg, key)); + + return val.isEmpty() ? def : (val=="true" ? true : false); +} + +static void readDoubleList(QtCConfig &cfg, const char *key, double *list, int count) +{ +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList strings(readStringEntry(cfg, key).split(',', QString::SkipEmptyParts)); +#else + QStringList strings(QStringList::split(',', readStringEntry(cfg, key))); +#endif + bool ok(count==strings.size()); + + if(ok) + { + QStringList::ConstIterator it(strings.begin()); + int i; -#define QTC_CFG_READ_COLOR(ENTRY) \ + for(i=0; iENTRY=def->ENTRY; \ else \ - setRgb(&(opts->ENTRY), QTC_LATIN1(sVal)); \ + setRgb(&(opts->ENTRY), TO_LATIN1(sVal)); \ } +#define CFG_READ_IMAGE(ENTRY) \ + { \ + opts->ENTRY.type=toImageType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY.type); \ + opts->ENTRY.loaded=false; \ + if(IMG_FILE==opts->ENTRY.type) \ + { \ + QString file(cfg.readEntry(#ENTRY ".file")); \ + if(!file.isEmpty()) \ + { \ + opts->ENTRY.file=file; \ + opts->ENTRY.width=readNumEntry(cfg, #ENTRY ".width", 0); \ + opts->ENTRY.height=readNumEntry(cfg, #ENTRY ".height", 0); \ + } \ + } \ + } + +#if QT_VERSION >= 0x040000 + #define CFG_READ_STRING_LIST(ENTRY) \ + { \ + QString val=readStringEntry(cfg, #ENTRY); \ + Strings set=val.isEmpty() ? Strings() : Strings::fromList(val.split(",", QString::SkipEmptyParts)); \ + opts->ENTRY=set.count() || cfg.hasKey(#ENTRY) ? set : def->ENTRY; \ + } #else + #define CFG_READ_STRING_LIST(ENTRY) \ + { \ + QString val=readStringEntry(cfg, #ENTRY); \ + Strings list=val.isEmpty() ? Strings() : Strings::split(",", val, false); \ + opts->ENTRY=list.count() || cfg.hasKey(#ENTRY) ? list : def->ENTRY; \ + } +#endif +#else + static char * lookupCfgHash(GHashTable **cfg, char *key, char *val) { char *rv=NULL; @@ -502,9 +1052,9 @@ static GHashTable * loadConfig(const char *filename) if(f) { - char line[QTC_MAX_INPUT_LINE_LEN]; + char line[MAX_CONFIG_INPUT_LINE_LEN]; - while(NULL!=fgets(line, QTC_MAX_INPUT_LINE_LEN-1, f)) + while(NULL!=fgets(line, MAX_CONFIG_INPUT_LINE_LEN-1, f)) { char *eq=strchr(line, '='); int pos=eq ? eq-line : -1; @@ -545,6 +1095,16 @@ static int readNumEntry(GHashTable *cfg, char *key, int def) return str ? atoi(str) : def; } +static int readVersionEntry(GHashTable *cfg, char *key) +{ + char *str=readStringEntry(cfg, key); + int major, minor, patch; + + return str && 3==sscanf(str, "%d.%d.%d", &major, &minor, &patch) + ? MAKE_VERSION3(major, minor, patch) + : 0; +} + static gboolean readBoolEntry(GHashTable *cfg, char *key, gboolean def) { char *str=readStringEntry(cfg, key); @@ -552,9 +1112,47 @@ static gboolean readBoolEntry(GHashTable *cfg, char *key, gboolean def) return str ? (0==memcmp(str, "true", 4) ? true : false) : def; } -#define QTC_LATIN1(A) A +static void readDoubleList(GHashTable *cfg, char *key, double *list, int count) +{ + char *str=readStringEntry(cfg, key); + + if(str) + { + int j, + comma=0; + bool ok=true; + + for(j=0; str[j]; ++j) + if(','==str[j]) + comma++; + + ok=(count-1)==comma; + if(ok) + { + for(j=0; jENTRY=def->ENTRY; \ } -#endif +#define CFG_READ_IMAGE(ENTRY) \ + { \ + opts->ENTRY.type=toImageType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY.type); \ + opts->ENTRY.loaded=false; \ + if(IMG_FILE==opts->ENTRY.type) \ + { \ + const char *file=readStringEntry(cfg, #ENTRY ".file"); \ + if(file) \ + { \ + opts->ENTRY.file=file; \ + opts->ENTRY.width=readNumEntry(cfg, #ENTRY ".width", 0); \ + opts->ENTRY.height=readNumEntry(cfg, #ENTRY ".height", 0); \ + } \ + } \ + } +#define CFG_READ_STRING_LIST(ENTRY) \ + { \ + const gchar *str=readStringEntry(cfg, #ENTRY); \ + if(str) \ + opts->ENTRY=g_strsplit(str, ",", -1); \ + else if(def->ENTRY) \ + { \ + opts->ENTRY=def->ENTRY; \ + def->ENTRY=NULL; \ + } \ + } -#define QTC_CFG_READ_NUM(ENTRY) \ - opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); +#endif -#define QTC_CFG_READ_BOOL(ENTRY) \ +#define CFG_READ_BOOL(ENTRY) \ opts->ENTRY=readBoolEntry(cfg, #ENTRY, def->ENTRY); -#define QTC_CFG_READ_ROUND(ENTRY) \ - opts->ENTRY=toRound(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_ROUND(ENTRY) \ + opts->ENTRY=toRound(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_DI(ENTRY) \ - opts->ENTRY=((double)(readNumEntry(cfg, #ENTRY, ((int)(def->ENTRY*100))-100)+100))/100.0; +#define CFG_READ_INT(ENTRY) \ + opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); -#define QTC_CFG_READ_TB_BORDER(ENTRY) \ - opts->ENTRY=toTBarBorder(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_INT_BOOL(ENTRY, DEF) \ + if(readBoolEntry(cfg, #ENTRY, false)) \ + opts->ENTRY=DEF; \ + else \ + opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); + +#define CFG_READ_TB_BORDER(ENTRY) \ + opts->ENTRY=toTBarBorder(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_MOUSE_OVER(ENTRY) \ - opts->ENTRY=toMouseOver(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_MOUSE_OVER(ENTRY) \ + opts->ENTRY=toMouseOver(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_APPEARANCE(ENTRY, DEF) \ - opts->ENTRY=toAppearance(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), DEF); +#define CFG_READ_APPEARANCE(ENTRY, ALLOW) \ + opts->ENTRY=toAppearance(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY, ALLOW); /* -#define QTC_CFG_READ_APPEARANCE(ENTRY) \ - opts->ENTRY=toAppearance(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_APPEARANCE(ENTRY) \ + opts->ENTRY=toAppearance(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); */ -#define QTC_CFG_READ_STRIPE(ENTRY) \ - opts->ENTRY=toStripe(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_STRIPE(ENTRY) \ + opts->ENTRY=toStripe(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_SLIDER(ENTRY) \ + opts->ENTRY=toSlider(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_DEF_BTN(ENTRY) \ + opts->ENTRY=toInd(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SLIDER(ENTRY) \ - opts->ENTRY=toSlider(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_LINE(ENTRY) \ + opts->ENTRY=toLine(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_DEF_BTN(ENTRY) \ - opts->ENTRY=toInd(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SHADE(ENTRY, AD, MENU_STRIPE, COL) \ + opts->ENTRY=toShade(TO_LATIN1(readStringEntry(cfg, #ENTRY)), AD, def->ENTRY, MENU_STRIPE, COL); -#define QTC_CFG_READ_LINE(ENTRY) \ - opts->ENTRY=toLine(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SCROLLBAR(ENTRY) \ + opts->ENTRY=toScrollbar(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SHADE(ENTRY, AD) \ - opts->ENTRY=toShade(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), AD, def->ENTRY); +#define CFG_READ_FRAME(ENTRY) \ + opts->ENTRY=toFrame(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SCROLLBAR(ENTRY) \ - opts->ENTRY=toScrollbar(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_EFFECT(ENTRY) \ + opts->ENTRY=toEffect(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_EFFECT(ENTRY) \ - opts->ENTRY=toEffect(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SHADING(ENTRY) \ + opts->ENTRY=toShading(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#ifdef QTC_CONFIG_DIALOG -#define QTC_CFG_READ_SHADING(ENTRY, UNUSED) \ - opts->ENTRY=toShading(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_ECOLOR(ENTRY) \ + opts->ENTRY=toEColor(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_FOCUS(ENTRY) \ + opts->ENTRY=toFocus(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_TAB_MO(ENTRY) \ + opts->ENTRY=toTabMo(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_GRAD_TYPE(ENTRY) \ + opts->ENTRY=toGradType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_LV_LINES(ENTRY) \ + opts->ENTRY=toLvLines(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#ifdef __cplusplus +#define CFG_READ_ALIGN(ENTRY) \ + opts->ENTRY=toAlign(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#endif + +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) +#define CFG_READ_TB_ICON(ENTRY) \ + opts->ENTRY=toTitlebarIcon(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#endif + +#define CFG_READ_GLOW(ENTRY) \ + opts->ENTRY=toGlow(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +static void checkAppearance(EAppearance *ap, Options *opts) +{ + if(*ap>=APPEARANCE_CUSTOM1 && *ap<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD)) + { +#ifdef __cplusplus + if(opts->customGradient.end()==opts->customGradient.find(*ap)) #else -#define QTC_CFG_READ_SHADING(ENTRY, DEF) \ - ENTRY=toShading(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), DEF); + if(!opts->customGradient[*ap-APPEARANCE_CUSTOM1]) +#endif + { + if(ap==&opts->appearance) + *ap=APPEARANCE_FLAT; + else + *ap=opts->appearance; + } + } +} + +static void defaultSettings(Options *opts); + +#ifndef __cplusplus +static void copyGradients(Options *src, Options *dest) +{ + if(src && dest && src!=dest) + { + int i; + + for(i=0; icustomGradient[i] && src->customGradient[i]->numStops>0) + { + dest->customGradient[i]=malloc(sizeof(Gradient)); + dest->customGradient[i]->numStops=src->customGradient[i]->numStops; + dest->customGradient[i]->stops=malloc(sizeof(GradientStop) * dest->customGradient[i]->numStops); + memcpy(dest->customGradient[i]->stops, src->customGradient[i]->stops, + sizeof(GradientStop) * dest->customGradient[i]->numStops); + dest->customGradient[i]->border=src->customGradient[i]->border; + } + else + dest->customGradient[i]=NULL; + } +} + +static void copyOpts(Options *src, Options *dest) +{ + if(src && dest && src!=dest) + { + memcpy(dest, src, sizeof(Options)); + dest->noBgndGradientApps=src->noBgndGradientApps; + dest->noBgndOpacityApps=src->noBgndOpacityApps; + dest->noMenuBgndOpacityApps=src->noMenuBgndOpacityApps; + dest->noBgndImageApps=src->noBgndImageApps; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + dest->noDlgFixApps=src->noDlgFixApps; + src->noDlgFixApps=NULL; #endif + dest->noMenuStripeApps=src->noMenuStripeApps; + src->noBgndGradientApps=src->noBgndOpacityApps=src->noMenuBgndOpacityApps=src->noBgndImageApps=src->noMenuStripeApps=NULL; + memcpy(dest->customShades, src->customShades, sizeof(double)*NUM_STD_SHADES); + memcpy(dest->customAlphas, src->customAlphas, sizeof(double)*NUM_STD_ALPHAS); + copyGradients(src, dest); + } +} +static void freeOpts(Options *opts) +{ + if(opts) + { + int i; + + if(opts->noBgndGradientApps) + g_strfreev(opts->noBgndGradientApps); + if(opts->noBgndOpacityApps) + g_strfreev(opts->noBgndOpacityApps); + if(opts->noMenuBgndOpacityApps) + g_strfreev(opts->noMenuBgndOpacityApps); + if(opts->noBgndImageApps) + g_strfreev(opts->noBgndImageApps); +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + if(opts->noDlgFixApps) + g_strfreev(opts->noDlgFixApps); + opts->noDlgFixApps=NULL +#endif + if(opts->noMenuStripeApps) + g_strfreev(opts->noMenuStripeApps); + opts->noBgndGradientApps=opts->noBgndOpacityApps=opts->noMenuBgndOpacityApps=opts->noBgndImageApps=opts->noMenuStripeApps=NULL; + for(i=0; icustomGradient[i]) + { + if(opts->customGradient[i]->stops) + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=NULL; + } + } +} +#endif + +static void checkConfig(Options *opts) +{ + /* **Must** check appearance first, as the rest will default to this */ + checkAppearance(&opts->appearance, opts); + checkAppearance(&opts->bgndAppearance, opts); + checkAppearance(&opts->menuBgndAppearance, opts); + checkAppearance(&opts->menubarAppearance, opts); + checkAppearance(&opts->menuitemAppearance, opts); + checkAppearance(&opts->toolbarAppearance, opts); + checkAppearance(&opts->lvAppearance, opts); + checkAppearance(&opts->tabAppearance, opts); + checkAppearance(&opts->activeTabAppearance, opts); + checkAppearance(&opts->sliderAppearance, opts); + checkAppearance(&opts->selectionAppearance, opts); + checkAppearance(&opts->titlebarAppearance, opts); + checkAppearance(&opts->inactiveTitlebarAppearance, opts); #ifdef __cplusplus -static bool readConfig(const QString &file, Options *opts, Options *def) + checkAppearance(&opts->titlebarButtonAppearance, opts); + checkAppearance(&opts->selectionAppearance, opts); + checkAppearance(&opts->dwtAppearance, opts); +#endif + checkAppearance(&opts->menuStripeAppearance, opts); + checkAppearance(&opts->progressAppearance, opts); + checkAppearance(&opts->progressGrooveAppearance, opts); + checkAppearance(&opts->grooveAppearance, opts); + checkAppearance(&opts->sunkenAppearance, opts); + checkAppearance(&opts->sbarBgndAppearance, opts); + checkAppearance(&opts->sliderFill, opts); + checkAppearance(&opts->tooltipAppearance, opts); + + if(SHADE_BLEND_SELECTED==opts->shadeCheckRadio) + opts->shadeCheckRadio=SHADE_SELECTED; + + checkColor(&opts->shadeMenubars, &opts->customMenubarsColor); + checkColor(&opts->shadeSliders, &opts->customSlidersColor); + checkColor(&opts->shadeCheckRadio, &opts->customCheckRadioColor); + checkColor(&opts->menuStripe, &opts->customMenuStripeColor); + checkColor(&opts->comboBtn, &opts->customComboBtnColor); + checkColor(&opts->sortedLv, &opts->customSortedLvColor); + if(APPEARANCE_BEVELLED==opts->toolbarAppearance) + opts->toolbarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->toolbarAppearance) + opts->toolbarAppearance=APPEARANCE_FLAT; + + if(APPEARANCE_BEVELLED==opts->menubarAppearance) + opts->menubarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->menubarAppearance) + opts->menubarAppearance=APPEARANCE_FLAT; + + if(APPEARANCE_BEVELLED==opts->sliderAppearance) + opts->sliderAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_BEVELLED==opts->tabAppearance) + opts->tabAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_BEVELLED==opts->activeTabAppearance) + opts->activeTabAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_RAISED==opts->selectionAppearance) + opts->selectionAppearance=APPEARANCE_FLAT; + else if(APPEARANCE_BEVELLED==opts->selectionAppearance) + opts->selectionAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_RAISED==opts->menuStripeAppearance) + opts->menuStripeAppearance=APPEARANCE_FLAT; + else if(APPEARANCE_BEVELLED==opts->menuStripeAppearance) + opts->menuStripeAppearance=APPEARANCE_GRADIENT; + + if(opts->highlightFactorhighlightFactor>MAX_HIGHLIGHT_FACTOR) + opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; + + if(opts->crHighlightcrHighlight>MAX_HIGHLIGHT_FACTOR) + opts->crHighlight=DEFAULT_CR_HIGHLIGHT_FACTOR; + + if(opts->splitterHighlightsplitterHighlight>MAX_HIGHLIGHT_FACTOR) + opts->splitterHighlight=DEFAULT_SPLITTER_HIGHLIGHT_FACTOR; + +#if !defined __cplusplus || defined CONFIG_DIALOG + if(opts->expanderHighlightexpanderHighlight>MAX_HIGHLIGHT_FACTOR) + opts->expanderHighlight=DEFAULT_EXPANDER_HIGHLIGHT_FACTOR; +#endif + + if(opts->menuDelaymenuDelay>MAX_MENU_DELAY) + opts->menuDelay=DEFAULT_MENU_DELAY; + + if(0==opts->sliderWidth%2) + opts->sliderWidth++; + + if(opts->sliderWidthsliderWidth>MAX_SLIDER_WIDTH) + opts->sliderWidth=DEFAULT_SLIDER_WIDTH; + + if(opts->sliderWidthsliderThumbs=LINE_NONE; + + if(opts->lighterPopupMenuBgndlighterPopupMenuBgnd>MAX_LIGHTER_POPUP_MENU) + opts->lighterPopupMenuBgnd=DEF_POPUPMENU_LIGHT_FACTOR; + + if(opts->tabBgndtabBgnd>MAX_TAB_BGND) + opts->tabBgnd=DEF_TAB_BGND; + + if(opts->animatedProgress && !opts->stripedProgress) + opts->animatedProgress=false; + + if(0==opts->gbFactor) + opts->groupBox=FRAME_PLAIN; + + if(opts->gbFactorgbFactor>MAX_GB_FACTOR) + opts->gbFactor=DEF_GB_FACTOR; + +#if defined __cplusplus && defined QT_VERSION && QT_VERSION < 0x040000 && !defined CONFIG_DIALOG + opts->crSize=CR_SMALL_SIZE; + if(SLIDER_CIRCULAR==opts->sliderStyle) + opts->sliderStyle=SLIDER_ROUND; + if(STRIPE_FADE==opts->stripedProgress) + opts->stripedProgress=STRIPE_PLAIN; +#endif + /* For now, only 2 sizes... */ + if(opts->crSize!=CR_SMALL_SIZE && opts->crSize!=CR_LARGE_SIZE) + opts->crSize=CR_SMALL_SIZE; + +/* +?? + if(SHADE_CUSTOM==opts->shadeMenubars || SHADE_BLEND_SELECTED==opts->shadeMenubars || !opts->borderMenuitems) + opts->colorMenubarMouseOver=true; +*/ + +#if defined __cplusplus && defined QT_VERSION && QT_VERSION < 0x040000 && !defined CONFIG_DIALOG + if(opts->round>ROUND_FULL) + opts->round=ROUND_FULL; +#endif +#ifndef CONFIG_DIALOG + if(MO_GLOW==opts->coloredMouseOver && EFFECT_NONE==opts->buttonEffect) + opts->coloredMouseOver=MO_COLORED_THICK; + + if(IND_GLOW==opts->defBtnIndicator && EFFECT_NONE==opts->buttonEffect) + opts->defBtnIndicator=IND_TINT; + + if(opts->round>ROUND_EXTRA && FOCUS_GLOW!=opts->focus) + opts->focus=FOCUS_LINE; + + if(EFFECT_NONE==opts->buttonEffect) + { + opts->etchEntry=false; + if(FOCUS_GLOW==opts->focus) + opts->focus=FOCUS_FULL; + } + +// if(opts->squareScrollViews) +// opts->highlightScrollViews=false; + + if(SHADE_WINDOW_BORDER==opts->shadeMenubars) + opts->shadeMenubarOnlyWhenActive=true; + + if(MO_GLOW==opts->coloredMouseOver) + opts->coloredTbarMo=true; + + if(opts->roundsquare|=SQUARE_POPUP_MENUS|SQUARE_TOOLTIPS; +#endif + + if(opts->bgndOpacity<0 || opts->bgndOpacity>100) + opts->bgndOpacity=100; + if(opts->dlgOpacity<0 || opts->dlgOpacity>100) + opts->dlgOpacity=100; + if(opts->menuBgndOpacity<0 || opts->menuBgndOpacity>100) + opts->menuBgndOpacity=100; + +#ifndef CONFIG_DIALOG + opts->bgndAppearance=MODIFY_AGUA(opts->bgndAppearance); + opts->selectionAppearance=MODIFY_AGUA(opts->selectionAppearance); + opts->lvAppearance=MODIFY_AGUA_X(opts->lvAppearance, APPEARANCE_LV_AGUA); + opts->sbarBgndAppearance=MODIFY_AGUA(opts->sbarBgndAppearance); + opts->tooltipAppearance=MODIFY_AGUA(opts->tooltipAppearance); + opts->progressGrooveAppearance=MODIFY_AGUA(opts->progressGrooveAppearance); + opts->menuBgndAppearance=MODIFY_AGUA(opts->menuBgndAppearance); + opts->menuStripeAppearance=MODIFY_AGUA(opts->menuStripeAppearance); + opts->grooveAppearance=MODIFY_AGUA(opts->grooveAppearance); + opts->progressAppearance=MODIFY_AGUA(opts->progressAppearance); + opts->sliderFill=MODIFY_AGUA(opts->sliderFill); + opts->tabAppearance=MODIFY_AGUA(opts->tabAppearance); + opts->activeTabAppearance=MODIFY_AGUA(opts->activeTabAppearance); + opts->menuitemAppearance=MODIFY_AGUA(opts->menuitemAppearance); + + if(!opts->borderProgress && (!opts->fillProgress || !(opts->square&SQUARE_PROGRESS))) + opts->borderProgress=true; + + opts->titlebarAppearance=MODIFY_AGUA(opts->titlebarAppearance); + opts->inactiveTitlebarAppearance=MODIFY_AGUA(opts->inactiveTitlebarAppearance); + + if(opts->shadePopupMenu && SHADE_NONE==opts->shadeMenubars) + opts->shadePopupMenu=false; + + if(opts->shadePopupMenu) + opts->lighterPopupMenuBgnd=0; +#ifdef __cplusplus + +#if defined QT_VERSION && QT_VERSION >= 0x040000 + if(!(opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) +#endif + opts->titlebarButtonAppearance=MODIFY_AGUA(opts->titlebarButtonAppearance); + opts->dwtAppearance=MODIFY_AGUA(opts->dwtAppearance); +#endif + if(opts->windowBorder&WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR && + (opts->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR || SHADE_WINDOW_BORDER==opts->shadeMenubars)) + opts->windowBorder-=WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR; + + if(APPEARANCE_FLAT==opts->tabAppearance) + opts->tabAppearance=APPEARANCE_RAISED; + if(EFFECT_NONE==opts->buttonEffect) + opts->etchEntry=false; + if(opts->colorSliderMouseOver && + (SHADE_NONE==opts->shadeSliders || SHADE_DARKEN==opts->shadeSliders)) + opts->colorSliderMouseOver=false; +#endif /* ndef CONFIG_DIALOG */ + + if(LINE_1DOT==opts->toolbarSeparators) + opts->toolbarSeparators=LINE_DOTS; +} + +#ifdef __cplusplus +static bool readConfig(const QString &file, Options *opts, Options *defOpts=0L) #else -static bool readConfig(const char *file, Options *opts, Options *def) +static bool readConfig(const char *file, Options *opts, Options *defOpts) #endif { #ifdef __cplusplus if(file.isEmpty()) { - const char *xdg=xdgConfigFolder(); + const char *env=getenv("QTCURVE_CONFIG_FILE"); - if(xdg) + if(NULL!=env) + return readConfig(env, opts, defOpts); + else { - QString filename(xdg); + const char *cfgDir=qtcConfDir(); - filename+="/"QTC_FILE; - return readConfig(filename, opts, def); + if(cfgDir) + { + QString filename(QFile::decodeName(cfgDir)+CONFIG_FILE); + + if(!QFile::exists(filename)) + filename=QFile::decodeName(cfgDir)+"../"OLD_CONFIG_FILE; + return readConfig(filename, opts, defOpts); + } } } #else if(!file) { - const char *xdg=xdgConfigFolder(); + const char *env=getenv("QTCURVE_CONFIG_FILE"); - if(xdg) + if(NULL!=env) + return readConfig(env, opts, defOpts); + else { - char filename[QTC_MAX_FILENAME_LEN]; + const char *cfgDir=qtcConfDir(); - sprintf(filename, "%s/"QTC_FILE, xdg); - return readConfig(filename, opts, def); + if(cfgDir) + { + char *filename=(char *)malloc(strlen(cfgDir)+strlen(OLD_CONFIG_FILE)+4); + bool rv=false; + + sprintf(filename, "%s"CONFIG_FILE, cfgDir); + if(!qtcFileExists(filename)) + sprintf(filename, "%s../"OLD_CONFIG_FILE, cfgDir); + rv=readConfig(filename, opts, defOpts); + free(filename); + return rv; + } } } #endif @@ -666,117 +1656,638 @@ static bool readConfig(const char *file, Options *opts, Options *def) if(cfg) { #endif - QTC_CFG_READ_NUM(passwordChar) - QTC_CFG_READ_ROUND(round) - QTC_CFG_READ_DI(highlightFactor) - QTC_CFG_READ_TB_BORDER(toolbarBorders) - QTC_CFG_READ_APPEARANCE(appearance, def->appearance) - QTC_CFG_READ_BOOL(fixParentlessDialogs) - QTC_CFG_READ_STRIPE(stripedProgress) - QTC_CFG_READ_SLIDER(sliderStyle) - QTC_CFG_READ_BOOL(animatedProgress) - QTC_CFG_READ_BOOL(lighterPopupMenuBgnd) - QTC_CFG_READ_BOOL(embolden) - QTC_CFG_READ_DEF_BTN(defBtnIndicator) - QTC_CFG_READ_LINE(sliderThumbs) - QTC_CFG_READ_LINE(handles) - QTC_CFG_READ_BOOL(highlightTab) - QTC_CFG_READ_BOOL(colorSelTab) - QTC_CFG_READ_SHADE(shadeSliders, false) - QTC_CFG_READ_SHADE(shadeMenubars, true) - QTC_CFG_READ_SHADE(shadeCheckRadio, false) - QTC_CFG_READ_APPEARANCE(menubarAppearance, def->menubarAppearance) - QTC_CFG_READ_APPEARANCE(menuitemAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(toolbarAppearance, def->toolbarAppearance) - QTC_CFG_READ_LINE(toolbarSeparators) - QTC_CFG_READ_LINE(splitters) - QTC_CFG_READ_BOOL(customMenuTextColor) - QTC_CFG_READ_MOUSE_OVER(coloredMouseOver) - QTC_CFG_READ_BOOL(menubarMouseOver) - QTC_CFG_READ_BOOL(shadeMenubarOnlyWhenActive) - QTC_CFG_READ_BOOL(thinnerMenuItems) - QTC_CFG_READ_COLOR(customSlidersColor) - QTC_CFG_READ_COLOR(customMenubarsColor) - QTC_CFG_READ_COLOR(customMenuSelTextColor) - QTC_CFG_READ_COLOR(customMenuNormTextColor) - QTC_CFG_READ_COLOR(customCheckRadioColor) - QTC_CFG_READ_SCROLLBAR(scrollbarType) - QTC_CFG_READ_EFFECT(buttonEffect) - QTC_CFG_READ_APPEARANCE(lvAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(tabAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(sliderAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(progressAppearance, opts->appearance) -#ifndef QTC_PLAIN_FOCUS_ONLY - QTC_CFG_READ_BOOL(stdFocus) -#endif - QTC_CFG_READ_BOOL(lvLines) - QTC_CFG_READ_BOOL(drawStatusBarFrames) - QTC_CFG_READ_BOOL(fillSlider) - QTC_CFG_READ_BOOL(roundMbTopOnly) - QTC_CFG_READ_BOOL(borderMenuitems) - QTC_CFG_READ_BOOL(gradientPbGroove) - QTC_CFG_READ_BOOL(darkerBorders) - QTC_CFG_READ_BOOL(vArrows) - QTC_CFG_READ_BOOL(xCheck) - QTC_CFG_READ_BOOL(framelessGroupBoxes) - QTC_CFG_READ_BOOL(inactiveHighlight) - QTC_CFG_READ_BOOL(colorMenubarMouseOver) + int i; + + opts->version=readVersionEntry(cfg, VERSION_KEY); + #ifdef __cplusplus - QTC_CFG_READ_BOOL(stdSidebarButtons) - QTC_CFG_READ_BOOL(gtkScrollViews) - QTC_CFG_READ_BOOL(gtkComboMenus) -/* + Options newOpts; + + if(defOpts) + newOpts=*defOpts; + else + defaultSettings(&newOpts); + + Options *def=&newOpts; + + if(opts!=def) + opts->customGradient=def->customGradient; + #else - QTC_CFG_READ_BOOL(setDialogButtonOrder) -*/ -#endif -#if !defined __cplusplus || defined QTC_CONFIG_DIALOG - QTC_CFG_READ_BOOL(mapKdeIcons) + Options newOpts; + Options *def=&newOpts; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + opts->noDlgFixApps=NULL; #endif -#if defined QTC_CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus - QTC_CFG_READ_BOOL(gtkButtonOrder) + opts->noBgndGradientApps=opts->noBgndOpacityApps=opts->noMenuBgndOpacityApps=opts->noBgndImageApps=opts->noMenuStripeApps=NULL; + for(i=0; icustomGradient[i]=NULL; + + if(defOpts) + copyOpts(defOpts, &newOpts); + else + defaultSettings(&newOpts); + if(opts!=def) + copyGradients(def, opts); #endif - QTC_CFG_READ_SHADING(shading, shading); -#ifndef __cplusplus - releaseConfig(cfg); + /* Check if the config file expects old default values... */ + if(opts->versiongroupBox=framelessGroupBoxes ? (groupBoxLine ? FRAME_LINE : FRAME_NONE) : FRAME_PLAIN; + opts->gbLabel=framelessGroupBoxes ? GB_LBL_BOLD : 0; + opts->gbFactor=0; + def->focus=FOCUS_LINE; + def->crHighlight=3; + } + else + { + CFG_READ_FRAME(groupBox) + CFG_READ_INT(gbLabel) + } + + if(opts->versionwindowBorder= + (readBoolEntry(cfg, "colorTitlebarOnly", def->windowBorder&WINDOW_BORDER_COLOR_TITLEBAR_ONLY) + ? WINDOW_BORDER_COLOR_TITLEBAR_ONLY : 0)+ + (readBoolEntry(cfg, "titlebarBorder", def->windowBorder&WINDOW_BORDER_ADD_LIGHT_BORDER) + ? WINDOW_BORDER_ADD_LIGHT_BORDER : 0)+ + (readBoolEntry(cfg, "titlebarBlend", def->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) + ? WINDOW_BORDER_BLEND_TITLEBAR : 0); + } + else + CFG_READ_INT(windowBorder); + + if(opts->versionsquare= + (readBoolEntry(cfg, "squareLvSelection", def->square&SQUARE_LISTVIEW_SELECTION) ? SQUARE_LISTVIEW_SELECTION : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareScrollViews", def->square&SQUARE_SCROLLVIEW) ? SQUARE_SCROLLVIEW : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareProgress", def->square&SQUARE_PROGRESS) ? SQUARE_PROGRESS : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareEntry", def->square&SQUARE_ENTRY)? SQUARE_ENTRY : SQUARE_NONE); + } + else + CFG_READ_INT(square) + + if(opts->versionsquare|=SQUARE_TOOLTIPS; + if(opts->versionsquare|=SQUARE_POPUP_MENUS; + if(opts->versioncrSize=CR_SMALL_SIZE; + if(opts->versionroundAllTabs=false; + def->smallRadio=false; + def->splitters=LINE_FLAT; + def->handles=LINE_SUNKEN; + def->crHighlight=0; +#ifdef __cplusplus + def->dwtAppearance=APPEARANCE_FLAT; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + def->dwtSettings=0; +#endif +#endif + def->inactiveTitlebarAppearance=APPEARANCE_CUSTOM2; + } + if(opts->versiondoubleGtkComboArrow=false; + if(opts->versionmenuStripeAppearance=APPEARANCE_GRADIENT; + def->etchEntry=true; + def->gtkScrollViews=false; + def->thinSbarGroove=false; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + def->titlebarButtons=TITLEBAR_BUTTON_HOVER_FRAME; + def->titlebarIcon=TITLEBAR_ICON_MENU_BUTTON; +#endif + } + if(opts->versiontabMouseOver=TAB_MO_BOTTOM; + def->activeTabAppearance=APPEARANCE_FLAT; + def->unifySpin=false; + def->unifyCombo=false; + def->borderTab=false; + def->thinnerBtns=false; + } + if(opts->versiontabMouseOver=TAB_MO_TOP; + def->sliderStyle=SLIDER_TRIANGULAR; +#ifdef __cplusplus + def->titlebarAlignment=ALIGN_LEFT; #endif - if(SHADE_SELECTED==opts->shadeCheckRadio) - opts->shadeCheckRadio=SHADE_BLEND_SELECTED; + } + if(opts->versiontitlebarAppearance=APPEARANCE_GRADIENT; + def->inactiveTitlebarAppearance=APPEARANCE_GRADIENT; + def->round=ROUND_FULL; + def->appearance=APPEARANCE_DULL_GLASS; + def->sliderAppearance=APPEARANCE_DULL_GLASS; + def->menuitemAppearance=APPEARANCE_DULL_GLASS; + def->useHighlightForMenu=true; + def->tabAppearance=APPEARANCE_GRADIENT; + def->highlightFactor=5; + def->toolbarSeparators=LINE_NONE; + def->menubarAppearance=APPEARANCE_SOFT_GRADIENT; + def->crButton=false; + def->customShades[0]=0; + def->stripedProgress=STRIPE_DIAGONAL; + def->sunkenAppearance=APPEARANCE_INVERTED; + def->focus=FOCUS_FILLED; + } + if(opts->versioncoloredMouseOver=MO_PLASTIK; + def->buttonEffect=EFFECT_NONE; + def->defBtnIndicator=IND_TINT; + def->vArrows=false; + def->toolbarAppearance=APPEARANCE_GRADIENT; + def->focus=FOCUS_STANDARD; + def->selectionAppearance=APPEARANCE_FLAT; + def->flatSbarButtons=false; + def->comboSplitter=true; + def->handles=LINE_DOTS; + def->lighterPopupMenuBgnd=15; + def->activeTabAppearance=APPEARANCE_GRADIENT; + def->gbLabel=GB_LBL_BOLD; + def->groupBox=FRAME_NONE; + def->shadeSliders=SHADE_BLEND_SELECTED; + def->progressGrooveColor=ECOLOR_BASE; + def->shadeMenubars=SHADE_DARKEN; + opts->highlightTab=true; + } - checkColor(&opts->shadeMenubars, &opts->customMenubarsColor); - checkColor(&opts->shadeSliders, &opts->customSlidersColor); - checkColor(&opts->shadeCheckRadio, &opts->customCheckRadioColor); + if(opts!=def) + { + opts->customShades[0]=0; + opts->customAlphas[0]=0; + if(USE_CUSTOM_SHADES(*def)) + memcpy(opts->customShades, def->customShades, sizeof(double)*NUM_STD_SHADES); + } - if(APPEARANCE_BEVELLED==opts->toolbarAppearance) - opts->toolbarAppearance=APPEARANCE_GRADIENT; - else if(APPEARANCE_RAISED==opts->toolbarAppearance) - opts->toolbarAppearance=APPEARANCE_FLAT; + CFG_READ_INT(gbFactor) + CFG_READ_INT(passwordChar) + CFG_READ_ROUND(round) + CFG_READ_INT(highlightFactor) + CFG_READ_INT(menuDelay) + CFG_READ_INT(sliderWidth) + CFG_READ_INT_BOOL(lighterPopupMenuBgnd, def->lighterPopupMenuBgnd) + CFG_READ_INT(tabBgnd) + CFG_READ_TB_BORDER(toolbarBorders) + CFG_READ_APPEARANCE(appearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(bgndAppearance, APP_ALLOW_STRIPED) + CFG_READ_GRAD_TYPE(bgndGrad) + CFG_READ_GRAD_TYPE(menuBgndGrad) + CFG_READ_APPEARANCE(menuBgndAppearance, APP_ALLOW_STRIPED) +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + CFG_READ_BOOL(fixParentlessDialogs) + CFG_READ_STRING_LIST(noDlgFixApps) +#endif + CFG_READ_STRIPE(stripedProgress) + CFG_READ_SLIDER(sliderStyle) + CFG_READ_BOOL(animatedProgress) + CFG_READ_BOOL(embolden) + CFG_READ_DEF_BTN(defBtnIndicator) + CFG_READ_LINE(sliderThumbs) + CFG_READ_LINE(handles) + CFG_READ_BOOL(highlightTab) + CFG_READ_INT_BOOL(colorSelTab, DEF_COLOR_SEL_TAB_FACTOR) + CFG_READ_BOOL(roundAllTabs) + CFG_READ_TAB_MO(tabMouseOver) + CFG_READ_SHADE(shadeSliders, true, false, &opts->customSlidersColor) + CFG_READ_SHADE(shadeMenubars, true, false, &opts->customMenubarsColor) + CFG_READ_SHADE(shadeCheckRadio, false, false, &opts->customCheckRadioColor) + CFG_READ_SHADE(sortedLv, true, false, &opts->customSortedLvColor) + CFG_READ_SHADE(crColor, true, false, &opts->customCrBgndColor) + CFG_READ_SHADE(progressColor, false, false, &opts->customProgressColor) + CFG_READ_APPEARANCE(menubarAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(menuitemAppearance, APP_ALLOW_FADE) + CFG_READ_APPEARANCE(toolbarAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(selectionAppearance, APP_ALLOW_BASIC) +#ifdef __cplusplus + CFG_READ_APPEARANCE(dwtAppearance, APP_ALLOW_BASIC) +#endif + CFG_READ_LINE(toolbarSeparators) + CFG_READ_LINE(splitters) + CFG_READ_BOOL(customMenuTextColor) + CFG_READ_MOUSE_OVER(coloredMouseOver) + CFG_READ_BOOL(menubarMouseOver) + CFG_READ_BOOL(useHighlightForMenu) + CFG_READ_BOOL(shadeMenubarOnlyWhenActive) + CFG_READ_BOOL(thinnerMenuItems) + CFG_READ_BOOL(thinnerBtns) + if(opts->versioncustomSlidersColor)) + CFG_READ_COLOR(customSlidersColor) + if(IS_BLACK(opts->customMenubarsColor)) + CFG_READ_COLOR(customMenubarsColor) + if(IS_BLACK(opts->customCheckRadioColor)) + CFG_READ_COLOR(customCheckRadioColor) + } + CFG_READ_COLOR(customMenuSelTextColor) + CFG_READ_COLOR(customMenuNormTextColor) + CFG_READ_SCROLLBAR(scrollbarType) + CFG_READ_EFFECT(buttonEffect) + CFG_READ_APPEARANCE(lvAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(tabAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(activeTabAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sliderAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(progressAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(progressGrooveAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(grooveAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sunkenAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sbarBgndAppearance, APP_ALLOW_BASIC) + if(opts->versiontooltipAppearance=APPEARANCE_FLAT; + else + { + CFG_READ_APPEARANCE(tooltipAppearance, APP_ALLOW_BASIC) + } - if(APPEARANCE_BEVELLED==opts->menubarAppearance) - opts->menubarAppearance=APPEARANCE_GRADIENT; - else if(APPEARANCE_RAISED==opts->menubarAppearance) - opts->menubarAppearance=APPEARANCE_FLAT; + if(opts->versionsliderFill=IS_FLAT(opts->appearance) ? opts->grooveAppearance : APPEARANCE_GRADIENT; + else + { + CFG_READ_APPEARANCE(sliderFill, APP_ALLOW_BASIC) + } + CFG_READ_ECOLOR(progressGrooveColor) + CFG_READ_FOCUS(focus) + CFG_READ_BOOL(lvButton) + CFG_READ_LV_LINES(lvLines) + CFG_READ_BOOL(drawStatusBarFrames) + CFG_READ_BOOL(fillSlider) + CFG_READ_BOOL(roundMbTopOnly) + CFG_READ_BOOL(borderMenuitems) + CFG_READ_BOOL(darkerBorders) + CFG_READ_BOOL(vArrows) + CFG_READ_BOOL(xCheck) +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + CFG_READ_BOOL(fadeLines) + CFG_READ_GLOW(glowProgress) +#endif + CFG_READ_BOOL(colorMenubarMouseOver) + CFG_READ_INT_BOOL(crHighlight, opts->highlightFactor) + CFG_READ_BOOL(crButton) + CFG_READ_BOOL(smallRadio) + CFG_READ_BOOL(fillProgress) + CFG_READ_BOOL(comboSplitter) + CFG_READ_BOOL(highlightScrollViews) + CFG_READ_BOOL(etchEntry) + CFG_READ_INT_BOOL(splitterHighlight, opts->highlightFactor) + CFG_READ_INT(crSize) + CFG_READ_BOOL(flatSbarButtons) + CFG_READ_BOOL(borderSbarGroove) + CFG_READ_BOOL(borderProgress) + CFG_READ_BOOL(popupBorder) + CFG_READ_BOOL(unifySpinBtns) + CFG_READ_BOOL(unifySpin) + CFG_READ_BOOL(unifyCombo) + CFG_READ_BOOL(borderTab) + CFG_READ_BOOL(borderInactiveTab) + CFG_READ_BOOL(thinSbarGroove) + CFG_READ_BOOL(colorSliderMouseOver) + CFG_READ_BOOL(menuIcons) + CFG_READ_BOOL(forceAlternateLvCols) + CFG_READ_BOOL(invertBotTab) + CFG_READ_INT_BOOL(menubarHiding, HIDE_KEYBOARD) + CFG_READ_INT_BOOL(statusbarHiding, HIDE_KEYBOARD) + CFG_READ_BOOL(boldProgress) + CFG_READ_BOOL(coloredTbarMo) + CFG_READ_BOOL(borderSelection) + CFG_READ_BOOL(stripedSbar) + CFG_READ_INT_BOOL(windowDrag, WM_DRAG_MENUBAR) + CFG_READ_BOOL(shadePopupMenu) + +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_BOOL(stdBtnSizes) + CFG_READ_INT(titlebarButtons) + CFG_READ_TB_ICON(titlebarIcon) +#endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_READ_BOOL(xbar) + CFG_READ_INT(dwtSettings) +#endif + CFG_READ_INT(bgndOpacity) + CFG_READ_INT(menuBgndOpacity) + CFG_READ_INT(dlgOpacity) + CFG_READ_SHADE(menuStripe, true, true, &opts->customMenuStripeColor) + CFG_READ_APPEARANCE(menuStripeAppearance, APP_ALLOW_BASIC) + if(opts->versioncustomMenuStripeColor)) + CFG_READ_COLOR(customMenuStripeColor) + CFG_READ_SHADE(comboBtn, true, false, &opts->customComboBtnColor); + CFG_READ_BOOL(gtkScrollViews) + CFG_READ_BOOL(doubleGtkComboArrow) + CFG_READ_BOOL(stdSidebarButtons) + CFG_READ_BOOL(toolbarTabs) +#ifdef __cplusplus + CFG_READ_ALIGN(titlebarAlignment) + CFG_READ_EFFECT(titlebarEffect) + CFG_READ_BOOL(gtkComboMenus) + CFG_READ_BOOL(centerTabText) +/* +#else + CFG_READ_BOOL(setDialogButtonOrder) +*/ +#endif +#if !defined __cplusplus || defined CONFIG_DIALOG + CFG_READ_INT(expanderHighlight) + CFG_READ_BOOL(mapKdeIcons) +#endif +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + CFG_READ_BOOL(gtkButtonOrder) +#endif +#if !defined __cplusplus || (defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_BOOL(reorderGtkButtons) +#endif + CFG_READ_APPEARANCE(titlebarAppearance, APP_ALLOW_NONE) + CFG_READ_APPEARANCE(inactiveTitlebarAppearance, APP_ALLOW_NONE) + + if(APPEARANCE_BEVELLED==opts->titlebarAppearance) + opts->titlebarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->titlebarAppearance) + opts->titlebarAppearance=APPEARANCE_FLAT; + if((opts->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) && !(opts->windowBorder&WINDOW_BORDER_COLOR_TITLEBAR_ONLY)) + opts->windowBorder-=WINDOW_BORDER_BLEND_TITLEBAR; + if(APPEARANCE_BEVELLED==opts->inactiveTitlebarAppearance) + opts->inactiveTitlebarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->inactiveTitlebarAppearance) + opts->inactiveTitlebarAppearance=APPEARANCE_FLAT; +#ifdef __cplusplus + CFG_READ_APPEARANCE(titlebarButtonAppearance, APP_ALLOW_BASIC) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + if(opts->xbar && opts->menubarHiding) + opts->xbar=false; +#endif +#endif + CFG_READ_SHADING(shading) + CFG_READ_IMAGE(bgndImage) + CFG_READ_IMAGE(menuBgndImage) + CFG_READ_STRING_LIST(noMenuStripeApps) +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_STRING_LIST(noBgndGradientApps) + CFG_READ_STRING_LIST(noBgndOpacityApps) + CFG_READ_STRING_LIST(noMenuBgndOpacityApps) + CFG_READ_STRING_LIST(noBgndImageApps) +#endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_READ_STRING_LIST(menubarApps) + CFG_READ_STRING_LIST(statusbarApps) + CFG_READ_STRING_LIST(useQtFileDialogApps) + CFG_READ_STRING_LIST(windowDragWhiteList) + CFG_READ_STRING_LIST(windowDragBlackList) +#endif + readDoubleList(cfg, "customShades", opts->customShades, NUM_STD_SHADES); + readDoubleList(cfg, "customAlphas", opts->customAlphas, NUM_STD_ALPHAS); + +#ifdef __cplusplus +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if(opts->titlebarButtons&TITLEBAR_BUTTON_COLOR || opts->titlebarButtons&TITLEBAR_BUTTON_ICON_COLOR) + { +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList cols(readStringEntry(cfg, "titlebarButtonColors").split(',', QString::SkipEmptyParts)); +#else + QStringList cols(QStringList::split(',', readStringEntry(cfg, "titlebarButtonColors"))); +#endif + if(cols.count() && 0==(cols.count()%NUM_TITLEBAR_BUTTONS) && cols.count()<=(NUM_TITLEBAR_BUTTONS*3)) + { + QStringList::ConstIterator it(cols.begin()), + end(cols.end()); + + for(int i=0; it!=end; ++it, ++i) + { + QColor col; + setRgb(&col, TO_LATIN1((*it))); + opts->titlebarButtonColors[i]=col; + } + if(cols.count()<(NUM_TITLEBAR_BUTTONS+1)) + opts->titlebarButtons&=~TITLEBAR_BUTTON_ICON_COLOR; + } + else + { + opts->titlebarButtons&=~TITLEBAR_BUTTON_COLOR; + opts->titlebarButtons&=~TITLEBAR_BUTTON_ICON_COLOR; + } + } +#endif - if(APPEARANCE_BEVELLED==opts->sliderAppearance) - opts->sliderAppearance=APPEARANCE_GRADIENT; + for(i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + { + QString gradKey; - if(APPEARANCE_BEVELLED==opts->tabAppearance) - opts->tabAppearance=APPEARANCE_GRADIENT; + gradKey.sprintf("customgradient%d", (i-APPEARANCE_CUSTOM1)+1); - if(opts->highlightFactor<((100.0+MIN_HIGHLIGHT_FACTOR)/100.0) || - opts->highlightFactor>((100.0+MAX_HIGHLIGHT_FACTOR)/100.0)) - opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList vals(readStringEntry(cfg, gradKey).split(',', QString::SkipEmptyParts)); +#else + QStringList vals(QStringList::split(',', readStringEntry(cfg, gradKey))); +#endif - if(opts->animatedProgress && !opts->stripedProgress) - opts->animatedProgress=false; + if(vals.size()) + opts->customGradient.erase((EAppearance)i); + + if(vals.size()>=5) + { + QStringList::ConstIterator it(vals.begin()), + end(vals.end()); + bool ok(true), + haveAlpha(false); + Gradient grad; + int j; + + grad.border=toGradientBorder(TO_LATIN1((*it)), &haveAlpha); + ok=vals.size()%(haveAlpha ? 3 : 2); + + for(++it, j=0; it!=end && ok; ++it, ++j) + { + double pos=(*it).toDouble(&ok), + val=ok ? (*(++it)).toDouble(&ok) : 0.0, + alpha=haveAlpha && ok ? (*(++it)).toDouble(&ok) : 1.0; + + ok=ok && (pos>=0 && pos<=1.0) && (val>=0.0 && val<=2.0) && (alpha>=0.0 && alpha<=1.0); + + if(ok) + grad.stops.insert(GradientStop(pos, val, alpha)); + } + + if(ok) + { + opts->customGradient[(EAppearance)i]=grad; + opts->customGradient[(EAppearance)i].stops=grad.stops.fix(); + } + } + } +#else + for(i=0; icustomGradient[i]) + { + if(opts->customGradient[i]->stops) + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=0L; + } + + if(comma>=4) + { + char *c=strchr(str, ','); + + if(c) + { + bool haveAlpha=false; + EGradientBorder border=toGradientBorder(str, &haveAlpha); + int parts=haveAlpha ? 3 : 2; + bool ok=0==comma%parts; + + *c='\0'; + + if(ok) + { + opts->customGradient[i]=malloc(sizeof(Gradient)); + opts->customGradient[i]->numStops=comma/parts; + opts->customGradient[i]->stops=malloc(sizeof(GradientStop) * opts->customGradient[i]->numStops); + opts->customGradient[i]->border=border; + str=c+1; + for(j=0; jcustomGradient[i]->stops[stop].pos=g_ascii_strtod(str, NULL); + str=c+1; + c=str ? strchr(str, ',') : 0L; + + if(c || str) + { + if(c) + *c='\0'; + opts->customGradient[i]->stops[stop].val=g_ascii_strtod(str, NULL); + str=c ? c+1 : c; + if(haveAlpha) + { + c=str ? strchr(str, ',') : 0L; + if(c || str) + { + if(c) + *c='\0'; + opts->customGradient[i]->stops[stop].alpha=g_ascii_strtod(str, NULL); + str=c ? c+1 : c; + } + else + ok=false; + } + else + opts->customGradient[i]->stops[stop].alpha=1.0; + } + else + ok=false; + } + else + ok=false; + + ok=ok && + (opts->customGradient[i]->stops[stop].pos>=0 && opts->customGradient[i]->stops[stop].pos<=1.0) && + (opts->customGradient[i]->stops[stop].val>=0.0 && opts->customGradient[i]->stops[stop].val<=2.0) && + (opts->customGradient[i]->stops[stop].alpha>=0.0 && opts->customGradient[i]->stops[stop].alpha<=1.0); + } + + if(ok) + { + int addStart=0, + addEnd=0; + if(opts->customGradient[i]->stops[0].pos>0.001) + addStart=1; + if(opts->customGradient[i]->stops[opts->customGradient[i]->numStops-1].pos<0.999) + addEnd=1; + + if(addStart || addEnd) + { + int newSize=opts->customGradient[i]->numStops+addStart+addEnd; + GradientStop *stops=malloc(sizeof(GradientStop) * newSize); + + if(addStart) + { + stops[0].pos=0.0; + stops[0].val=1.0; + stops[0].alpha=1.0; + } + memcpy(&stops[addStart], opts->customGradient[i]->stops, sizeof(GradientStop) * opts->customGradient[i]->numStops); + if(addEnd) + { + stops[opts->customGradient[i]->numStops+addStart].pos=1.0; + stops[opts->customGradient[i]->numStops+addStart].val=1.0; + stops[opts->customGradient[i]->numStops+addStart].alpha=1.0; + } + opts->customGradient[i]->numStops=newSize; + free(opts->customGradient[i]->stops); + opts->customGradient[i]->stops=stops; + } + } + else + { + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=0L; + } + } + } + } + } + } +#endif - if(opts->colorSelTab && APPEARANCE_GRADIENT!=opts->tabAppearance) - opts->colorSelTab=false; + checkConfig(opts); - if(SHADE_CUSTOM==opts->shadeMenubars || SHADE_BLEND_SELECTED==opts->shadeMenubars || !opts->borderMenuitems) - opts->colorMenubarMouseOver=true; +#ifndef __cplusplus + if(!defOpts) + { + int i; + for(i=0; icustomGradient[i]) + free(def->customGradient[i]); + } + releaseConfig(cfg); + freeOpts(defOpts); +#endif + return true; + } + else + { +#ifdef __cplusplus + if(defOpts) + *opts=*defOpts; + else + defaultSettings(opts); +#else + if(defOpts) + copyOpts(defOpts, opts); + else + defaultSettings(opts); +#endif return true; } } @@ -793,7 +2304,7 @@ static bool fileExists(const char *path) static const char * getSystemConfigFile() { - static const char * constFiles[]={ "/etc/qt4/"QTC_FILE, "/etc/qt3/"QTC_FILE, "/etc/qt/"QTC_FILE, NULL }; + static const char * constFiles[]={ /*"/etc/qt4/"OLD_CONFIG_FILE, "/etc/qt3/"OLD_CONFIG_FILE, "/etc/qt/"OLD_CONFIG_FILE,*/ "/etc/"OLD_CONFIG_FILE, NULL }; int i; @@ -806,70 +2317,199 @@ static const char * getSystemConfigFile() static void defaultSettings(Options *opts) { /* Set hard-coded defaults... */ +#ifndef __cplusplus + int i; + + for(i=0; icustomGradient[i]=0L; + opts->customGradient[APPEARANCE_CUSTOM1]=malloc(sizeof(Gradient)); + opts->customGradient[APPEARANCE_CUSTOM2]=malloc(sizeof(Gradient)); + setupGradient(opts->customGradient[APPEARANCE_CUSTOM1], GB_3D,3,0.0,1.2,0.5,1.0,1.0,1.0); + setupGradient(opts->customGradient[APPEARANCE_CUSTOM2], GB_3D,3,0.0,0.9,0.5,1.0,1.0,1.0); +#else + // Setup titlebar gradients... + setupGradient(&(opts->customGradient[APPEARANCE_CUSTOM1]), GB_3D,3,0.0,1.2,0.5,1.0,1.0,1.0); + setupGradient(&(opts->customGradient[APPEARANCE_CUSTOM2]), GB_3D,3,0.0,0.9,0.5,1.0,1.0,1.0); +#endif + opts->customShades[0]=1.16; + opts->customShades[1]=1.07; + opts->customShades[2]=0.9; + opts->customShades[3]=0.78; + opts->customShades[4]=0.84; + opts->customShades[5]=0.75; + opts->customAlphas[0]=0; opts->contrast=7; opts->passwordChar=0x25CF; + opts->gbFactor=DEF_GB_FACTOR; opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; + opts->crHighlight=DEFAULT_CR_HIGHLIGHT_FACTOR; + opts->splitterHighlight=DEFAULT_SPLITTER_HIGHLIGHT_FACTOR; + opts->crSize=CR_LARGE_SIZE; + opts->menuDelay=DEFAULT_MENU_DELAY; + opts->sliderWidth=DEFAULT_SLIDER_WIDTH; + opts->selectionAppearance=APPEARANCE_HARSH_GRADIENT; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + opts->round=ROUND_EXTRA; + opts->fadeLines=true; + opts->glowProgress=GLOW_NONE; + opts->gtkButtonOrder=false; +#else opts->round=ROUND_FULL; - opts->lighterPopupMenuBgnd=true; - opts->animatedProgress=true; - opts->stripedProgress=STRIPE_DIAGONAL; - opts->sliderStyle=SLIDER_TRIANGULAR; - opts->highlightTab=true; - opts->colorSelTab=false; +#endif +#ifdef __cplusplus + opts->dwtAppearance=APPEARANCE_CUSTOM1; +#endif +#if !defined __cplusplus || (defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION >= 0x040000)) + opts->reorderGtkButtons=false; +#endif + opts->bgndImage.type=IMG_NONE; + opts->menuBgndImage.type=IMG_NONE; + opts->lighterPopupMenuBgnd=DEF_POPUPMENU_LIGHT_FACTOR; + opts->tabBgnd=DEF_TAB_BGND; + opts->animatedProgress=false; + opts->stripedProgress=STRIPE_NONE; + opts->sliderStyle=SLIDER_PLAIN; + opts->highlightTab=false; + opts->colorSelTab=0; + opts->roundAllTabs=true; + opts->tabMouseOver=TAB_MO_GLOW; opts->embolden=false; - opts->appearance=APPEARANCE_DULL_GLASS; + opts->bgndGrad=GT_HORIZ; + opts->menuBgndGrad=GT_HORIZ; + opts->appearance=APPEARANCE_SOFT_GRADIENT; + opts->bgndAppearance=APPEARANCE_FLAT; + opts->menuBgndAppearance=APPEARANCE_FLAT; opts->lvAppearance=APPEARANCE_BEVELLED; - opts->tabAppearance=APPEARANCE_GRADIENT; - opts->sliderAppearance=APPEARANCE_DULL_GLASS; - opts->menubarAppearance=APPEARANCE_GRADIENT; - opts->menuitemAppearance=APPEARANCE_DULL_GLASS; + opts->tabAppearance=APPEARANCE_SOFT_GRADIENT; + opts->activeTabAppearance=APPEARANCE_SOFT_GRADIENT; + opts->sliderAppearance=APPEARANCE_SOFT_GRADIENT; + opts->menubarAppearance=APPEARANCE_FLAT; + opts->menuitemAppearance=APPEARANCE_FADE; opts->toolbarAppearance=APPEARANCE_FLAT; opts->progressAppearance=APPEARANCE_DULL_GLASS; - opts->defBtnIndicator=IND_COLORED; + opts->progressGrooveAppearance=APPEARANCE_INVERTED; + opts->progressGrooveColor=ECOLOR_DARK; + opts->grooveAppearance=APPEARANCE_INVERTED; + opts->sunkenAppearance=APPEARANCE_SOFT_GRADIENT; + opts->sbarBgndAppearance=APPEARANCE_FLAT; + opts->tooltipAppearance=APPEARANCE_GRADIENT; + opts->sliderFill=APPEARANCE_GRADIENT; + opts->defBtnIndicator=IND_GLOW; opts->sliderThumbs=LINE_FLAT; - opts->handles=LINE_SUNKEN; - opts->shadeSliders=SHADE_BLEND_SELECTED; + opts->handles=LINE_1DOT; + opts->shadeSliders=SHADE_NONE; opts->shadeMenubars=SHADE_NONE; opts->shadeCheckRadio=SHADE_NONE; + opts->sortedLv=SHADE_NONE; opts->toolbarBorders=TB_NONE; - opts->toolbarSeparators=LINE_NONE; - opts->splitters=LINE_FLAT; + opts->toolbarSeparators=LINE_SUNKEN; + opts->splitters=LINE_1DOT; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT opts->fixParentlessDialogs=false; +#ifdef __cplusplus + opts->noDlgFixApps << "kate" << "plasma" << "plasma-desktop" << "plasma-netbook"; +#else + opts->noDlgFixApps=NULL; +#endif +#endif opts->customMenuTextColor=false; - opts->coloredMouseOver=MO_PLASTIK; + opts->coloredMouseOver=MO_GLOW; opts->menubarMouseOver=true; - opts->shadeMenubarOnlyWhenActive=true; + opts->useHighlightForMenu=false; + opts->shadeMenubarOnlyWhenActive=false; opts->thinnerMenuItems=false; + opts->thinnerBtns=true; opts->scrollbarType=SCROLLBAR_KDE; - opts->buttonEffect=EFFECT_NONE; -#ifndef QTC_PLAIN_FOCUS_ONLY - opts->stdFocus=true; -#endif - opts->lvLines=false; + opts->buttonEffect=EFFECT_SHADOW; + opts->focus=FOCUS_GLOW; + opts->lvButton=false; + opts->lvLines=LV_NONE; opts->drawStatusBarFrames=false; opts->fillSlider=true; opts->roundMbTopOnly=true; - opts->borderMenuitems=true; - opts->gradientPbGroove=true; + opts->borderMenuitems=false; opts->darkerBorders=false; - opts->vArrows=false; + opts->vArrows=true; opts->xCheck=false; - opts->framelessGroupBoxes=false; - opts->colorMenubarMouseOver=false; - opts->inactiveHighlight=false; -#ifdef QTC_CONFIG_DIALOG - opts->shading=SHADING_HSL; + opts->colorMenubarMouseOver=true; + opts->crButton=true; + opts->crColor=SHADE_NONE; + opts->progressColor=SHADE_SELECTED; + opts->smallRadio=true; + opts->fillProgress=true; + opts->comboSplitter=false; + opts->highlightScrollViews=false; + opts->etchEntry=false; + opts->flatSbarButtons=true; + opts->borderSbarGroove=true; + opts->borderProgress=true; + opts->popupBorder=true; + opts->unifySpinBtns=false; + opts->unifySpin=true; + opts->unifyCombo=true; + opts->borderTab=true; + opts->borderInactiveTab=false; + opts->thinSbarGroove=true; + opts->colorSliderMouseOver=false; + opts->menuIcons=true; + opts->forceAlternateLvCols=false; + opts->invertBotTab=true; + opts->menubarHiding=HIDE_NONE; + opts->statusbarHiding=HIDE_NONE; + opts->boldProgress=true; + opts->coloredTbarMo=false; + opts->borderSelection=false; + opts->square=SQUARE_POPUP_MENUS; + opts->stripedSbar=false; + opts->windowDrag=WM_DRAG_NONE; + opts->shadePopupMenu=false; + opts->windowBorder=WINDOW_BORDER_ADD_LIGHT_BORDER; + opts->groupBox=FRAME_FADED; + opts->gbFactor=DEF_GB_FACTOR; + opts->gbLabel=GB_LBL_BOLD|GB_LBL_OUTSIDE; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + opts->stdBtnSizes=false; + opts->titlebarButtons=TITLEBAR_BUTTON_ROUND|TITLEBAR_BUTTON_HOVER_SYMBOL; + opts->titlebarIcon=TITLEBAR_ICON_NEXT_TO_TITLE; #endif -#ifdef __cplusplus + opts->menuStripe=SHADE_NONE; + opts->menuStripeAppearance=APPEARANCE_DARK_INVERTED; + opts->shading=SHADING_HSL; + opts->gtkScrollViews=true; + opts->comboBtn=SHADE_NONE; + opts->doubleGtkComboArrow=true; opts->stdSidebarButtons=false; - opts->gtkScrollViews=false; + opts->toolbarTabs=false; + opts->bgndOpacity=opts->dlgOpacity=opts->menuBgndOpacity=100; +#ifdef __cplusplus opts->gtkComboMenus=false; opts->customMenubarsColor.setRgb(0, 0, 0); opts->customSlidersColor.setRgb(0, 0, 0); opts->customMenuNormTextColor.setRgb(0, 0, 0); opts->customMenuSelTextColor.setRgb(0, 0, 0); opts->customCheckRadioColor.setRgb(0, 0, 0); + opts->customComboBtnColor.setRgb(0, 0, 0); + opts->customMenuStripeColor.setRgb(0, 0, 0); + opts->customProgressColor.setRgb(0, 0, 0); + opts->titlebarAlignment=ALIGN_FULL_CENTER; + opts->titlebarEffect=EFFECT_SHADOW; + opts->centerTabText=false; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + opts->xbar=false; + opts->dwtSettings=DWT_BUTTONS_AS_PER_TITLEBAR|DWT_ROUND_TOP_ONLY; + opts->menubarApps << "amarok" << "arora" << "kaffeine" << "kcalc" << "smplayer" << "VirtualBox"; + opts->statusbarApps << "kde"; + opts->useQtFileDialogApps << "googleearth-bin"; + opts->noMenuBgndOpacityApps << "inkscape" << "inkscape" << "sonata" << "totem"; + opts->noBgndOpacityApps << "smplayer" << "kaffeine" << "dragon" << "kscreenlocker" << "inkscape" << "inkscape" << "sonata" << "totem"; +#endif + opts->noMenuStripeApps << "gtk" << "soffice.bin"; #else + opts->noBgndGradientApps=NULL; + opts->noBgndOpacityApps=g_strsplit("inkscape,sonata,totem",",", -1);; + opts->noBgndImageApps=NULL; + opts->noMenuStripeApps=g_strsplit("gtk",",", -1); + opts->noMenuBgndOpacityApps=g_strsplit("inkscape,sonata,totem",",", -1); /* opts->setDialogButtonOrder=false; */ @@ -878,15 +2518,20 @@ static void defaultSettings(Options *opts) opts->customMenuNormTextColor.red=opts->customMenuNormTextColor.green=opts->customMenuNormTextColor.blue=0; opts->customMenuSelTextColor.red=opts->customMenuSelTextColor.green=opts->customMenuSelTextColor.blue=0; opts->customCheckRadioColor.red=opts->customCheckRadioColor.green=opts->customCheckRadioColor.blue=0; + opts->customComboBtnColor.red=opts->customCheckRadioColor.green=opts->customCheckRadioColor.blue=0; + opts->customMenuStripeColor.red=opts->customMenuStripeColor.green=opts->customMenuStripeColor.blue=0; + opts->customProgressColor.red=opts->customProgressColor.green=opts->customProgressColor.blue=0; #endif -#if !defined __cplusplus || defined QTC_CONFIG_DIALOG +#if !defined __cplusplus || defined CONFIG_DIALOG opts->mapKdeIcons=true; + opts->expanderHighlight=DEFAULT_EXPANDER_HIGHLIGHT_FACTOR; #endif -#if defined QTC_CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus - opts->gtkButtonOrder=false; + opts->titlebarAppearance=APPEARANCE_CUSTOM1; + opts->inactiveTitlebarAppearance=APPEARANCE_CUSTOM1; +#ifdef __cplusplus + opts->titlebarButtonAppearance=APPEARANCE_GRADIENT; #endif - /* Read system config file... */ { static const char * systemFilename=NULL; @@ -897,6 +2542,11 @@ static void defaultSettings(Options *opts) if(systemFilename) readConfig(systemFilename, opts, opts); } + +#if !defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION < 0x040000) + if(FOCUS_FILLED==opts->focus) + opts->focus=FOCUS_FULL; +#endif } #endif @@ -912,19 +2562,31 @@ static const char *toStr(EDefBtnIndicator ind) return "fontcolor"; case IND_CORNER: return "corner"; + case IND_TINT: + return "tint"; + case IND_GLOW: + return "glow"; + case IND_DARKEN: + return "darken"; + case IND_SELECTED: + return "origselected"; default: return "colored"; } } -static const char *toStr(ELine ind, bool none) +static const char *toStr(ELine ind, bool dashes) { switch(ind) { + case LINE_1DOT: + return "1dot"; case LINE_DOTS: return "dots"; case LINE_DASHES: - return none ? "none" : "dashes"; + return dashes ? "dashes" : "none"; + case LINE_NONE: + return "none"; case LINE_FLAT: return "flat"; default: @@ -955,14 +2617,18 @@ static const char *toStr(EMouseOver mo) { case MO_COLORED: return "colored"; + case MO_COLORED_THICK: + return "thickcolored"; case MO_NONE: return "none"; + case MO_GLOW: + return "glow"; default: return "plastik"; } } -static const char *toStr(EAppearance exp) +static QString toStr(EAppearance exp, EAppAllow allow) { switch(exp) { @@ -970,22 +2636,56 @@ static const char *toStr(EAppearance exp) return "flat"; case APPEARANCE_RAISED: return "raised"; + case APPEARANCE_DULL_GLASS: + return "dullglass"; + case APPEARANCE_SHINY_GLASS: + return "shinyglass"; + case APPEARANCE_AGUA: + return "agua"; + case APPEARANCE_SOFT_GRADIENT: + return "soft"; case APPEARANCE_GRADIENT: return "gradient"; + case APPEARANCE_HARSH_GRADIENT: + return "harsh"; + case APPEARANCE_INVERTED: + return "inverted"; + case APPEARANCE_DARK_INVERTED: + return "darkinverted"; case APPEARANCE_SPLIT_GRADIENT: return "splitgradient"; - case APPEARANCE_DULL_GLASS: - return "dullglass"; case APPEARANCE_BEVELLED: return "bevelled"; - case APPEARANCE_INVERTED: - return "inverted"; + case APPEARANCE_FADE: + switch(allow) + { + case APP_ALLOW_BASIC: // Should not get here! + case APP_ALLOW_FADE: + return "fade"; + case APP_ALLOW_STRIPED: + return "striped"; + case APP_ALLOW_NONE: + return "none"; + } default: - return "shinyglass"; + { + QString app; + + app.sprintf("customgradient%d", (exp-APPEARANCE_CUSTOM1)+1); + return app; + } } } -static const char *toStr(EShade exp, bool dark, bool convertBlendSelToSel) +static QString toStr(const QColor &col) +{ + QString colorStr; + + colorStr.sprintf("#%02X%02X%02X", col.red(), col.green(), col.blue()); + return colorStr; +} + +static QString toStr(EShade exp, const QColor &col) { switch(exp) { @@ -993,12 +2693,15 @@ static const char *toStr(EShade exp, bool dark, bool convertBlendSelToSel) case SHADE_NONE: return "none"; case SHADE_BLEND_SELECTED: - return dark || !convertBlendSelToSel ? "selected" : "origselected"; + return "selected"; case SHADE_CUSTOM: - return "custom"; - /* case SHADE_SELECTED */ + return toStr(col); + case SHADE_SELECTED: + return "origselected"; case SHADE_DARKEN: - return dark ? "darken" : "origselected"; + return "darken"; + case SHADE_WINDOW_BORDER: + return "wborder"; } } @@ -1010,6 +2713,10 @@ static const char *toStr(ERound exp) return "none"; case ROUND_SLIGHT: return "slight"; + case ROUND_EXTRA: + return "extra"; + case ROUND_MAX: + return "max"; default: case ROUND_FULL: return "full"; @@ -1034,6 +2741,24 @@ static const char *toStr(EScrollbar sb) } } +static const char *toStr(EFrame sb) +{ + switch(sb) + { + case FRAME_NONE: + return "none"; + case FRAME_PLAIN: + return "plain"; + case FRAME_LINE: + return "line"; + case FRAME_SHADED: + return "shaded"; + case FRAME_FADED: + default: + return "faded"; + } +} + static const char *toStr(EEffect e) { switch(e) @@ -1050,14 +2775,6 @@ static const char *toStr(EEffect e) inline const char * toStr(bool b) { return b ? "true" : "false"; } -static QString toStr(const QColor &col) -{ - QString colorStr; - - colorStr.sprintf("#%02X%02X%02X", col.red(), col.green(), col.blue()); - return colorStr; -} - static const char *toStr(EShading s) { switch(s) @@ -1069,6 +2786,8 @@ static const char *toStr(EShading s) return "hsl"; case SHADING_HSV: return "hsv"; + case SHADING_HCY: + return "hcy"; } } @@ -1083,6 +2802,8 @@ static const char *toStr(EStripe s) return "none"; case STRIPE_DIAGONAL: return "diagonal"; + case STRIPE_FADE: + return "fade"; } } @@ -1094,13 +2815,176 @@ static const char *toStr(ESliderStyle s) return "plain"; case SLIDER_TRIANGULAR: return "triangular"; + case SLIDER_ROUND_ROTATED: + return "r-round"; + case SLIDER_PLAIN_ROTATED: + return "r-plain"; + case SLIDER_CIRCULAR: + return "circular"; default: case SLIDER_ROUND: return "round"; } } +static const char *toStr(EColor s) +{ + switch(s) + { + case ECOLOR_BACKGROUND: + return "background"; + case ECOLOR_DARK: + return "dark"; + default: + case ECOLOR_BASE: + return "base"; + } +} + +static const char *toStr(EFocus f) +{ + switch(f) + { + default: + case FOCUS_STANDARD: + return "standard"; + case FOCUS_RECTANGLE: + return "rect"; + case FOCUS_FILLED: + return "filled"; + case FOCUS_FULL: + return "full"; + case FOCUS_LINE: + return "line"; + case FOCUS_GLOW: + return "glow"; + } +} + +static const char *toStr(ETabMo f) +{ + switch(f) + { + default: + case TAB_MO_BOTTOM: + return "bot"; + case TAB_MO_TOP: + return "top"; + case TAB_MO_GLOW: + return "glow"; + } +} + +static const char *toStr(EGradientBorder g) +{ + switch(g) + { + case GB_NONE: + return "none"; + case GB_LIGHT: + return "light"; + case GB_3D_FULL: + return "3dfull"; + case GB_SHINE: + return "shine"; + default: + case GB_3D: + return "3d"; + } +} + +static const char *toStr(EAlign ind) +{ + switch(ind) + { + default: + case ALIGN_LEFT: + return "left"; + case ALIGN_CENTER: + return "center"; + case ALIGN_FULL_CENTER: + return "center-full"; + case ALIGN_RIGHT: + return "right"; + } +} + +static const char * toStr(ETitleBarIcon icn) +{ + switch(icn) + { + case TITLEBAR_ICON_NONE: + return "none"; + default: + case TITLEBAR_ICON_MENU_BUTTON: + return "menu"; + case TITLEBAR_ICON_NEXT_TO_TITLE: + return "title"; + } +} + +static const char * toStr(EGradType gt) +{ + switch(gt) + { + case GT_VERT: + return "vert"; + default: + case GT_HORIZ: + return "horiz"; + } +} + +static const char * toStr(ELvLines lv) +{ + switch(lv) + { + case LV_NEW: + return "new"; + case LV_OLD: + return "old"; + default: + case LV_NONE: + return "none"; + } +} + +static const char * toStr(EImageType lv) +{ + switch(lv) + { + default: + case IMG_NONE: + return "none"; + case IMG_PLAIN_RINGS: + return "plainrings"; + case IMG_BORDERED_RINGS: + return "rings"; + case IMG_SQUARE_RINGS: + return "squarerings"; + case IMG_FILE: + return "file"; + } +} + +static const char * toStr(EGlow lv) +{ + switch(lv) + { + default: + case GLOW_NONE: + return "none"; + case GLOW_START: + return "start"; + case GLOW_MIDDLE: + return "middle"; + case GLOW_END: + return "end"; + } +} + #if QT_VERSION >= 0x040000 +#include #define CFG config #else #define CFG (*cfg) @@ -1112,124 +2996,362 @@ static const char *toStr(ESliderStyle s) else \ CFG.writeEntry(#ENTRY, toStr(opts.ENTRY)); -#define CFG_WRITE_ENTRY_FORCE(ENTRY) \ - CFG.writeEntry(#ENTRY, toStr(opts.ENTRY)); - +#define CFG_WRITE_APPEARANCE_ENTRY(ENTRY, ALLOW) \ + if (!exportingStyle && def.ENTRY==opts.ENTRY) \ + CFG.deleteEntry(#ENTRY); \ + else \ + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, ALLOW)); + #define CFG_WRITE_ENTRY_B(ENTRY, B) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, B)); -#define CFG_WRITE_ENTRY_SHADE(ENTRY, DARK, CONVERT_SHADE) \ +#define CFG_WRITE_ENTRY_NUM(ENTRY) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, DARK, CONVERT_SHADE)); + CFG.writeEntry(#ENTRY, opts.ENTRY); -#define CFG_WRITE_ENTRY_D(ENTRY) \ +#define CFG_WRITE_SHADE_ENTRY(ENTRY, COL) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, ((int)(opts.ENTRY*100))-100); + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, opts.COL)); -#define CFG_WRITE_ENTRY_NUM(ENTRY) \ +#define CFG_WRITE_IMAGE_ENTRY(ENTRY) \ + if (!exportingStyle && def.ENTRY.type==opts.ENTRY.type) \ + CFG.deleteEntry(#ENTRY); \ + else \ + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY.type)); \ + if(IMG_FILE!=opts.ENTRY.type) \ + { \ + CFG.deleteEntry(#ENTRY ".file"); \ + CFG.deleteEntry(#ENTRY ".width"); \ + CFG.deleteEntry(#ENTRY ".height"); \ + } \ + else \ + { \ + CFG.writeEntry(#ENTRY ".file", opts.ENTRY.file); \ + CFG.writeEntry(#ENTRY ".width", opts.ENTRY.width); \ + CFG.writeEntry(#ENTRY ".height", opts.ENTRY.height); \ + } + +#define CFG_WRITE_STRING_LIST_ENTRY(ENTRY) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, opts.ENTRY); + CFG.writeEntry(#ENTRY, QStringList(opts.ENTRY.toList()).join(",")); \ bool static writeConfig(KConfig *cfg, const Options &opts, const Options &def, bool exportingStyle=false) { if(!cfg) { - const char *xdg=xdgConfigFolder(); + const char *cfgDir=qtcConfDir(); - if(xdg) + if(cfgDir) { - char filename[QTC_MAX_FILENAME_LEN]; - - sprintf(filename, "%s/"QTC_FILE, xdg); - #if QT_VERSION >= 0x040000 - KConfig defCfg(filename, KConfig::SimpleConfig); + KConfig defCfg(QFile::decodeName(cfgDir)+CONFIG_FILE, KConfig::SimpleConfig); #else - KConfig defCfg(filename, false, false); + KConfig defCfg(QFile::decodeName(cfgDir)+CONFIG_FILE, false, false); #endif - return writeConfig(&defCfg, opts, def, exportingStyle); + if(writeConfig(&defCfg, opts, def, exportingStyle)) + { + const char *oldFiles[]={ OLD_CONFIG_FILE, "qtcurve.gtk-icons", 0}; + + for(int i=0; oldFiles[i]; ++i) + { + QString oldFileName(QFile::decodeName(cfgDir)+QString("../")+oldFiles[i]); + + if(QFile::exists(oldFileName)) + QFile::remove(oldFileName); + } + } } } else { #if QT_VERSION >= 0x040000 - KConfigGroup config(cfg, QTC_GROUP); + KConfigGroup config(cfg, SETTINGS_GROUP); #else - cfg->setGroup(QTC_GROUP); + cfg->setGroup(SETTINGS_GROUP); #endif + CFG.writeEntry(VERSION_KEY, VERSION); CFG_WRITE_ENTRY_NUM(passwordChar) + CFG_WRITE_ENTRY_NUM(gbFactor) CFG_WRITE_ENTRY(round) - CFG_WRITE_ENTRY_D(highlightFactor) + CFG_WRITE_ENTRY_NUM(highlightFactor) + CFG_WRITE_ENTRY_NUM(menuDelay) + CFG_WRITE_ENTRY_NUM(sliderWidth) CFG_WRITE_ENTRY(toolbarBorders) - CFG_WRITE_ENTRY_FORCE(appearance) + CFG_WRITE_APPEARANCE_ENTRY(appearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(bgndAppearance, APP_ALLOW_STRIPED) + CFG_WRITE_ENTRY(bgndGrad) + CFG_WRITE_ENTRY(menuBgndGrad) + CFG_WRITE_APPEARANCE_ENTRY(menuBgndAppearance, APP_ALLOW_STRIPED) +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT CFG_WRITE_ENTRY(fixParentlessDialogs) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_STRING_LIST_ENTRY(noDlgFixApps) +#endif +#endif CFG_WRITE_ENTRY(stripedProgress) CFG_WRITE_ENTRY(sliderStyle) CFG_WRITE_ENTRY(animatedProgress) - CFG_WRITE_ENTRY(lighterPopupMenuBgnd) + CFG_WRITE_ENTRY_NUM(lighterPopupMenuBgnd) + CFG_WRITE_ENTRY_NUM(tabBgnd) CFG_WRITE_ENTRY(embolden) CFG_WRITE_ENTRY(defBtnIndicator) - CFG_WRITE_ENTRY_B(sliderThumbs, true) - CFG_WRITE_ENTRY_B(handles, false) + CFG_WRITE_ENTRY_B(sliderThumbs, false) + CFG_WRITE_ENTRY_B(handles, true) CFG_WRITE_ENTRY(highlightTab) - CFG_WRITE_ENTRY(colorSelTab) - CFG_WRITE_ENTRY_SHADE(shadeSliders, false, false) - CFG_WRITE_ENTRY_SHADE(shadeMenubars, true, false) - CFG_WRITE_ENTRY_SHADE(shadeCheckRadio, false, true) - CFG_WRITE_ENTRY_FORCE(menubarAppearance) - CFG_WRITE_ENTRY_FORCE(menuitemAppearance) - CFG_WRITE_ENTRY_FORCE(toolbarAppearance) - CFG_WRITE_ENTRY_B(toolbarSeparators, true) - CFG_WRITE_ENTRY_B(splitters, false) + CFG_WRITE_ENTRY_NUM(colorSelTab) + CFG_WRITE_ENTRY(roundAllTabs) + CFG_WRITE_ENTRY(tabMouseOver) + CFG_WRITE_APPEARANCE_ENTRY(menubarAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(menuitemAppearance, APP_ALLOW_FADE) + CFG_WRITE_APPEARANCE_ENTRY(toolbarAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(selectionAppearance, APP_ALLOW_BASIC) +#ifdef __cplusplus + CFG_WRITE_APPEARANCE_ENTRY(dwtAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY(titlebarEffect) +#endif + CFG_WRITE_APPEARANCE_ENTRY(menuStripeAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY_B(toolbarSeparators, false) + CFG_WRITE_ENTRY_B(splitters, true) CFG_WRITE_ENTRY(customMenuTextColor) CFG_WRITE_ENTRY(coloredMouseOver) CFG_WRITE_ENTRY(menubarMouseOver) + CFG_WRITE_ENTRY(useHighlightForMenu) CFG_WRITE_ENTRY(shadeMenubarOnlyWhenActive) CFG_WRITE_ENTRY(thinnerMenuItems) - CFG_WRITE_ENTRY(customSlidersColor) - CFG_WRITE_ENTRY(customMenubarsColor) + CFG_WRITE_ENTRY(thinnerBtns) + CFG_WRITE_SHADE_ENTRY(shadeSliders, customSlidersColor) + CFG_WRITE_SHADE_ENTRY(shadeMenubars, customMenubarsColor) + CFG_WRITE_SHADE_ENTRY(sortedLv, customSortedLvColor) CFG_WRITE_ENTRY(customMenuSelTextColor) CFG_WRITE_ENTRY(customMenuNormTextColor) - CFG_WRITE_ENTRY(customCheckRadioColor) + CFG_WRITE_SHADE_ENTRY(shadeCheckRadio, customCheckRadioColor) CFG_WRITE_ENTRY(scrollbarType) CFG_WRITE_ENTRY(buttonEffect) - CFG_WRITE_ENTRY_FORCE(lvAppearance) - CFG_WRITE_ENTRY_FORCE(tabAppearance) - CFG_WRITE_ENTRY_FORCE(sliderAppearance) - CFG_WRITE_ENTRY_FORCE(progressAppearance) -#ifndef QTC_PLAIN_FOCUS_ONLY - CFG_WRITE_ENTRY(stdFocus) -#endif + CFG_WRITE_APPEARANCE_ENTRY(lvAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(tabAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(activeTabAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sliderAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(progressAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(progressGrooveAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(grooveAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sunkenAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sbarBgndAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(tooltipAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY(sliderFill) + CFG_WRITE_ENTRY(progressGrooveColor) + CFG_WRITE_ENTRY(focus) + CFG_WRITE_ENTRY(lvButton) CFG_WRITE_ENTRY(lvLines) CFG_WRITE_ENTRY(drawStatusBarFrames) CFG_WRITE_ENTRY(fillSlider) CFG_WRITE_ENTRY(roundMbTopOnly) CFG_WRITE_ENTRY(borderMenuitems) - CFG_WRITE_ENTRY(gradientPbGroove) CFG_WRITE_ENTRY(darkerBorders) CFG_WRITE_ENTRY(vArrows) CFG_WRITE_ENTRY(xCheck) - CFG_WRITE_ENTRY(framelessGroupBoxes) - CFG_WRITE_ENTRY(inactiveHighlight) -#ifdef __cplusplus - CFG_WRITE_ENTRY(stdSidebarButtons) + CFG_WRITE_ENTRY(groupBox) + CFG_WRITE_ENTRY_NUM(gbLabel) + CFG_WRITE_ENTRY(fadeLines) + CFG_WRITE_ENTRY(glowProgress) + CFG_WRITE_IMAGE_ENTRY(bgndImage) + CFG_WRITE_IMAGE_ENTRY(menuBgndImage) + CFG_WRITE_ENTRY(colorMenubarMouseOver) + CFG_WRITE_ENTRY_NUM(crHighlight) + CFG_WRITE_ENTRY(crButton) + CFG_WRITE_SHADE_ENTRY(crColor, customCrBgndColor) + CFG_WRITE_SHADE_ENTRY(progressColor, customProgressColor) + CFG_WRITE_ENTRY(smallRadio) + CFG_WRITE_ENTRY(fillProgress) + CFG_WRITE_ENTRY(comboSplitter) + CFG_WRITE_ENTRY(highlightScrollViews) + CFG_WRITE_ENTRY(etchEntry) + CFG_WRITE_ENTRY_NUM(splitterHighlight) + CFG_WRITE_ENTRY_NUM(expanderHighlight) + CFG_WRITE_ENTRY_NUM(crSize) + CFG_WRITE_ENTRY(flatSbarButtons) + CFG_WRITE_ENTRY(borderSbarGroove) + CFG_WRITE_ENTRY(borderProgress) + CFG_WRITE_ENTRY(popupBorder) + CFG_WRITE_ENTRY(unifySpinBtns) + CFG_WRITE_ENTRY(unifySpin) + CFG_WRITE_ENTRY(unifyCombo) + CFG_WRITE_ENTRY(borderTab) + CFG_WRITE_ENTRY(borderInactiveTab) + CFG_WRITE_ENTRY(thinSbarGroove) + CFG_WRITE_ENTRY(colorSliderMouseOver) + CFG_WRITE_ENTRY(menuIcons) + CFG_WRITE_ENTRY(forceAlternateLvCols) + CFG_WRITE_ENTRY_NUM(square) + CFG_WRITE_ENTRY(invertBotTab) + CFG_WRITE_ENTRY_NUM(menubarHiding) + CFG_WRITE_ENTRY_NUM(statusbarHiding) + CFG_WRITE_ENTRY(boldProgress) + CFG_WRITE_ENTRY(coloredTbarMo) + CFG_WRITE_ENTRY(borderSelection) + CFG_WRITE_ENTRY(stripedSbar) + CFG_WRITE_ENTRY_NUM(windowDrag) + CFG_WRITE_ENTRY(shadePopupMenu) + CFG_WRITE_ENTRY_NUM(windowBorder) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_ENTRY(xbar) + CFG_WRITE_ENTRY_NUM(dwtSettings) #endif - + CFG_WRITE_ENTRY_NUM(bgndOpacity) + CFG_WRITE_ENTRY_NUM(menuBgndOpacity) + CFG_WRITE_ENTRY_NUM(dlgOpacity) +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_WRITE_ENTRY(stdBtnSizes) + CFG_WRITE_ENTRY_NUM(titlebarButtons) + CFG_WRITE_ENTRY(titlebarIcon) + + if((opts.titlebarButtons&TITLEBAR_BUTTON_COLOR || opts.titlebarButtons&TITLEBAR_BUTTON_ICON_COLOR) && + opts.titlebarButtonColors.size() && 0==(opts.titlebarButtonColors.size()%NUM_TITLEBAR_BUTTONS)) + { + QString val; +#if QT_VERSION >= 0x040000 + QTextStream str(&val); +#else + QTextStream str(&val, IO_WriteOnly); +#endif + for(unsigned int i=0; i= 0x040000)) + CFG_WRITE_ENTRY(reorderGtkButtons) +#endif CFG_WRITE_ENTRY(mapKdeIcons) CFG_WRITE_ENTRY(shading) + CFG_WRITE_ENTRY(titlebarAlignment) + CFG_WRITE_ENTRY(centerTabText) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_STRING_LIST_ENTRY(noBgndGradientApps) + CFG_WRITE_STRING_LIST_ENTRY(noBgndOpacityApps) + CFG_WRITE_STRING_LIST_ENTRY(noMenuBgndOpacityApps) + CFG_WRITE_STRING_LIST_ENTRY(noBgndImageApps) + CFG_WRITE_STRING_LIST_ENTRY(noMenuStripeApps) + CFG_WRITE_STRING_LIST_ENTRY(menubarApps) + CFG_WRITE_STRING_LIST_ENTRY(statusbarApps) + CFG_WRITE_STRING_LIST_ENTRY(useQtFileDialogApps) +#endif + + for(int i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + { + GradientCont::const_iterator cg(opts.customGradient.find((EAppearance)i)); + QString gradKey; + + gradKey.sprintf("customgradient%d", (i-APPEARANCE_CUSTOM1)+1); + + if(cg==opts.customGradient.end()) + CFG.deleteEntry(gradKey); + else + { + GradientCont::const_iterator d; + + if(exportingStyle || (d=def.customGradient.find((EAppearance)i))==def.customGradient.end() || !((*d)==(*cg))) + { + QString gradVal; +#if QT_VERSION >= 0x040000 + QTextStream str(&gradVal); +#else + QTextStream str(&gradVal, IO_WriteOnly); +#endif + GradientStopCont stops((*cg).second.stops.fix()); + GradientStopCont::const_iterator it(stops.begin()), + end(stops.end()); + bool haveAlpha(false); + + for(; it!=end && !haveAlpha; ++it) + if((*it).alpha<1.0) + haveAlpha=true; + + str << toStr((*cg).second.border); + if(haveAlpha) + str << "-alpha"; + + for(it=stops.begin(); it!=end; ++it) + if(haveAlpha) + str << ',' << (*it).pos << ',' << (*it).val << ',' << (*it).alpha; + else + str << ',' << (*it).pos << ',' << (*it).val; + CFG.writeEntry(gradKey, gradVal); + } + else + CFG.deleteEntry(gradKey); + } + } + + if(opts.customShades[0]==0 || + exportingStyle || + opts.customShades[0]!=def.customShades[0] || + opts.customShades[1]!=def.customShades[1] || + opts.customShades[2]!=def.customShades[2] || + opts.customShades[3]!=def.customShades[3] || + opts.customShades[4]!=def.customShades[4] || + opts.customShades[5]!=def.customShades[5]) + { + QString shadeVal; +#if QT_VERSION >= 0x040000 + QTextStream str(&shadeVal); +#else + QTextStream str(&shadeVal, IO_WriteOnly); +#endif + if(0==opts.customShades[0]) + str << 0; + else + for(int i=0; isync(); return true; } diff --git a/common/dot.png b/common/dot.png new file mode 100644 index 0000000..c1ba664 Binary files /dev/null and b/common/dot.png differ diff --git a/common/radio_inner.png b/common/radio_inner.png new file mode 100644 index 0000000..94201cd Binary files /dev/null and b/common/radio_inner.png differ diff --git a/common/radio_on.png b/common/radio_on.png index 22236ac..7584dbf 100644 Binary files a/common/radio_on.png and b/common/radio_on.png differ diff --git a/common/radio_on_small.png b/common/radio_on_small.png new file mode 100644 index 0000000..72dc158 Binary files /dev/null and b/common/radio_on_small.png differ diff --git a/config.h.cmake b/config.h.cmake index 0ecd358..05fb811 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -4,4 +4,10 @@ #define VERSION "@QTCURVE_VERSION_FULL@" #define KDE3PREFIX "@KDE3PREFIX@" #define KDE4PREFIX "@KDE4PREFIX@" + +#cmakedefine QTC_QT_ONLY +#cmakedefine QTC_DEFAULT_TO_KDE3 +#cmakedefine QTC_STYLE_SUPPORT +#cmakedefine QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + #endif diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt index b9b391f..3c02ea9 100644 --- a/config/CMakeLists.txt +++ b/config/CMakeLists.txt @@ -1,7 +1,12 @@ -set(kstyle_qtcurve_config_PART_SRCS qtcurveconfig.cpp exportthemedialog.cpp) +if (QTC_STYLE_SUPPORT) + set(kstyle_qtcurve_config_PART_SRCS qtcurveconfig.cpp exportthemedialog.cpp) +else (QTC_STYLE_SUPPORT) + set(kstyle_qtcurve_config_PART_SRCS qtcurveconfig.cpp) +endif (QTC_STYLE_SUPPORT) + include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/common ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR}) kde3_add_ui_files(kstyle_qtcurve_config_PART_SRCS qtcurveconfigbase.ui) kde3_add_kpart(kstyle_qtcurve_config ${kstyle_qtcurve_config_PART_SRCS}) kde3_automoc(${kstyle_qtcurve_config_PART_SRCS}) -target_link_libraries(kstyle_qtcurve_config ${KDE3_KDEUI_LIBS} ${KDE3_KIO_LIBS} ${KDE3_KDECORE_LIBS} ${QT_QTGUI_LIBRARY}) +target_link_libraries(kstyle_qtcurve_config ${QT_AND_KDECORE_LIBS} kio kdeui) install(TARGETS kstyle_qtcurve_config DESTINATION ${KDE3_LIB_DIR}/kde3) diff --git a/config/exportthemedialog.cpp b/config/exportthemedialog.cpp index 4d1eaf1..a677cb8 100644 --- a/config/exportthemedialog.cpp +++ b/config/exportthemedialog.cpp @@ -1,5 +1,5 @@ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -64,7 +64,7 @@ void CExportThemeDialog::slotOk() KMessageBox::error(this, i18n("Name is empty!")); else { - QString fileName(themeUrl->url()+"/"QTC_THEME_PREFIX+name+".themerc"); + QString fileName(themeUrl->url()+"/"THEME_PREFIX+name+".themerc"); KConfig cfg(fileName, false, false); bool rv(!cfg.isReadOnly()); @@ -75,7 +75,7 @@ void CExportThemeDialog::slotOk() cfg.writeEntry("Name", themeName->text().stripWhiteSpace()); cfg.writeEntry("Comment", themeComment->text()); cfg.setGroup("KDE"); - cfg.writeEntry("WidgetStyle", QTC_THEME_PREFIX+name); + cfg.writeEntry("WidgetStyle", THEME_PREFIX+name); rv=writeConfig(&cfg, opts, opts, true); } diff --git a/config/exportthemedialog.h b/config/exportthemedialog.h index 0301b9e..2657dd3 100644 --- a/config/exportthemedialog.h +++ b/config/exportthemedialog.h @@ -2,7 +2,7 @@ #define __EXPORT_THEME_DIALOG_H__ /* - QtCurve (C) Craig Drummond, 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2007 - 2010 craig.p.drummond@gmail.com ---- @@ -22,7 +22,7 @@ */ #include -#define QTC_CONFIG_DIALOG +#define CONFIG_DIALOG #include "common.h" class KURLRequester; diff --git a/config/qtcurveconfig.cpp b/config/qtcurveconfig.cpp index b9b36a6..b08fa2d 100644 --- a/config/qtcurveconfig.cpp +++ b/config/qtcurveconfig.cpp @@ -1,5 +1,5 @@ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -19,7 +19,9 @@ */ #include "qtcurveconfig.h" +#ifdef QTC_STYLE_SUPPORT #include "exportthemedialog.h" +#endif #include #include #include @@ -30,6 +32,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include #include @@ -39,23 +46,100 @@ #include #include #include +#include +#include +#include +#include +#include #include +#include #include "config.h" #define CONFIG_READ #define CONFIG_WRITE #include "config_file.c" -#define QTC_EXTENSION ".qtcurve" +#define EXTENSION ".qtcurve" extern "C" { QWidget * allocate_kstyle_config(QWidget *parent) { - KGlobal::locale()->insertCatalogue("kstyle_qtcurve_config"); + KGlobal::locale()->insertCatalogue("qtcurve"); return new QtCurveConfig(parent); } } +static void drawGradient(const QColor &top, const QColor &bot, bool increase, + QPainter *p, QRect const &r, bool horiz) +{ + if(r.width()>0 && r.height()>0) + { + if(top==bot) + p->fillRect(r, top); + else + { + int rh(r.height()), rw(r.width()), + rTop(top.red()), gTop(top.green()), bTop(top.blue()), + rx, ry, rx2, ry2, + size(horiz ? rh : rw); + + r.coords(&rx, &ry, &rx2, &ry2); + + register int rl(rTop << 16); + register int gl(gTop << 16); + register int bl(bTop << 16); + register int i; + + int dr(((1<<16) * (bot.red() - rTop)) / size), + dg(((1<<16) * (bot.green() - gTop)) / size), + db(((1<<16) * (bot.blue() - bTop)) / size); + + if(increase) + if(horiz) + { + for (i=0; i < size; i++) + { + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx, ry+i, rx2, ry+i); + rl += dr; + gl += dg; + bl += db; + } + } + else + for(i=0; i < size; i++) + { + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx+i, ry, rx+i, ry2); + rl += dr; + gl += dg; + bl += db; + } + else + if(horiz) + { + for(i=size-1; i>=0; i--) + { + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx, ry+i, rx2, ry+i); + rl += dr; + gl += dg; + bl += db; + } + } + else + for(i=size-1; i>=0; i--) + { + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx+i, ry, rx+i, ry2); + rl += dr; + gl += dg; + bl += db; + } + } + } +} + class CharSelectDialog : public KDialogBase { public: @@ -79,54 +163,268 @@ class CharSelectDialog : public KDialogBase KCharSelect *itsSelector; }; +class CStackItem : public QListViewItem +{ + public: + + CStackItem(QListView *p, const QString &text, int s) + : QListViewItem(p, text), + stackId(s) + { + } + + int compare(QListViewItem *i, int, bool) const + { + int b=((CStackItem *)i)->stackId; + + return stackId==b + ? 0 + : stackId1.0)) || (1==col && (val<0.0 || val>2.0))) + { + setText(col, prevStr); + startRename(col); + } + } + + int compare(QListViewItem *i, int col, bool) const + { + double a(text(col).toDouble()), + b(i->text(col).toDouble()); + + return equal(a, b) + ? 0 + : acurrentShading(); + + for(int i=0; it!=end; ++it, ++i) + { + if(0==i) + { + lastPos=(int)(((*it).pos*size)+0.5); + shade(&opts, color, &bot, (*it).val); + } + else + { + QColor top(bot); + int pos((int)(((*it).pos*size)+0.5)); + + shade(&opts, color, &bot, (*it).val); + drawGradient(top, bot, true, &p, + horiz + ? QRect(r.x(), lastPos, r.width(), pos-lastPos) + : QRect(lastPos, r.y(), pos-lastPos, r.height()), + horiz); + lastPos=pos; + } + } + } + else + p.fillRect(r, color); + p.end(); +} + +void CGradientPreview::setGrad(const GradientStopCont &s) +{ + stops=s; + repaint(); +} + +void CGradientPreview::setColor(const QColor &col) +{ + if(col!=color) + { + color=col; + repaint(); + } +} + static int toInt(const QString &str) { return str.length()>1 ? str[0].unicode() : 0; } -static void insertShadeEntries(QComboBox *combo, bool withDarken, bool checkRadio=false) +enum ShadeWidget { - combo->insertItem(checkRadio ? i18n("Text") - : withDarken ? i18n("Background") - : i18n("Button")); - combo->insertItem(i18n("Custom:")); + SW_MENUBAR, + SW_SLIDER, + SW_CHECK_RADIO, + SW_MENU_STRIPE, + SW_COMBO, + SW_LV_HEADER +}; - if(checkRadio) // For check/radio, we dont blend, and dont allow darken - combo->insertItem(i18n("Selected background")); - else if(withDarken) +static void insertShadeEntries(QComboBox *combo, ShadeWidget sw) +{ + switch(sw) { - // For menubars we dont actually blend... - combo->insertItem(i18n("Selected background")); - combo->insertItem(i18n("Darken")); + case SW_MENUBAR: + combo->insertItem(i18n("Background")); + break; + case SW_COMBO: + case SW_SLIDER: + combo->insertItem(i18n("Button")); + break; + case SW_CHECK_RADIO: + combo->insertItem(i18n("Text")); + break; + case SW_LV_HEADER: + case SW_MENU_STRIPE: + combo->insertItem(i18n("None")); + break; } - else + + combo->insertItem(i18n("Custom:")); + combo->insertItem(i18n("Selected background")); + if(SW_CHECK_RADIO!=sw) // For check/radio, we dont blend, and dont allow darken { combo->insertItem(i18n("Blended selected background")); - combo->insertItem(i18n("Selected background")); + combo->insertItem(SW_MENU_STRIPE==sw ? i18n("Menu background") : i18n("Darken")); } + + if(SW_MENUBAR==sw) + combo->insertItem(i18n("Titlebar border")); } -static void insertAppearanceEntries(QComboBox *combo, bool all=true) +static void insertAppearanceEntries(QComboBox *combo, bool split=true, bool bev=true, bool fade=false, bool striped=false) { + for(int i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + combo->insertItem(i18n("Custom gradient %1").arg((i-APPEARANCE_CUSTOM1)+1)); + combo->insertItem(i18n("Flat")); combo->insertItem(i18n("Raised")); combo->insertItem(i18n("Dull glass")); combo->insertItem(i18n("Shiny glass")); - combo->insertItem(i18n("Gradient")); + combo->insertItem(i18n("Agua")); + combo->insertItem(i18n("Soft gradient")); + combo->insertItem(i18n("Standard gradient")); + combo->insertItem(i18n("Harsh gradient")); combo->insertItem(i18n("Inverted gradient")); - if(all) + combo->insertItem(i18n("Dark inverted gradient")); + if(split) { combo->insertItem(i18n("Split gradient")); - combo->insertItem(i18n("Bevelled")); + if(bev) + { + combo->insertItem(i18n("Bevelled")); + if(fade) + combo->insertItem(i18n("Fade out (popup menuitems)")); + else if(striped) + combo->insertItem(i18n("Striped")); + } } } -static void insertLineEntries(QComboBox *combo, bool none) +static void insertLineEntries(QComboBox *combo, bool singleDot, bool dashes) { + combo->insertItem(i18n("None")); combo->insertItem(i18n("Sunken lines")); combo->insertItem(i18n("Flat lines")); combo->insertItem(i18n("Dots")); - combo->insertItem(none ? i18n("None") : i18n("Dashes")); + if(singleDot) + { + combo->insertItem(i18n("Single dot (KDE4 & Gtk2 Only)")); + if(dashes) + combo->insertItem(i18n("Dashes")); + } } static void insertDefBtnEntries(QComboBox *combo) @@ -134,15 +432,19 @@ static void insertDefBtnEntries(QComboBox *combo) combo->insertItem(i18n("Corner indicator")); combo->insertItem(i18n("Font color thin border")); combo->insertItem(i18n("Selected background thick border")); - combo->insertItem(i18n("None")); + combo->insertItem(i18n("Selected background tinting")); + combo->insertItem(i18n("A slight glow")); + combo->insertItem(i18n("Darken")); + combo->insertItem(i18n("Use selected background color")); + combo->insertItem(i18n("No indicator")); } static void insertScrollbarEntries(QComboBox *combo) { combo->insertItem(i18n("KDE")); - combo->insertItem(i18n("Windows")); + combo->insertItem(i18n("MS Windows")); combo->insertItem(i18n("Platinum")); - combo->insertItem(i18n("Next")); + combo->insertItem(i18n("NeXT")); combo->insertItem(i18n("No buttons")); } @@ -151,13 +453,17 @@ static void insertRoundEntries(QComboBox *combo) combo->insertItem(i18n("Square")); combo->insertItem(i18n("Slightly rounded")); combo->insertItem(i18n("Fully rounded")); + combo->insertItem(i18n("Extra rounded (KDE4 & Gtk2)")); + combo->insertItem(i18n("Max rounded (KDE4 & Gtk2)")); } static void insertMouseOverEntries(QComboBox *combo) { combo->insertItem(i18n("No coloration")); combo->insertItem(i18n("Color border")); + combo->insertItem(i18n("Thick color border")); combo->insertItem(i18n("Plastik style")); + combo->insertItem(i18n("Glow")); } static void insertToolbarBorderEntries(QComboBox *combo) @@ -181,42 +487,120 @@ static void insertShadingEntries(QComboBox *combo) combo->insertItem(i18n("Simple")); combo->insertItem(i18n("Use HSL color space")); combo->insertItem(i18n("Use HSV color space")); + combo->insertItem(i18n("Use HCY color space")); } static void insertStripeEntries(QComboBox *combo) { combo->insertItem(i18n("Plain")); - combo->insertItem(i18n("Striped")); + combo->insertItem(i18n("Stripes")); combo->insertItem(i18n("Diagonal stripes")); + combo->insertItem(i18n("Faded stripes")); } static void insertSliderStyleEntries(QComboBox *combo) { combo->insertItem(i18n("Plain")); combo->insertItem(i18n("Round")); + combo->insertItem(i18n("Plain - rotated")); + combo->insertItem(i18n("Round - rotated")); combo->insertItem(i18n("Triangular")); + combo->insertItem(i18n("Circular")); +} + +static void insertEColorEntries(QComboBox *combo) +{ + combo->insertItem(i18n("Base color")); + combo->insertItem(i18n("Background color")); + combo->insertItem(i18n("Darkened background color")); +} + +static void insertFocusEntries(QComboBox *combo) +{ + combo->insertItem(i18n("Standard (dotted)")); + combo->insertItem(i18n("Highlight color")); + combo->insertItem(i18n("Highlight color (full size)")); + combo->insertItem(i18n("Highlight color, full, and fill (Gtk2 & KDE4 only)")); + combo->insertItem(i18n("Line drawn with highlight color")); +} + +static void insertGradBorderEntries(QComboBox *combo) +{ + combo->insertItem(i18n("No border")); + combo->insertItem(i18n("Light border")); + combo->insertItem(i18n("3D border (light only)")); + combo->insertItem(i18n("3D border (dark and light)")); + combo->insertItem(i18n("Shine")); +} + +static void insertAlignEntries(QComboBox *combo) +{ + combo->insertItem(i18n("Left")); + combo->insertItem(i18n("Center (between controls)")); + combo->insertItem(i18n("Center (full width)")); + combo->insertItem(i18n("Right")); +} + +static void insertTabMoEntriess(QComboBox *combo) +{ + combo->insertItem(i18n("Highlight on top")); + combo->insertItem(i18n("Highlight on bottom")); + combo->insertItem(i18n("Add a slight glow")); +} + +static void insertGradTypeEntries(QComboBox *combo) +{ + combo->insertItem(i18n("Top to bottom")); + combo->insertItem(i18n("Left to right")); +} + +static void insertLvLinesEntries(QComboBox *combo) +{ + combo->insertItem(i18n("None")); + combo->insertItem(i18n("New style (KDE and Gtk2 similar)")); + combo->insertItem(i18n("Old style (KDE and Gtk2 different)")); } QtCurveConfig::QtCurveConfig(QWidget *parent) : QtCurveConfigBase(parent), - exportDialog(NULL) +#ifdef QTC_STYLE_SUPPORT + exportDialog(NULL), +#endif + gradPreview(NULL), + lastCategory(NULL) { - titleLabel->setText("QtCurve " VERSION " - (C) Craig Drummond, 2003-2007"); - insertShadeEntries(shadeSliders, false); - insertShadeEntries(shadeMenubars, true); - insertShadeEntries(shadeCheckRadio, false, true); + titleLabel->setText("QtCurve " VERSION " - (C) Craig Drummond, 2003-2009"); + insertShadeEntries(shadeSliders, SW_SLIDER); + insertShadeEntries(shadeMenubars, SW_MENUBAR); + insertShadeEntries(shadeCheckRadio, SW_CHECK_RADIO); + insertShadeEntries(menuStripe, SW_MENU_STRIPE); + insertShadeEntries(comboBtn, SW_COMBO); + insertShadeEntries(sortedLv, SW_LV_HEADER); insertAppearanceEntries(appearance); insertAppearanceEntries(menubarAppearance); insertAppearanceEntries(toolbarAppearance); insertAppearanceEntries(lvAppearance); insertAppearanceEntries(sliderAppearance); - insertAppearanceEntries(tabAppearance, false); + insertAppearanceEntries(tabAppearance, false, false); + insertAppearanceEntries(activeTabAppearance, false, false); insertAppearanceEntries(progressAppearance); - insertAppearanceEntries(menuitemAppearance); - insertLineEntries(handles, false); - insertLineEntries(sliderThumbs, true); - insertLineEntries(toolbarSeparators, true); - insertLineEntries(splitters, false); + insertAppearanceEntries(progressGrooveAppearance); + insertAppearanceEntries(grooveAppearance); + insertAppearanceEntries(sunkenAppearance); + insertAppearanceEntries(menuitemAppearance, true, true, true); + insertAppearanceEntries(titlebarAppearance, true, false); + insertAppearanceEntries(inactiveTitlebarAppearance, true, false); + insertAppearanceEntries(titlebarButtonAppearance); + insertAppearanceEntries(selectionAppearance, true, false); + insertAppearanceEntries(menuStripeAppearance, true, false); + insertAppearanceEntries(sbarBgndAppearance); + insertAppearanceEntries(sliderFill); + insertAppearanceEntries(menuBgndAppearance, true, true, false, true); + insertAppearanceEntries(dwtAppearance); + insertLineEntries(handles, true, true); + insertLineEntries(sliderThumbs, true, false); + insertLineEntries(toolbarSeparators, false, false); + insertLineEntries(splitters, true, true); insertDefBtnEntries(defBtnIndicator); insertScrollbarEntries(scrollbarType); insertRoundEntries(round); @@ -226,58 +610,118 @@ QtCurveConfig::QtCurveConfig(QWidget *parent) insertShadingEntries(shading); insertStripeEntries(stripedProgress); insertSliderStyleEntries(sliderStyle); - - highlightFactor->setMinValue(MIN_HIGHLIGHT_FACTOR); - highlightFactor->setMaxValue(MAX_HIGHLIGHT_FACTOR); - highlightFactor->setValue(((int)(DEFAULT_HIGHLIGHT_FACTOR*100))-100); - - connect(lighterPopupMenuBgnd, SIGNAL(toggled(bool)), SLOT(updateChanged())); - connect(round, SIGNAL(activated(int)), SLOT(updateChanged())); + insertEColorEntries(progressGrooveColor); + insertFocusEntries(focus); + insertGradBorderEntries(gradBorder); + insertAlignEntries(titlebarAlignment); + insertTabMoEntriess(tabMouseOver); + insertGradTypeEntries(menuBgndGrad); + insertLvLinesEntries(lvLines); + + highlightFactor->setRange(MIN_HIGHLIGHT_FACTOR, MAX_HIGHLIGHT_FACTOR); + highlightFactor->setValue(DEFAULT_HIGHLIGHT_FACTOR); + + crHighlight->setRange(MIN_HIGHLIGHT_FACTOR, MAX_HIGHLIGHT_FACTOR); + crHighlight->setValue(DEFAULT_CR_HIGHLIGHT_FACTOR); + + splitterHighlight->setRange(MIN_HIGHLIGHT_FACTOR, MAX_HIGHLIGHT_FACTOR); + splitterHighlight->setValue(DEFAULT_SPLITTER_HIGHLIGHT_FACTOR); + + lighterPopupMenuBgnd->setRange(MIN_LIGHTER_POPUP_MENU, MAX_LIGHTER_POPUP_MENU, 1, false); + lighterPopupMenuBgnd->setValue(DEF_POPUPMENU_LIGHT_FACTOR); + + menuDelay->setRange(MIN_MENU_DELAY, MAX_MENU_DELAY, 1, false); + menuDelay->setValue(DEFAULT_MENU_DELAY); + + sliderWidth->setRange(MIN_SLIDER_WIDTH, MAX_SLIDER_WIDTH, 2, false); + sliderWidth->setValue(DEFAULT_SLIDER_WIDTH); + sliderWidth->setSuffix(i18n(" pixels")); + + tabBgnd->setRange(MIN_TAB_BGND, MAX_TAB_BGND, 1, false); + tabBgnd->setValue(DEF_TAB_BGND); + + colorSelTab->setRange(MIN_COLOR_SEL_TAB_FACTOR, MAX_COLOR_SEL_TAB_FACTOR, 5, false); + colorSelTab->setValue(DEF_COLOR_SEL_TAB_FACTOR); + + connect(lighterPopupMenuBgnd, SIGNAL(valueChanged(int)), SLOT(updateChanged())); + connect(tabBgnd, SIGNAL(valueChanged(int)), SLOT(updateChanged())); + connect(menuDelay, SIGNAL(valueChanged(int)), SLOT(updateChanged())); + connect(sliderWidth, SIGNAL(valueChanged(int)), SLOT(sliderWidthChanged())); + connect(menuStripe, SIGNAL(activated(int)), SLOT(menuStripeChanged())); + connect(customMenuStripeColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); + connect(menuStripeAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(menuBgndAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(menuBgndGrad, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(round, SIGNAL(activated(int)), SLOT(roundChanged())); connect(toolbarBorders, SIGNAL(activated(int)), SLOT(updateChanged())); - connect(sliderThumbs, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(sliderThumbs, SIGNAL(activated(int)), SLOT(sliderThumbChanged())); connect(handles, SIGNAL(activated(int)), SLOT(updateChanged())); connect(appearance, SIGNAL(activated(int)), SLOT(updateChanged())); connect(customMenuTextColor, SIGNAL(toggled(bool)), SLOT(customMenuTextColorChanged())); connect(stripedProgress, SIGNAL(activated(int)), SLOT(stripedProgressChanged())); connect(animatedProgress, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(embolden, SIGNAL(toggled(bool)), SLOT(emboldenToggled())); - connect(defBtnIndicator, SIGNAL(activated(int)), SLOT(dbiChanged())); + connect(defBtnIndicator, SIGNAL(activated(int)), SLOT(defBtnIndicatorChanged())); connect(highlightTab, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(menubarAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); connect(toolbarAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); connect(lvAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); connect(sliderAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); - connect(tabAppearance, SIGNAL(activated(int)), SLOT(tabAppearanceChanged())); + connect(tabAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(activeTabAppearance, SIGNAL(activated(int)), SLOT(activeTabAppearanceChanged())); connect(toolbarSeparators, SIGNAL(activated(int)), SLOT(updateChanged())); connect(splitters, SIGNAL(activated(int)), SLOT(updateChanged())); connect(fixParentlessDialogs, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(fillSlider, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(sliderStyle, SIGNAL(activated(int)), SLOT(updateChanged())); connect(roundMbTopOnly, SIGNAL(toggled(bool)), SLOT(updateChanged())); - connect(gradientPbGroove, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(fillProgress, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(darkerBorders, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(comboSplitter, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(comboBtn, SIGNAL(activated(int)), SLOT(comboBtnChanged())); + connect(sortedLv, SIGNAL(activated(int)), SLOT(sortedLvChanged())); + connect(customComboBtnColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); + connect(customSortedLvColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); + connect(unifySpinBtns, SIGNAL(toggled(bool)), SLOT(unifySpinBtnsToggled())); + connect(unifySpin, SIGNAL(toggled(bool)), SLOT(unifySpinToggled())); + connect(unifyCombo, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(vArrows, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(xCheck, SIGNAL(toggled(bool)), SLOT(updateChanged())); - connect(colorSelTab, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(crHighlight, SIGNAL(valueChanged(int)), SLOT(updateChanged())); + connect(crButton, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(colorSelTab, SIGNAL(valueChanged(int)), SLOT(updateChanged())); + connect(roundAllTabs, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(borderTab, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(borderInactiveTab, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(invertBotTab, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(doubleGtkComboArrow, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(tabMouseOver, SIGNAL(activated(int)), SLOT(tabMoChanged())); connect(stdSidebarButtons, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(borderMenuitems, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(popupBorder, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(progressAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(progressGrooveAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(grooveAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(sunkenAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(progressGrooveColor, SIGNAL(activated(int)), SLOT(updateChanged())); connect(menuitemAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(titlebarAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(inactiveTitlebarAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(titlebarButtonAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(colorTitlebarOnly, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(selectionAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); connect(shadeCheckRadio, SIGNAL(activated(int)), SLOT(shadeCheckRadioChanged())); connect(customCheckRadioColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); - -#ifdef QTC_PLAIN_FOCUS_ONLY - delete stdFocus; -#else - connect(stdFocus, SIGNAL(toggled(bool)), SLOT(updateChanged())); -#endif - connect(lvLines, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(focus, SIGNAL(activated(int)), SLOT(focusChanged())); + connect(lvLines, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(lvButton, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(drawStatusBarFrames, SIGNAL(toggled(bool)), SLOT(updateChanged())); - connect(buttonEffect, SIGNAL(activated(int)), SLOT(updateChanged())); - connect(coloredMouseOver, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(buttonEffect, SIGNAL(activated(int)), SLOT(buttonEffectChanged())); + connect(coloredMouseOver, SIGNAL(activated(int)), SLOT(coloredMouseOverChanged())); connect(menubarMouseOver, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(shadeMenubarOnlyWhenActive, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(thinnerMenuItems, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(thinnerBtns, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(customSlidersColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); connect(customMenubarsColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); connect(customMenuSelTextColor, SIGNAL(changed(const QColor &)), SLOT(updateChanged())); @@ -286,19 +730,41 @@ QtCurveConfig::QtCurveConfig(QWidget *parent) connect(shadeMenubars, SIGNAL(activated(int)), SLOT(shadeMenubarsChanged())); connect(highlightFactor, SIGNAL(valueChanged(int)), SLOT(updateChanged())); connect(scrollbarType, SIGNAL(activated(int)), SLOT(updateChanged())); - connect(shading, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(shading, SIGNAL(activated(int)), SLOT(shadingChanged())); connect(gtkScrollViews, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(squareScrollViews, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(highlightScrollViews, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(etchEntry, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(flatSbarButtons, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(thinSbarGroove, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(colorSliderMouseOver, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(titlebarBorder, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(sbarBgndAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(sliderFill, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(dwtAppearance, SIGNAL(activated(int)), SLOT(updateChanged())); + connect(crColor, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(smallRadio, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(splitterHighlight, SIGNAL(valueChanged(int)), SLOT(updateChanged())); connect(gtkComboMenus, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(gtkButtonOrder, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(mapKdeIcons, SIGNAL(toggled(bool)), SLOT(updateChanged())); connect(passwordChar, SIGNAL(clicked()), SLOT(passwordCharClicked())); connect(framelessGroupBoxes, SIGNAL(toggled(bool)), SLOT(updateChanged())); - connect(inactiveHighlight, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(colorMenubarMouseOver, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(useHighlightForMenu, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(groupBoxLine, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(fadeLines, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(menuIcons, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(stdBtnSizes, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(forceAlternateLvCols, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(squareLvSelection, SIGNAL(toggled(bool)), SLOT(updateChanged())); + connect(titlebarAlignment, SIGNAL(activated(int)), SLOT(updateChanged())); defaultSettings(&defaultStyle); if(!readConfig(NULL, ¤tStyle, &defaultStyle)) currentStyle=defaultStyle; + setupShadesTab(); setWidgetOptions(currentStyle); QPopupMenu *menu=new QPopupMenu(this), @@ -310,10 +776,15 @@ QtCurveConfig::QtCurveConfig(QWidget *parent) menu->insertSeparator(); menu->insertItem(i18n("Import..."), this, SLOT(importStyle())); menu->insertItem(i18n("Export..."), this, SLOT(exportStyle())); +#ifdef QTC_STYLE_SUPPORT menu->insertSeparator(); menu->insertItem(i18n("Export Theme..."), this, SLOT(exportTheme())); +#endif loadStyles(subMenu); + setupGradientsTab(); + setupStack(); + resize(600, 400); } QtCurveConfig::~QtCurveConfig() @@ -322,7 +793,7 @@ QtCurveConfig::~QtCurveConfig() void QtCurveConfig::loadStyles(QPopupMenu *menu) { - QStringList files(KGlobal::dirs()->findAllResources("data", "QtCurve/*"QTC_EXTENSION, false, true)); + QStringList files(KGlobal::dirs()->findAllResources("data", "QtCurve/*"EXTENSION, false, true)); files.sort(); @@ -332,7 +803,7 @@ void QtCurveConfig::loadStyles(QPopupMenu *menu) for(; it!=end; ++it) if(readConfig(*it, &opts, &defaultStyle)) - styles[menu->insertItem(QFileInfo(*it).fileName().remove(QTC_EXTENSION).replace('_', ' '), + styles[menu->insertItem(QFileInfo(*it).fileName().remove(EXTENSION).replace('_', ' '), this, SLOT(setStyle(int)))]=*it; } @@ -374,14 +845,42 @@ void QtCurveConfig::setStyle(int s) void QtCurveConfig::emboldenToggled() { if(!embolden->isChecked() && IND_NONE==defBtnIndicator->currentItem()) - defBtnIndicator->setCurrentItem(IND_COLORED); + defBtnIndicator->setCurrentItem(IND_TINT); updateChanged(); } -void QtCurveConfig::dbiChanged() +void QtCurveConfig::defBtnIndicatorChanged() { if(IND_NONE==defBtnIndicator->currentItem() && !embolden->isChecked()) embolden->setChecked(true); + else if(IND_GLOW==defBtnIndicator->currentItem() && EFFECT_NONE==buttonEffect->currentItem()) + buttonEffect->setCurrentItem(EFFECT_SHADOW); + + if(IND_COLORED==defBtnIndicator->currentItem() && round->currentItem()>ROUND_FULL) + round->setCurrentItem(ROUND_FULL); + + updateChanged(); +} + +void QtCurveConfig::buttonEffectChanged() +{ + if(EFFECT_NONE==buttonEffect->currentItem()) + { + if(IND_GLOW==defBtnIndicator->currentItem()) + defBtnIndicator->setCurrentItem(IND_TINT); + if(MO_GLOW==coloredMouseOver->currentItem()) + coloredMouseOver->setCurrentItem(MO_PLASTIK); + } + + updateChanged(); +} + +void QtCurveConfig::coloredMouseOverChanged() +{ + if(MO_GLOW==coloredMouseOver->currentItem() && + EFFECT_NONE==buttonEffect->currentItem()) + buttonEffect->setCurrentItem(EFFECT_SHADOW); + updateChanged(); } @@ -410,29 +909,425 @@ void QtCurveConfig::customMenuTextColorChanged() updateChanged(); } +void QtCurveConfig::menuStripeChanged() +{ + customMenuStripeColor->setEnabled(SHADE_CUSTOM==menuStripe->currentItem()); + menuStripeAppearance->setEnabled(SHADE_NONE!=menuStripe->currentItem()); + updateChanged(); +} + +void QtCurveConfig::comboBtnChanged() +{ + customComboBtnColor->setEnabled(SHADE_CUSTOM==comboBtn->currentItem()); + updateChanged(); +} + +void QtCurveConfig::sortedLvChanged() +{ + customSortedLvColor->setEnabled(SHADE_CUSTOM==sortedLv->currentItem()); + updateChanged(); +} + void QtCurveConfig::stripedProgressChanged() { - animatedProgress->setEnabled(STRIPE_NONE!=stripedProgress->currentItem()); - if(animatedProgress->isChecked() && STRIPE_NONE==stripedProgress->currentItem()) + bool allowAnimation=STRIPE_NONE!=stripedProgress->currentItem() && + STRIPE_FADE!=stripedProgress->currentItem(); + + animatedProgress->setEnabled(allowAnimation); + if(animatedProgress->isChecked() && !allowAnimation) animatedProgress->setChecked(false); updateChanged(); } -void QtCurveConfig::tabAppearanceChanged() +void QtCurveConfig::activeTabAppearanceChanged() { - if(colorSelTab->isChecked() && APPEARANCE_GRADIENT!=tabAppearance->currentItem()) - colorSelTab->setChecked(false); - colorSelTab->setEnabled(APPEARANCE_GRADIENT==tabAppearance->currentItem()); + int current(activeTabAppearance->currentItem()); + bool disableCol(APPEARANCE_FLAT==current && APPEARANCE_RAISED==current); + + if(colorSelTab->value() && disableCol) + colorSelTab->setValue(MIN_COLOR_SEL_TAB_FACTOR); + colorSelTab->setEnabled(!disableCol); updateChanged(); } +void QtCurveConfig::tabMoChanged() +{ + if(TAB_MO_GLOW==tabMouseOver->currentItem()) + roundAllTabs->setChecked(true); + roundAllTabs->setEnabled(TAB_MO_GLOW!=tabMouseOver->currentItem()); + updateChanged(); +} + +void QtCurveConfig::shadingChanged() +{ + updateChanged(); + if(gradPreview) + gradPreview->repaint(); +} + void QtCurveConfig::passwordCharClicked() { int cur(toInt(passwordChar->text())); CharSelectDialog dlg(this, cur); if(QDialog::Accepted==dlg.exec() && dlg.currentChar()!=cur) + { setPasswordChar(dlg.currentChar()); + updateChanged(); + } +} + +void QtCurveConfig::unifySpinBtnsToggled() +{ + if(unifySpinBtns->isChecked()) + unifySpin->setChecked(false); + unifySpin->setDisabled(unifySpinBtns->isChecked()); + updateChanged(); +} + +void QtCurveConfig::unifySpinToggled() +{ + if(unifySpin->isChecked()) + unifySpinBtns->setChecked(false); + unifySpinBtns->setDisabled(unifySpin->isChecked()); + updateChanged(); +} + +void QtCurveConfig::sliderThumbChanged() +{ + if(LINE_NONE!=sliderThumbs->currentItem() && sliderWidth->value()setValue(DEFAULT_SLIDER_WIDTH); + updateChanged(); +} + +void QtCurveConfig::sliderWidthChanged() +{ + if(0==sliderWidth->value()%2) + sliderWidth->setValue(sliderWidth->value()+1); + + if(LINE_NONE!=sliderThumbs->currentItem() && sliderWidth->value()setCurrentItem(LINE_NONE); + updateChanged(); +} + +void QtCurveConfig::setupStack() +{ + int i=0; + lastCategory=new CStackItem(stackList, i18n("General"), i++); + new CStackItem(stackList, i18n("Combos"), i++); + new CStackItem(stackList, i18n("Spin Buttons"), i++); + new CStackItem(stackList, i18n("Splitters"), i++); + new CStackItem(stackList, i18n("Sliders and Scrollbars"), i++); + new CStackItem(stackList, i18n("Progressbars"), i++); + new CStackItem(stackList, i18n("Default Button"),i++); + new CStackItem(stackList, i18n("Mouse-over"), i++); + new CStackItem(stackList, i18n("Listviews"), i++); + new CStackItem(stackList, i18n("Scrollviews"), i++); + new CStackItem(stackList, i18n("Tabs"), i++); + new CStackItem(stackList, i18n("Checks and Radios"), i++); + new CStackItem(stackList, i18n("Windows"), i++); + new CStackItem(stackList, i18n("Menus and Toolbars"), i++); + new CStackItem(stackList, i18n("Dock windows"), i++); + new CStackItem(stackList, i18n("Advanced Settings"), i++); + new CStackItem(stackList, i18n("Custom Gradients"), i++); + new CStackItem(stackList, i18n("Custom Shades"), i++); + + stackList->setSelected(lastCategory, true); + stackList->setCurrentItem(lastCategory); + stackList->setResizeMode(QListView::LastColumn); + connect(stackList, SIGNAL(selectionChanged()), SLOT(changeStack())); +} + +void QtCurveConfig::changeStack() +{ + CStackItem *item=(CStackItem *)(stackList->selectedItem()); + + if(item) + lastCategory=item; + else + { + item=lastCategory; + if(item) + { + stackList->setSelected(item, true); + stackList->setCurrentItem(item); + } + } + + if(item) + stack->raiseWidget(item->stack()); +} + +void QtCurveConfig::gradChanged(int i) +{ + GradientCont::const_iterator it(customGradient.find((EAppearance)i)); + + gradStops->clear(); + + if(it!=customGradient.end()) + { + gradPreview->setGrad((*it).second.stops); + gradBorder->setCurrentItem((*it).second.border); + + GradientStopCont::const_iterator git((*it).second.stops.begin()), + gend((*it).second.stops.end()); + + for(; git!=gend; ++git) + new CGradItem(gradStops, QString().setNum((*git).pos*100.0), + QString().setNum((*git).val*100.0)); + } + else + { + gradPreview->setGrad(GradientStopCont()); + gradBorder->setCurrentItem(GB_3D); + } + + gradBorder->setEnabled(NUM_CUSTOM_GRAD!=i); +} + +void QtCurveConfig::itemChanged(QListViewItem *i, int col) +{ + GradientCont::iterator it=customGradient.find((EAppearance)gradCombo->currentItem()); + + if(it!=customGradient.end()) + { + bool ok; + double newVal=toDouble(i->text(col), &ok)/100.0; + + if(ok && ((0==col && (newVal>=0.0 && newVal<=1.0)) || + (1==col && newVal>=0.0 && newVal<=2.0)) ) + { + double pos=0==(col ? newVal : i->text(0).toDouble())/100.0, + val=1==(col ? newVal : i->text(1).toDouble())/100.0, + prev=((CGradItem *)i)->prevVal(); + + (*it).second.stops.erase(GradientStop(col ? pos : prev, col ? prev : val)); + (*it).second.stops.insert(GradientStop(pos, val)); + gradPreview->setGrad((*it).second.stops); + i->setText(col, QString().setNum(val)); + emit changed(true); + } + } +} + +void QtCurveConfig::addGradStop() +{ + GradientCont::iterator cg=customGradient.find((EAppearance)gradCombo->currentItem()); + + if(cg==customGradient.end()) + { + Gradient cust; + + cust.border=(EGradientBorder)gradBorder->currentItem(); + cust.stops.insert(GradientStop(stopPosition->value()/100.0, stopValue->value()/100.0)); + customGradient[(EAppearance)gradCombo->currentItem()]=cust; + gradChanged(gradCombo->currentItem()); + emit changed(true); + } + else + { + GradientStopCont::const_iterator it((*cg).second.stops.begin()), + end((*cg).second.stops.end()); + double pos(stopPosition->value()/100.0), + val(stopValue->value()/100.0); + + for(; it!=end; ++it) + if(equal(pos, (*it).pos)) + if(equal(val, (*it).val)) + return; + else + { + (*cg).second.stops.erase(it); + break; + } + + unsigned int b4=(*cg).second.stops.size(); + (*cg).second.stops.insert(GradientStop(pos, val)); + + if((*cg).second.stops.size()!=b4) + { + gradPreview->setGrad((*cg).second.stops); + + QListViewItem *prev=gradStops->selectedItem(); + + if(prev) + gradStops->setSelected(prev, false); + + CGradItem *i=new CGradItem(gradStops, QString().setNum(pos*100.0), + QString().setNum(val*100.0)); + + gradStops->setSelected(i, true); + emit changed(true); + } + } +} + +void QtCurveConfig::removeGradStop() +{ + QListViewItem *cur=gradStops->selectedItem(); + + if(cur) + { + QListViewItem *next=cur->itemBelow(); + + if(!next) + next=cur->itemAbove(); + + GradientCont::iterator it=customGradient.find((EAppearance)gradCombo->currentItem()); + + if(it!=customGradient.end()) + { + double pos=cur->text(0).toDouble()/100.0, + val=cur->text(1).toDouble()/100.0; + + (*it).second.stops.erase(GradientStop(pos, val)); + gradPreview->setGrad((*it).second.stops); + emit changed(true); + + delete cur; + if(next) + gradStops->setCurrentItem(next); + } + } +} + +void QtCurveConfig::updateGradStop() +{ + QListViewItem *i=gradStops->selectedItem(); + + GradientCont::iterator cg=customGradient.find((EAppearance)gradCombo->currentItem()); + + if(i) + { + double curPos=i->text(0).toDouble()/100.0, + curVal=i->text(1).toDouble()/100.0, + newPos(stopPosition->value()/100.0), + newVal(stopValue->value()/100.0); + + if(!equal(newPos, curPos) || !equal(newVal, curVal)) + { + (*cg).second.stops.erase(GradientStop(curPos, curVal)); + (*cg).second.stops.insert(GradientStop(newPos, newVal)); + + i->setText(0, QString().setNum(stopPosition->value())); + i->setText(1, QString().setNum(stopValue->value())); + gradPreview->setGrad((*cg).second.stops); + emit changed(true); + } + } + else + addGradStop(); +} + +void QtCurveConfig::stopSelected() +{ + QListViewItem *i=gradStops->selectedItem(); + + removeButton->setEnabled(i); + updateButton->setEnabled(i); + + if(i) + { + stopPosition->setValue(i->text(0).toInt()); + stopValue->setValue(i->text(1).toInt()); + } + else + { + stopPosition->setValue(0); + stopValue->setValue(0); + } +} + +void QtCurveConfig::setupGradientsTab() +{ + for(int i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + gradCombo->insertItem(i18n("Custom gradient %1").arg((i-APPEARANCE_CUSTOM1)+1)); + + gradCombo->setCurrentItem(APPEARANCE_CUSTOM1); + + gradPreview=new CGradientPreview(this, previewWidgetContainer); + QVBoxLayout *layout=new QVBoxLayout(previewWidgetContainer); + layout->addWidget(gradPreview); + layout->setMargin(0); + layout->setSpacing(0); + QColor col(palette().color(QPalette::Active, QColorGroup::Button)); + previewColor->setColor(col); + gradPreview->setColor(col); + gradChanged(APPEARANCE_CUSTOM1); + addButton->setGuiItem(KGuiItem(i18n("Add"), "add")); + removeButton->setGuiItem(KGuiItem(i18n("Remove"), "remove")); + updateButton->setGuiItem(KGuiItem(i18n("Update"), "button_ok")); + + gradStops->setDefaultRenameAction(QListView::Reject); + gradStops->setAllColumnsShowFocus(true); + gradStops->setSortColumn(0); + stopPosition->setRange(0, 100, 5); + stopValue->setRange(0, 200, 5); + removeButton->setEnabled(false); + updateButton->setEnabled(false); + gradStops->setResizeMode(QListView::AllColumns); + connect(gradCombo, SIGNAL(activated(int)), SLOT(gradChanged(int))); + connect(previewColor, SIGNAL(changed(const QColor &)), gradPreview, SLOT(setColor(const QColor &))); + connect(gradStops, SIGNAL(itemRenamed(QListViewItem *, int)), SLOT(itemChanged(QListViewItem *, int))); + connect(addButton, SIGNAL(clicked()), SLOT(addGradStop())); + connect(removeButton, SIGNAL(clicked()), SLOT(removeGradStop())); + connect(updateButton, SIGNAL(clicked()), SLOT(updateGradStop())); + connect(gradStops, SIGNAL(selectionChanged()), SLOT(stopSelected())); +} + +void QtCurveConfig::setupShadesTab() +{ + int shade(0); + + setupShade(shade0, shade++); + setupShade(shade1, shade++); + setupShade(shade2, shade++); + setupShade(shade3, shade++); + setupShade(shade4, shade++); + setupShade(shade5, shade++); + connect(customShading, SIGNAL(toggled(bool)), SLOT(updateChanged())); +} + +void QtCurveConfig::setupShade(KDoubleNumInput *w, int shade) +{ + w->setRange(0.0, 2.0, 0.05, false); + connect(w, SIGNAL(valueChanged(double)), SLOT(updateChanged())); + shadeVals[shade]=w; +} + +void QtCurveConfig::populateShades(const Options &opts) +{ + SHADES + int contrast=QSettings().readNumEntry("/Qt/KDE/contrast", 7); + + if(contrast<0 || contrast>10) + contrast=7; + + customShading->setChecked(USE_CUSTOM_SHADES(opts)); + + for(int i=0; isetValue(USE_CUSTOM_SHADES(opts) + ? opts.customShades[i] + : shades[SHADING_SIMPLE==shading->currentItem() + ? 1 : 0] + [contrast] + [i]); +} + +bool QtCurveConfig::diffShades(const Options &opts) +{ + if( (!USE_CUSTOM_SHADES(opts) && customShading->isChecked()) || + (USE_CUSTOM_SHADES(opts) && !customShading->isChecked()) ) + return true; + + if(customShading->isChecked()) + { + for(int i=0; ivalue(), opts.customShades[i])) + return true; + } + + return false; } void QtCurveConfig::setPasswordChar(int ch) @@ -451,11 +1346,28 @@ void QtCurveConfig::updateChanged() emit changed(true); } +void QtCurveConfig::focusChanged() +{ + if(ROUND_MAX==round->currentItem() && FOCUS_LINE!=focus->currentItem()) + round->setCurrentItem(ROUND_EXTRA); + updateChanged(); +} + +void QtCurveConfig::roundChanged() +{ + if(ROUND_MAX==round->currentItem() && FOCUS_LINE!=focus->currentItem()) + focus->setCurrentItem(FOCUS_LINE); + + if(round->currentItem()>ROUND_FULL && IND_COLORED==defBtnIndicator->currentItem()) + defBtnIndicator->setCurrentItem(IND_TINT); + updateChanged(); +} + void QtCurveConfig::importStyle() { QString file(KFileDialog::getOpenFileName(QString::null, - i18n("*"QTC_EXTENSION"|QtCurve Settings Files\n" - QTC_THEME_PREFIX"*"QTC_THEME_SUFFIX"|QtCurve KDE Theme Files"), + i18n("*"EXTENSION"|QtCurve Settings Files\n" + THEME_PREFIX"*"THEME_SUFFIX"|QtCurve KDE Theme Files"), this)); if(!file.isEmpty()) @@ -464,7 +1376,7 @@ void QtCurveConfig::importStyle() void QtCurveConfig::exportStyle() { - QString file(KFileDialog::getSaveFileName(QString::null, i18n("*"QTC_EXTENSION"|QtCurve Settings Files"), this)); + QString file(KFileDialog::getSaveFileName(QString::null, i18n("*"EXTENSION"|QtCurve Settings Files"), this)); if(!file.isEmpty()) { @@ -486,6 +1398,7 @@ void QtCurveConfig::exportStyle() void QtCurveConfig::exportTheme() { +#ifdef QTC_STYLE_SUPPORT if(!exportDialog) exportDialog=new CExportThemeDialog(this); @@ -493,6 +1406,7 @@ void QtCurveConfig::exportTheme() setOptions(opts); exportDialog->run(opts); +#endif } void QtCurveConfig::loadStyle(const QString &file) @@ -512,20 +1426,28 @@ void QtCurveConfig::setOptions(Options &opts) opts.round=(ERound)round->currentItem(); opts.toolbarBorders=(ETBarBorder)toolbarBorders->currentItem(); opts.appearance=(EAppearance)appearance->currentItem(); -#ifndef QTC_PLAIN_FOCUS_ONLY - opts.stdFocus=stdFocus->isChecked(); -#endif - opts.lvLines=lvLines->isChecked(); + opts.focus=(EFocus)focus->currentItem(); + opts.lvLines=(ELvLines)lvLines->currentItem(); + opts.lvButton=lvButton->isChecked(); opts.drawStatusBarFrames=drawStatusBarFrames->isChecked(); opts.buttonEffect=(EEffect)buttonEffect->currentItem(); opts.coloredMouseOver=(EMouseOver)coloredMouseOver->currentItem(); opts.menubarMouseOver=menubarMouseOver->isChecked(); opts.shadeMenubarOnlyWhenActive=shadeMenubarOnlyWhenActive->isChecked(); opts.thinnerMenuItems=thinnerMenuItems->isChecked(); + opts.thinnerBtns=thinnerBtns->isChecked(); opts.fixParentlessDialogs=fixParentlessDialogs->isChecked(); opts.animatedProgress=animatedProgress->isChecked(); opts.stripedProgress=(EStripe)stripedProgress->currentItem(); - opts.lighterPopupMenuBgnd=lighterPopupMenuBgnd->isChecked(); + opts.lighterPopupMenuBgnd=lighterPopupMenuBgnd->value(); + opts.tabBgnd=tabBgnd->value(); + opts.menuDelay=menuDelay->value(); + opts.sliderWidth=sliderWidth->value(); + opts.menuStripe=(EShade)menuStripe->currentItem(); + opts.customMenuStripeColor=customMenuStripeColor->color(); + opts.menuStripeAppearance=(EAppearance)menuStripeAppearance->currentItem(); + opts.menuBgndAppearance=(EAppearance)menuBgndAppearance->currentItem(); + opts.menuBgndGrad=(EGradType)menuBgndGrad->currentItem(); opts.embolden=embolden->isChecked(); opts.scrollbarType=(EScrollbar)scrollbarType->currentItem(); opts.defBtnIndicator=(EDefBtnIndicator)defBtnIndicator->currentItem(); @@ -539,57 +1461,120 @@ void QtCurveConfig::setOptions(Options &opts) opts.lvAppearance=(EAppearance)lvAppearance->currentItem(); opts.sliderAppearance=(EAppearance)sliderAppearance->currentItem(); opts.tabAppearance=(EAppearance)tabAppearance->currentItem(); + opts.activeTabAppearance=(EAppearance)activeTabAppearance->currentItem(); opts.toolbarSeparators=(ELine)toolbarSeparators->currentItem(); opts.splitters=(ELine)splitters->currentItem(); opts.customSlidersColor=customSlidersColor->color(); opts.customMenubarsColor=customMenubarsColor->color(); - opts.highlightFactor=((double)(highlightFactor->value()+100))/100.0; + opts.highlightFactor=highlightFactor->value(); opts.customMenuNormTextColor=customMenuNormTextColor->color(); opts.customMenuSelTextColor=customMenuSelTextColor->color(); opts.customMenuTextColor=customMenuTextColor->isChecked(); opts.fillSlider=fillSlider->isChecked(); opts.sliderStyle=(ESliderStyle)sliderStyle->currentItem(); opts.roundMbTopOnly=roundMbTopOnly->isChecked(); - opts.gradientPbGroove=gradientPbGroove->isChecked(); + opts.fillProgress=fillProgress->isChecked(); opts.darkerBorders=darkerBorders->isChecked(); + opts.comboSplitter=comboSplitter->isChecked(); + opts.comboBtn=(EShade)comboBtn->currentItem(); + opts.customComboBtnColor=customComboBtnColor->color(); + opts.sortedLv=(EShade)sortedLv->currentItem(); + opts.customSortedLvColor=customSortedLvColor->color(); + opts.unifySpinBtns=unifySpinBtns->isChecked(); + opts.unifySpin=unifySpin->isChecked(); + opts.unifyCombo=unifyCombo->isChecked(); opts.vArrows=vArrows->isChecked(); opts.xCheck=xCheck->isChecked(); - opts.colorSelTab=colorSelTab->isChecked(); + opts.crHighlight=crHighlight->value(); + opts.crButton=crButton->isChecked(); + opts.colorSelTab=colorSelTab->value(); + opts.roundAllTabs=roundAllTabs->isChecked(); + opts.borderTab=borderTab->isChecked(); + opts.doubleGtkComboArrow=doubleGtkComboArrow->isChecked(); + opts.borderInactiveTab=borderInactiveTab->isChecked(); + opts.invertBotTab=invertBotTab->isChecked(); + opts.tabMouseOver=(ETabMo)tabMouseOver->currentItem(); opts.stdSidebarButtons=stdSidebarButtons->isChecked(); opts.borderMenuitems=borderMenuitems->isChecked(); + opts.popupBorder=popupBorder->isChecked(); opts.progressAppearance=(EAppearance)progressAppearance->currentItem(); + opts.progressGrooveAppearance=(EAppearance)progressGrooveAppearance->currentItem(); + opts.grooveAppearance=(EAppearance)grooveAppearance->currentItem(); + opts.sunkenAppearance=(EAppearance)sunkenAppearance->currentItem(); + opts.progressGrooveColor=(EColor)progressGrooveColor->currentItem(); opts.menuitemAppearance=(EAppearance)menuitemAppearance->currentItem(); + opts.titlebarAppearance=(EAppearance)titlebarAppearance->currentItem(); + opts.inactiveTitlebarAppearance=(EAppearance)inactiveTitlebarAppearance->currentItem(); + opts.titlebarButtonAppearance=(EAppearance)titlebarButtonAppearance->currentItem(); + opts.selectionAppearance=(EAppearance)selectionAppearance->currentItem(); opts.shadeCheckRadio=(EShade)shadeCheckRadio->currentItem(); opts.customCheckRadioColor=customCheckRadioColor->color(); opts.shading=(EShading)shading->currentItem(); opts.gtkScrollViews=gtkScrollViews->isChecked(); + opts.highlightScrollViews=highlightScrollViews->isChecked(); + opts.etchEntry=etchEntry->isChecked(); + opts.flatSbarButtons=flatSbarButtons->isChecked(); + opts.thinSbarGroove=thinSbarGroove->isChecked(); + opts.colorSliderMouseOver=colorSliderMouseOver->isChecked(); + opts.sbarBgndAppearance=(EAppearance)sbarBgndAppearance->currentItem(); + opts.sliderFill=(EAppearance)sliderFill->currentItem(); + opts.dwtAppearance=(EAppearance)dwtAppearance->currentItem(); + opts.crColor=crColor->isChecked() ? SHADE_BLEND_SELECTED : SHADE_NONE; + opts.smallRadio=smallRadio->isChecked(); + opts.splitterHighlight=splitterHighlight->value(); opts.gtkComboMenus=gtkComboMenus->isChecked(); opts.gtkButtonOrder=gtkButtonOrder->isChecked(); opts.mapKdeIcons=mapKdeIcons->isChecked(); opts.passwordChar=toInt(passwordChar->text()); opts.framelessGroupBoxes=framelessGroupBoxes->isChecked(); - opts.inactiveHighlight=inactiveHighlight->isChecked(); + opts.customGradient=customGradient; + opts.colorMenubarMouseOver=colorMenubarMouseOver->isChecked(); + opts.useHighlightForMenu=useHighlightForMenu->isChecked(); + opts.groupBoxLine=groupBoxLine->isChecked(); + opts.fadeLines=fadeLines->isChecked(); + opts.menuIcons=menuIcons->isChecked(); + opts.stdBtnSizes=stdBtnSizes->isChecked(); + opts.forceAlternateLvCols=forceAlternateLvCols->isChecked(); + opts.titlebarAlignment=(EAlign)titlebarAlignment->currentItem(); + opts.square=getSquareFlags(); + opts.windowBorder=getWindowBorderFlags(); + + if(customShading->isChecked()) + { + for(int i=0; ivalue(); + } + else + opts.customShades[0]=0; } void QtCurveConfig::setWidgetOptions(const Options &opts) { round->setCurrentItem(opts.round); scrollbarType->setCurrentItem(opts.scrollbarType); - lighterPopupMenuBgnd->setChecked(opts.lighterPopupMenuBgnd); + lighterPopupMenuBgnd->setValue(opts.lighterPopupMenuBgnd); + tabBgnd->setValue(opts.tabBgnd); + menuDelay->setValue(opts.menuDelay); + sliderWidth->setValue(opts.sliderWidth); + menuStripe->setCurrentItem(opts.menuStripe); + customMenuStripeColor->setColor(opts.customMenuStripeColor); + menuStripeAppearance->setCurrentItem(opts.menuStripeAppearance); + menuBgndAppearance->setCurrentItem(opts.menuBgndAppearance); + menuBgndGrad->setCurrentItem(opts.menuBgndGrad); toolbarBorders->setCurrentItem(opts.toolbarBorders); sliderThumbs->setCurrentItem(opts.sliderThumbs); handles->setCurrentItem(opts.handles); appearance->setCurrentItem(opts.appearance); -#ifndef QTC_PLAIN_FOCUS_ONLY - stdFocus->setChecked(opts.stdFocus); -#endif - lvLines->setChecked(opts.lvLines); + focus->setCurrentItem(opts.focus); + lvLines->setCurrentItem(opts.lvLines); + lvButton->setChecked(opts.lvButton); drawStatusBarFrames->setChecked(opts.drawStatusBarFrames); buttonEffect->setCurrentItem(opts.buttonEffect); coloredMouseOver->setCurrentItem(opts.coloredMouseOver); menubarMouseOver->setChecked(opts.menubarMouseOver); shadeMenubarOnlyWhenActive->setChecked(opts.shadeMenubarOnlyWhenActive); thinnerMenuItems->setChecked(opts.thinnerMenuItems); + thinnerBtns->setChecked(opts.thinnerBtns); fixParentlessDialogs->setChecked(opts.fixParentlessDialogs); animatedProgress->setChecked(opts.animatedProgress); stripedProgress->setCurrentItem(opts.stripedProgress); @@ -601,11 +1586,12 @@ void QtCurveConfig::setWidgetOptions(const Options &opts) lvAppearance->setCurrentItem(opts.lvAppearance); sliderAppearance->setCurrentItem(opts.sliderAppearance); tabAppearance->setCurrentItem(opts.tabAppearance); + activeTabAppearance->setCurrentItem(opts.activeTabAppearance); toolbarSeparators->setCurrentItem(opts.toolbarSeparators); splitters->setCurrentItem(opts.splitters); shadeSliders->setCurrentItem(opts.shadeSliders); shadeMenubars->setCurrentItem(opts.shadeMenubars); - highlightFactor->setValue((int)(opts.highlightFactor*100)-100); + highlightFactor->setValue(opts.highlightFactor); customSlidersColor->setColor(opts.customSlidersColor); customMenubarsColor->setColor(opts.customMenubarsColor); customMenuNormTextColor->setColor(opts.customMenuNormTextColor); @@ -617,32 +1603,117 @@ void QtCurveConfig::setWidgetOptions(const Options &opts) customMenuNormTextColor->setEnabled(customMenuTextColor->isChecked()); customMenuSelTextColor->setEnabled(customMenuTextColor->isChecked()); customCheckRadioColor->setEnabled(SHADE_CUSTOM==opts.shadeCheckRadio); + customMenuStripeColor->setEnabled(SHADE_CUSTOM==opts.menuStripe); + menuStripeAppearance->setEnabled(SHADE_NONE!=opts.menuStripe); - animatedProgress->setEnabled(STRIPE_NONE!=stripedProgress->currentItem()); + animatedProgress->setEnabled(STRIPE_NONE!=stripedProgress->currentItem() && + STRIPE_FADE!=stripedProgress->currentItem()); fillSlider->setChecked(opts.fillSlider); sliderStyle->setCurrentItem(opts.sliderStyle); roundMbTopOnly->setChecked(opts.roundMbTopOnly); - gradientPbGroove->setChecked(opts.gradientPbGroove); + fillProgress->setChecked(opts.fillProgress); darkerBorders->setChecked(opts.darkerBorders); + comboSplitter->setChecked(opts.comboSplitter); + comboBtn->setCurrentItem(opts.comboBtn); + customComboBtnColor->setColor(opts.customComboBtnColor); + sortedLv->setCurrentItem(opts.sortedLv); + customSortedLvColor->setColor(opts.customSortedLvColor); + unifySpinBtns->setChecked(opts.unifySpinBtns); + unifySpin->setChecked(opts.unifySpin); + unifyCombo->setChecked(opts.unifyCombo); vArrows->setChecked(opts.vArrows); xCheck->setChecked(opts.xCheck); - colorSelTab->setChecked(opts.colorSelTab); + crHighlight->setValue(opts.crHighlight); + crButton->setChecked(opts.crButton); + colorSelTab->setValue(opts.colorSelTab); + roundAllTabs->setChecked(opts.roundAllTabs); + borderTab->setChecked(opts.borderTab); + doubleGtkComboArrow->setChecked(opts.doubleGtkComboArrow); + borderInactiveTab->setChecked(opts.borderInactiveTab); + invertBotTab->setChecked(opts.invertBotTab); + tabMouseOver->setCurrentItem(opts.tabMouseOver); stdSidebarButtons->setChecked(opts.stdSidebarButtons); borderMenuitems->setChecked(opts.borderMenuitems); + popupBorder->setChecked(opts.popupBorder); progressAppearance->setCurrentItem(opts.progressAppearance); + progressGrooveAppearance->setCurrentItem(opts.progressGrooveAppearance); + grooveAppearance->setCurrentItem(opts.grooveAppearance); + sunkenAppearance->setCurrentItem(opts.sunkenAppearance); + progressGrooveColor->setCurrentItem(opts.progressGrooveColor); menuitemAppearance->setCurrentItem(opts.menuitemAppearance); + titlebarAppearance->setCurrentItem(opts.titlebarAppearance); + inactiveTitlebarAppearance->setCurrentItem(opts.inactiveTitlebarAppearance); + titlebarButtonAppearance->setCurrentItem(opts.titlebarButtonAppearance); + colorTitlebarOnly->setChecked(opts.windowBorder&WINDOW_BORDER_COLOR_TITLEBAR_ONLY); + selectionAppearance->setCurrentItem(opts.selectionAppearance); shadeCheckRadio->setCurrentItem(opts.shadeCheckRadio); customCheckRadioColor->setColor(opts.customCheckRadioColor); + colorMenubarMouseOver->setChecked(opts.colorMenubarMouseOver); + useHighlightForMenu->setChecked(opts.useHighlightForMenu); + groupBoxLine->setChecked(opts.groupBoxLine); + fadeLines->setChecked(opts.fadeLines); + menuIcons->setChecked(opts.menuIcons); + stdBtnSizes->setChecked(opts.stdBtnSizes); + forceAlternateLvCols->setChecked(opts.forceAlternateLvCols); + squareLvSelection->setChecked(opts.square&SQUARE_LISTVIEW_SELECTION); + titlebarAlignment->setCurrentItem(opts.titlebarAlignment); shading->setCurrentItem(opts.shading); gtkScrollViews->setChecked(opts.gtkScrollViews); + highlightScrollViews->setChecked(opts.highlightScrollViews); + squareScrollViews->setChecked(opts.square&SQUARE_SCROLLVIEW); + etchEntry->setChecked(opts.etchEntry); + flatSbarButtons->setChecked(opts.flatSbarButtons); + thinSbarGroove->setChecked(opts.thinSbarGroove); + colorSliderMouseOver->setChecked(opts.colorSliderMouseOver); + titlebarBorder->setChecked(opts.windowBorder&WINDOW_BORDER_ADD_LIGHT_BORDER); + sbarBgndAppearance->setCurrentItem(opts.sbarBgndAppearance); + sliderFill->setCurrentItem(opts.sliderFill); + dwtAppearance->setCurrentItem(opts.dwtAppearance); + crColor->setChecked(SHADE_BLEND_SELECTED==opts.crColor); + smallRadio->setChecked(opts.smallRadio); + splitterHighlight->setValue(opts.splitterHighlight); gtkComboMenus->setChecked(opts.gtkComboMenus); gtkButtonOrder->setChecked(opts.gtkButtonOrder); mapKdeIcons->setChecked(opts.mapKdeIcons); setPasswordChar(opts.passwordChar); framelessGroupBoxes->setChecked(opts.framelessGroupBoxes); - inactiveHighlight->setChecked(opts.inactiveHighlight); + customGradient=opts.customGradient; + gradCombo->setCurrentItem(APPEARANCE_CUSTOM1); + + populateShades(opts); +} + +int QtCurveConfig::getSquareFlags() +{ + int square(0); +/* + if(squareEntry->isChecked()) + square|=SQUARE_ENTRY; + if(squareProgress->isChecked()) + square|=SQUARE_PROGRESS; +*/ + if(squareScrollViews->isChecked()) + square|=SQUARE_SCROLLVIEW; + if(squareLvSelection->isChecked()) + square|=SQUARE_LISTVIEW_SELECTION; + return square; +} + +int QtCurveConfig::getWindowBorderFlags() +{ + int flags(0); + + if(colorTitlebarOnly->isChecked()) + flags|=WINDOW_BORDER_COLOR_TITLEBAR_ONLY; +// if(windowBorder_menuColor->isChecked()) +// flags|=WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR; + if(titlebarBorder->isChecked()) + flags|=WINDOW_BORDER_ADD_LIGHT_BORDER; +// if(windowBorder_blend->isChecked()) +// flags|=WINDOW_BORDER_BLEND_TITLEBAR; + return flags; } bool QtCurveConfig::settingsChanged() @@ -650,31 +1721,53 @@ bool QtCurveConfig::settingsChanged() return round->currentItem()!=currentStyle.round || toolbarBorders->currentItem()!=currentStyle.toolbarBorders || appearance->currentItem()!=(int)currentStyle.appearance || -#ifndef QTC_PLAIN_FOCUS_ONLY - stdFocus->isChecked()!=currentStyle.stdFocus || -#endif - lvLines->isChecked()!=currentStyle.lvLines || + focus->currentItem()!=(int)currentStyle.focus || + lvLines->currentItem()!=(int)currentStyle.lvLines || + lvButton->isChecked()!=currentStyle.lvButton || drawStatusBarFrames->isChecked()!=currentStyle.drawStatusBarFrames || buttonEffect->currentItem()!=(int)currentStyle.buttonEffect || coloredMouseOver->currentItem()!=(int)currentStyle.coloredMouseOver || menubarMouseOver->isChecked()!=currentStyle.menubarMouseOver || shadeMenubarOnlyWhenActive->isChecked()!=currentStyle.shadeMenubarOnlyWhenActive || thinnerMenuItems->isChecked()!=currentStyle.thinnerMenuItems || + thinnerBtns->isChecked()!=currentStyle.thinnerBtns || fixParentlessDialogs->isChecked()!=currentStyle.fixParentlessDialogs || animatedProgress->isChecked()!=currentStyle.animatedProgress || stripedProgress->currentItem()!=currentStyle.stripedProgress || - lighterPopupMenuBgnd->isChecked()!=currentStyle.lighterPopupMenuBgnd || + lighterPopupMenuBgnd->value()!=currentStyle.lighterPopupMenuBgnd || + tabBgnd->value()!=currentStyle.tabBgnd || + menuDelay->value()!=currentStyle.menuDelay || + sliderWidth->value()!=currentStyle.sliderWidth || + menuStripe->currentItem()!=currentStyle.menuStripe || + menuStripeAppearance->currentItem()!=currentStyle.menuStripeAppearance || + menuBgndAppearance->currentItem()!=currentStyle.menuBgndAppearance || + menuBgndGrad->currentItem()!=currentStyle.menuBgndGrad || embolden->isChecked()!=currentStyle.embolden || fillSlider->isChecked()!=currentStyle.fillSlider || sliderStyle->currentItem()!=currentStyle.sliderStyle || roundMbTopOnly->isChecked()!=currentStyle.roundMbTopOnly || - gradientPbGroove->isChecked()!=currentStyle.gradientPbGroove || + fillProgress->isChecked()!=currentStyle.fillProgress || darkerBorders->isChecked()!=currentStyle.darkerBorders || + comboSplitter->isChecked()!=currentStyle.comboSplitter || + comboBtn->currentItem()!=(int)currentStyle.comboBtn || + sortedLv->currentItem()!=(int)currentStyle.sortedLv || + unifySpinBtns->isChecked()!=currentStyle.unifySpinBtns || + unifySpin->isChecked()!=currentStyle.unifySpin || + unifyCombo->isChecked()!=currentStyle.unifyCombo || vArrows->isChecked()!=currentStyle.vArrows || xCheck->isChecked()!=currentStyle.xCheck || - colorSelTab->isChecked()!=currentStyle.colorSelTab || + crHighlight->value()!=currentStyle.crHighlight || + crButton->isChecked()!=currentStyle.crButton || + colorSelTab->value()!=currentStyle.colorSelTab || + roundAllTabs->isChecked()!=currentStyle.roundAllTabs || + borderTab->isChecked()!=currentStyle.borderTab || + doubleGtkComboArrow->isChecked()!=currentStyle.doubleGtkComboArrow || + borderInactiveTab->isChecked()!=currentStyle.borderInactiveTab || + invertBotTab->isChecked()!=currentStyle.invertBotTab || + tabMouseOver->currentItem()!=currentStyle.tabMouseOver || stdSidebarButtons->isChecked()!=currentStyle.stdSidebarButtons || borderMenuitems->isChecked()!=currentStyle.borderMenuitems || + popupBorder->isChecked()!=currentStyle.popupBorder || defBtnIndicator->currentItem()!=(int)currentStyle.defBtnIndicator || sliderThumbs->currentItem()!=(int)currentStyle.sliderThumbs || handles->currentItem()!=(int)currentStyle.handles || @@ -688,22 +1781,52 @@ bool QtCurveConfig::settingsChanged() lvAppearance->currentItem()!=currentStyle.lvAppearance || sliderAppearance->currentItem()!=currentStyle.sliderAppearance || tabAppearance->currentItem()!=currentStyle.tabAppearance || + activeTabAppearance->currentItem()!=currentStyle.activeTabAppearance || progressAppearance->currentItem()!=currentStyle.progressAppearance || + progressGrooveAppearance->currentItem()!=currentStyle.progressGrooveAppearance || + grooveAppearance->currentItem()!=currentStyle.grooveAppearance || + sunkenAppearance->currentItem()!=currentStyle.sunkenAppearance || + progressGrooveColor->currentItem()!=currentStyle.progressGrooveColor || menuitemAppearance->currentItem()!=currentStyle.menuitemAppearance || + titlebarAppearance->currentItem()!=currentStyle.titlebarAppearance || + inactiveTitlebarAppearance->currentItem()!=currentStyle.inactiveTitlebarAppearance || + titlebarButtonAppearance->currentItem()!=currentStyle.titlebarButtonAppearance || + selectionAppearance->currentItem()!=currentStyle.selectionAppearance || toolbarSeparators->currentItem()!=currentStyle.toolbarSeparators || splitters->currentItem()!=currentStyle.splitters || + colorMenubarMouseOver->isChecked()!=currentStyle.colorMenubarMouseOver || + useHighlightForMenu->isChecked()!=currentStyle.useHighlightForMenu || + groupBoxLine->isChecked()!=currentStyle.groupBoxLine || + fadeLines->isChecked()!=currentStyle.fadeLines || + menuIcons->isChecked()!=currentStyle.menuIcons || + stdBtnSizes->isChecked()!=currentStyle.stdBtnSizes || + forceAlternateLvCols->isChecked()!=currentStyle.forceAlternateLvCols || + titlebarAlignment->currentItem()!=currentStyle.titlebarAlignment || shading->currentItem()!=(int)currentStyle.shading || gtkScrollViews->isChecked()!=currentStyle.gtkScrollViews || + highlightScrollViews->isChecked()!=currentStyle.highlightScrollViews || + etchEntry->isChecked()!=currentStyle.etchEntry || + flatSbarButtons->isChecked()!=currentStyle.flatSbarButtons || + thinSbarGroove->isChecked()!=currentStyle.thinSbarGroove || + colorSliderMouseOver->isChecked()!=currentStyle.colorSliderMouseOver || + sbarBgndAppearance->currentItem()!=currentStyle.sbarBgndAppearance || + sliderFill->currentItem()!=currentStyle.sliderFill || + dwtAppearance->currentItem()!=currentStyle.dwtAppearance || + crColor->isChecked()!=(SHADE_BLEND_SELECTED==currentStyle.crColor ? true : false)|| + smallRadio->isChecked()!=currentStyle.smallRadio || + splitterHighlight->value()!=currentStyle.splitterHighlight || gtkComboMenus->isChecked()!=currentStyle.gtkComboMenus || gtkButtonOrder->isChecked()!=currentStyle.gtkButtonOrder || mapKdeIcons->isChecked()!=currentStyle.mapKdeIcons || framelessGroupBoxes->isChecked()!=currentStyle.framelessGroupBoxes || - inactiveHighlight->isChecked()!=currentStyle.inactiveHighlight || + + getSquareFlags()!=currentStyle.square || + getWindowBorderFlags()!=currentStyle.windowBorder|| toInt(passwordChar->text())!=currentStyle.passwordChar || - (highlightFactor->value()+100)!=(int)(currentStyle.highlightFactor*100) || + highlightFactor->value()!=currentStyle.highlightFactor || customMenuTextColor->isChecked()!=currentStyle.customMenuTextColor || (SHADE_CUSTOM==currentStyle.shadeSliders && customSlidersColor->color()!=currentStyle.customSlidersColor) || @@ -714,7 +1837,17 @@ bool QtCurveConfig::settingsChanged() (customMenuTextColor->isChecked() && customMenuNormTextColor->color()!=currentStyle.customMenuNormTextColor) || (customMenuTextColor->isChecked() && - customMenuSelTextColor->color()!=currentStyle.customMenuSelTextColor); + customMenuSelTextColor->color()!=currentStyle.customMenuSelTextColor) || + (SHADE_CUSTOM==currentStyle.menuStripe && + customMenuStripeColor->color()!=currentStyle.customMenuStripeColor) || + (SHADE_CUSTOM==currentStyle.comboBtn && + customComboBtnColor->color()!=currentStyle.customComboBtnColor) || + (SHADE_CUSTOM==currentStyle.sortedLv && + customSortedLvColor->color()!=currentStyle.customSortedLvColor) || + + customGradient!=currentStyle.customGradient; + + diffShades(currentStyle); } #include "qtcurveconfig.moc" diff --git a/config/qtcurveconfig.h b/config/qtcurveconfig.h index 8e69510..04d34cb 100644 --- a/config/qtcurveconfig.h +++ b/config/qtcurveconfig.h @@ -2,7 +2,7 @@ #define __QTCURVECONFIG_H__ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -21,15 +21,46 @@ Boston, MA 02110-1301, USA. */ -#define QTC_COMMON_ONLY_COVERTERS -#define QTC_CONFIG_DIALOG +#define COMMON_FUNCTIONS +#define CONFIG_DIALOG #include +#include #include #include "common.h" class QPopupMenu; +class QListViewItem; +class KDoubleNumInput; +#ifdef QTC_STYLE_SUPPORT class CExportThemeDialog; +#endif +class CStackItem; +class QtCurveConfig; + +class CGradientPreview : public QWidget +{ + Q_OBJECT + + public: + + CGradientPreview(QtCurveConfig *c, QWidget *p); + + QSize sizeHint() const; + QSize minimumSizeHint() const; + void paintEvent(QPaintEvent *); + void setGrad(const GradientStopCont &s); + + public slots: + + void setColor(const QColor &col); + + private: + + QtCurveConfig *cfg; + QColor color; + GradientStopCont stops; +}; class QtCurveConfig : public QtCurveConfigBase { @@ -40,6 +71,8 @@ class QtCurveConfig : public QtCurveConfigBase QtCurveConfig(QWidget *parent); virtual ~QtCurveConfig(); + EShading currentShading() const { return (EShading)shading->currentItem(); } + signals: void changed(bool); @@ -57,25 +90,53 @@ class QtCurveConfig : public QtCurveConfigBase void setStyle(int s); void updateChanged(); + void focusChanged(); + void roundChanged(); void importStyle(); void exportStyle(); void exportTheme(); void emboldenToggled(); - void dbiChanged(); + void defBtnIndicatorChanged(); + void buttonEffectChanged(); + void coloredMouseOverChanged(); void shadeSlidersChanged(); void shadeMenubarsChanged(); void shadeCheckRadioChanged(); void customMenuTextColorChanged(); + void menuStripeChanged(); + void comboBtnChanged(); + void sortedLvChanged(); void stripedProgressChanged(); - void tabAppearanceChanged(); + void activeTabAppearanceChanged(); + void tabMoChanged(); + void shadingChanged(); void passwordCharClicked(); + void unifySpinBtnsToggled(); + void unifySpinToggled(); + void sliderThumbChanged(); + void sliderWidthChanged(); + void changeStack(); + void gradChanged(int i); + void itemChanged(QListViewItem *i, int col); + void addGradStop(); + void removeGradStop(); + void updateGradStop(); + void stopSelected(); private: + void setupStack(); + void setupGradientsTab(); + void setupShadesTab(); + void setupShade(KDoubleNumInput *w, int shade); + void populateShades(const Options &opts); + bool diffShades(const Options &opts); void setPasswordChar(int ch); void loadStyle(const QString &file); void setOptions(Options &opts); void setWidgetOptions(const Options &opts); + int getSquareFlags(); + int getWindowBorderFlags(); bool settingsChanged(); private: @@ -83,7 +144,13 @@ class QtCurveConfig : public QtCurveConfigBase Options currentStyle, defaultStyle; QMap styles; +#ifdef QTC_STYLE_SUPPORT CExportThemeDialog *exportDialog; +#endif + CGradientPreview *gradPreview; + GradientCont customGradient; + KDoubleNumInput *shadeVals[NUM_STD_SHADES]; + CStackItem *lastCategory; }; #endif diff --git a/config/qtcurveconfigbase.ui b/config/qtcurveconfigbase.ui index 0e535ee..736a108 100644 --- a/config/qtcurveconfigbase.ui +++ b/config/qtcurveconfigbase.ui @@ -8,8 +8,8 @@ 0 0 - 666 - 556 + 862 + 638 @@ -41,182 +41,208 @@ AlignCenter - + + + + Category + + + true + + + true + + - spacer2 - - - Vertical + stackList - - Fixed + + + 1 + 7 + 0 + 0 + - + - 20 - 16 + 150 + 0 - - + + - optionsTab + optionBtn - - - 3 - 3 - 0 - 0 - + + Options + + + + + stack - tab + WStackPage - - General + + 0 unnamed - + - textLabel1_6 + appearance - - Splitters: + + The setting here affects the general appearance - and will be applied to buttons, combo boxes, and spin buttons. - + - textLabel1_2_3 + textLabel1 - Scrollbars: + Appearance: - + - textLabel1_2_3_2 + spacer10_2 - - Sliders: + + Horizontal - - - - textLabel1_7 + + Expanding - - Appearance: + + + 571 + 16 + - + - textLabel1 + textLabel1_6 - Progress bars: + Focus rectangle: - + - textLabel1_8_2 + textLabel3 - Listviews: - - - This controls the % that widgets will be highlighted by when the mouse hovers over them + Button effect: - + - lvAppearance + round - + - embolden + darkerBorders - Bold text, and + Darker borders - + - tabAppearance + stdSidebarButtons - - - - progressAppearance + + Standard buttons for sidebars - The setting here affects the general appearance - and will be applied to buttons, scrollbars, sliders, combo boxes, and spin buttons. + Select this to have the sidebar buttons in konqueror, kate, kaffeine, ktorrent, drawn as per normal buttons - otherwise they will be drawn in a more flat style. - scrollbarType - - - - 3 - 0 - 0 - 0 - - - - - - stripedProgress + buttonEffect - + - gradientPbGroove + textLabel2_4 - Gradient groove - - - - - sliderAppearance + Roundedness: - + - animatedProgress + vArrows - Animated + 'V' style arrows - + - lvLines - - - Lines + focus - + - stdFocus + frame4 - - Dotted focus rectangle + + StyledPanel - - Some applications, such as Qt Designer, and Krita, make use of 'dock windows' These have a handle strip along the top - enabling this option will draw the name of the window in the handle strip. + + Raised + + + 0 + + + unnamed + + + 0 + + + 0 + + + + framelessGroupBoxes + + + Frameless groupboxes, + + + + + groupBoxLine + + + + 3 + 0 + 0 + 0 + + + + draw line after title (KDE4 && Gtk2) + + + - + drawStatusBarFrames @@ -224,158 +250,204 @@ Draw statusbar frames - + - framelessGroupBoxes - - - Frameless groupboxes + sunkenAppearance - + - shadeSliders + textLabel1_12 - - - 3 - 0 - 0 - 0 - + + Sunken appearance: - + - textLabel1_8_2_2 + fadeLines - Tabs: + Draw fading lines (KDE4 && Gtk2) - - This controls the % that widgets will be highlighted by when the mouse hovers over them + + - + - textLabel1_8_2_2_2 + thinnerBtns - Checks/radios: + Thinner buttons when etched/shadowed - - This controls the % that widgets will be highlighted by when the mouse hovers over them + + - + - shadeCheckRadio + spacer9 - - - 3 - 0 - 0 - 0 - + + Vertical - - + + Expanding + + + + 20 + 162 + + + + - customCheckRadioColor + etchEntry - + Etch entries and scrollviews when button effect set to etched/shadowed. - + + + + + WStackPage + + + 1 + + + + unnamed + + - customSlidersColor + comboSplitter - + Draw splitter + + + This option controls whether a line is drawn near non-editable combo box arrows. - + - textLabel1_3 + unifyCombo - Default button: + Draw arrow of editable combos within edit field - + - textLabel1_3_2 + spacer27_2 - - Mouse-over: + + Vertical - - + + Expanding + + + + 20 + 429 + + + + - appearance + spacer26_2 - - The setting here affects the general appearance - and will be applied to buttons, scrollbars, sliders, combo boxes, and spin buttons. + + Horizontal - - + + Expanding + + + + 31 + 20 + + + + - stdSidebarButtons + textLabel1_17 - Standard buttons for sidebars + Button shade: - + - coloredMouseOver + customComboBtnColor - - The setting here affects the general appearance - and will be applied to buttons, scrollbars, sliders, combo boxes, and spin buttons. + + - + - textLabel1_8 + comboBtn + + + + + gtkComboMenus - Highlight by: + Gtk style comboboxes (KDE4) - This controls the % that widgets will be highlighted by when the mouse hovers over them + In Gtk, the list that is attached to a combo-box appears in the same style as a popup-menu. KDE4 has the ability to mimic this look. - + - darkerBorders + doubleGtkComboArrow - Darker borders + Double arrows for Gtk style comboboxes - - - round - - - + + + + + WStackPage + + + 2 + + + + unnamed + + - vArrows + unifySpinBtns - 'V' style arrows + Combine both buttons - + - splitters + unifySpin + + + Draw arrows within edit field - + - spacer6 + spacer28_3 Vertical @@ -386,575 +458,2222 @@ 20 - 20 + 31 - - - xCheck - - + + + + + WStackPage + + + 3 + + + + unnamed + + + + textLabel4 + + + Markings: + + + + + spacer12_2 + + + Vertical + + + Expanding + + + + 16 + 482 + + + + + + splitterHighlight + + + % + + + + + spacer11 + + + Horizontal + + + Expanding + + + + 461 + 16 + + + + + + splitters + + + + + textLabel1_21 + + + Background mouse-over highlight: + + + + + + + WStackPage + + + 4 + + + + unnamed + + + + textLabel5 + + + Appearance: + + + + + textLabel6 + + + Coloration: + + + + + shadeSliders + + + + 3 + 0 + 0 + 0 + + + + This color setting affects both scrollbar sliders, and other sliders. + + + + + customSlidersColor + + + + + + + + spacer14 + + + Horizontal + + + Expanding + + + + 307 + 16 + + + + + + sliderAppearance + + + This appearance setting affects both scrollbar sliders, and other sliders. + + + + + spacer13 + + + Vertical + + + Expanding + + + + 20 + 191 + + + + + + grooveAppearance + + + + + sliderThumbs + + + + 3 + 0 + 0 + 0 + + + + + + sliderWidth + + + + + textLabel7 + + + Style: + + + + + textLabel8_2 + + + Slider thumbs: + + + + + textLabel8_2x + + + Slider width: + + + + + fillSlider + + + Fill used part of groove: + + + + + textLabel8_2_2 + + + Background + + + + + sliderFill + + + This appearance setting affects both scrollbar sliders, and other sliders. + + + + + flatSbarButtons + + + Flat + + + + + sliderStyle + + + This setting only affects standard sliders - i.e. not scrollbar sliders. 'Triangular' is a very similar style to plastik's sliders. + + + + + textLabel2_5 + + + Groove appearance: + + + + + thinSbarGroove + + + Thin scrollbar groove + + + + + textLabel8 + + + Scrollbar buttons: + + + + + scrollbarType + + + + 3 + 0 + 0 + 0 + + + + This controls the position, and number, of buttons on a scrollbar. + +KDE - 1 button at the top/left, and two at the bottom/right +Windows - 1 botton at each end +Platinum - no buttons at the top/left, two at bottom/right +Next - two buttons at the top/left, none at bottom/right +None - no buttons, only the slider + + + + + sbarBgndAppearance + + + + 3 + 0 + 0 + 0 + + + + + + colorSliderMouseOver + + + Color only on mouse-over + + + + + + + WStackPage + + + 5 + + + + unnamed + + + + progressAppearance + + + + + stripedProgress + + + + + animatedProgress + + + Animated + + + + + spacer16 + + + Vertical + + + Expanding + + + + 16 + 369 + + + + + + textLabel1_3 + + + Groove: + + + + + textLabel9 + + + Bar: + + + + + progressGrooveAppearance + + + + + progressGrooveColor + + + + + fillProgress + + + + 3 + 0 + 0 + 0 + + + + No border + + + Enable this option to remove the 1 pixel border around the filled element. + + + + + + + WStackPage + + + 6 + + + + unnamed + + + + defBtnIndicator + + + + 3 + 0 + 0 + 0 + + + + + + textLabel10 + + + Indicate with: + + + + + embolden + + + Embolden text + + + + + spacer17 + + + Horizontal + + + Expanding + + + + 27 + 2 + + + + + + spacer18 + + + Vertical + + + Expanding + + + + 3 + 30 + + + + + + + + WStackPage + + + 7 + + + + unnamed + + + + textLabel1_8 + + + Highlight by: + + + This controls the % that widgets will be highlighted by when the mouse hovers over them + + + + + textLabel11 + + + Coloration: + + + + + highlightFactor + + + % + + + + + coloredMouseOver + + + + + spacer19 + + + Horizontal + + + Expanding + + + + 50 + 6 + + + + + + spacer20 + + + Vertical + + + Expanding + + + + 5 + 20 + + + + + + + + WStackPage + + + 8 + + + + unnamed + + + + lvButton + + + + 3 + 0 + 0 + 0 + + + + Button color + + + + + textLabel12 + + + Header appearance: + + + + + lvAppearance + + + + + textLabel12_2 + + + Shade header of sorted column: + + + + + sortedLv + + + + + customSortedLvColor + + + false + + + + + + + + textLabel1_8_2_2_3_2 + + + Selection appearance (KDE4 && Gtk2): + + + + + selectionAppearance + + + + + spacer22 + + + Vertical + + + Expanding + + + + 16 + 389 + + + + + + forceAlternateLvCols + + + Force alternate colors + + + + + textLabel1_18 + + + Lines between items: + + + + + lvLines + + + + + squareLvSelection + + + Square selection + + + + + + + WStackPage + + + 9 + + + + unnamed + + + + gtkScrollViews + + + Scrollbars on the outside + + + + + highlightScrollViews + + + Highlight on focus (KDE) + + + + + squareScrollViews + + + Always draw with a square frame - regardless of the general round setting. + + + + + spacer28_2 + + + Vertical + + + Expanding + + + + 16 + 272 + + + + + + + + WStackPage + + + 10 + + + + unnamed + + + + textLabel13 + + + Active tab appearance: + + + + + textLabel8_3 + + + Inactive tab appearance: + + + + + activeTabAppearance + + + + + tabAppearance + + + + + highlightTab + + + Highlight + + + This will cause a coloured stripe to be drawn over the current tab. + + + + + colorSelTab + + + % + + + Tint by + + + + + textLabel1_14 + + + Mouse-over: + + + + + tabMouseOver + + + + + roundAllTabs + + + Round all tabs + + + + + borderTab + + + Draw a light border around tab widget + + + + + borderInactiveTab + + + Draw inner border of inactive tabs + + + + + spacer23 + + + Vertical + + + Expanding + + + + 20 + 320 + + + + + + tabBgnd + + + % + + + + + textLabel1_19 + + + Alter background by: + + + + + invertBotTab + + + Invert shade of bottom tabs + + + + + + + WStackPage + + + 11 + + + + unnamed + + + + shadeCheckRadio + + + + 3 + 0 + 0 + 0 + + + + + + customCheckRadioColor + + + + + + + + textLabel14 + + + Coloration: + + + + + xCheck + + 'X' style checkmarks - + + + spacer25 + + + Horizontal + + + Expanding + + + + 211 + 16 + + + + + + spacer26 + + + Vertical + + + Expanding + + + + 20 + 364 + + + + + + crButton + + + Button like + + + + + smallRadio + + + Small radio 'dot' + + + + + crColor + + + Color when selected + + + + + crHighlight + + + % + + + + + textLabel2_6 + + + Background mouse-over highlight: + + + + + + + WStackPage + + + 12 + + + + unnamed + + + + spacer28 + + + Horizontal + + + Expanding + + + + 395 + 16 + + + + + + textLabel15_2 + + + Button Appearance: + + + + + titlebarButtonAppearance + + + + + titlebarAppearance + + + + + textLabel15 + + + Titlebar Appearance: + + + + + textLabel15_3 + + + Titlebar Appearance: + + + + + inactiveTitlebarAppearance + + + + + textLabel1_13 + + + Text alignment: + + + + + titlebarAlignment + + + + + colorTitlebarOnly + + + Color titlebar only (KDE4) + + + + + spacer27 + + + Vertical + + + Expanding + + + + 20 + 270 + + + + + + titlebarBorder + + + Light border (KDE4) + + + + + + + WStackPage + + + 13 + + + + unnamed + + + + textLabel2 + + + Handles: + + + + + textLabel1_4 + + + Border: + + + + + toolbarBorders + + + + + handles + + + + + spacer4 + + + Horizontal + + + MinimumExpanding + + + + 121 + 20 + + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 19 + + + + + + groupBox2 + + + Toolbars + + + false + + + + unnamed + + + + textLabel1_4_2_2 + + + Appearance: + + + + + toolbarAppearance + + + + + textLabel2_2 + + + Separators: + + + + + toolbarSeparators + + + + + spacer4_2 + + + Horizontal + + + MinimumExpanding + + + + 20 + 20 + + + + + + + + groupBox2_2 + + + Menus + + + false + + + + unnamed + + + + shadeMenubarOnlyWhenActive + + + Apply coloration to active window only + + + + + textLabel1_4_2_3 + + + Coloration: + + + + + textLabel1_4_2 + + + Menubar appearance: + + + + + textLabel1_4_2_4 + + + Menuitem appearance: + + + + + useHighlightForMenu + + + Use 'highlight' color for active menuitems + + + + + textLabel1_15 + + + Stripe (KDE): + + + + + popupBorder + + + Border popupmenus + + + + + textLabel1_16 + + + Sub-menu delay: + + + + + menuStripeAppearance + + + false + + + + + colorMenubarMouseOver + + + Color menubar items on mouse-over + + + + + customMenuTextColor + + + Custom text colors (active/normal): + + + + + customMenuNormTextColor + + + + + + + + customMenuSelTextColor + + + + + + + + menuBgndAppearance + + + + + menuBgndGrad + + + + + customMenuStripeColor + + + false + + + + + + + + thinnerMenuItems + + + Thinner menu items + + + + + textLabel1_7 + + + Popup-menu background: + + + + + menuStripe + + + + + lighterPopupMenuBgnd + + + % + + + + + menuDelay + + + + + menuitemAppearance + + + + + shadeMenubars + + + + 3 + 0 + 0 + 0 + + + + + + menubarAppearance + + + + + borderMenuitems + + + Border menuitems + + + + + menuIcons + + + Draw icons + + + + + roundMbTopOnly + + + Round selected menubar items on top only + + + + + customMenubarsColor + + + + + + + + menubarMouseOver + + + Enable mouse-over for menubar items + + + + + + + + + WStackPage + + + 14 + + + + unnamed + + + + textLabel1_20 + + + Titlebar appearance: + + + + + dwtAppearance + + + + + spacer28_4 + + + Horizontal + + + Expanding + + + + 18 + 3 + + + + + + spacer29 + + + Vertical + + + Expanding + + + + 6 + 85 + + + + + + + + WStackPage + + + 15 + + + + unnamed + + + + fixParentlessDialogs + + + 'Fix' parentless dialogs + + + <h2><font color="#ff0000">Warning: Experimental!</font></h1><p><p>Some applications - such as Kate, Kaffeine, and GIMP - produce dialogs that have no 'parent'. This causes the dialog to recieve an entry in the taskbar, and allows the dialog to be minimised independantly of the main application window.</p> + +<p>If you enable this option, QtCurve will try to 'fix' this by assigning the dialogs a parent.</p> + +<p><b>Note:</b> This may brake some applications, as it wiill alter the behaviour of dialogs in a way the application has not intended. Therefore, please use with care.</p> + + + + + mapKdeIcons + + + Map KDE icons (Gtk2) + + + - highlightTab + gtkButtonOrder - Highlight selected - - - This will cause a coloured stripe to be drawn over the current tab. + Gtk button order - + - colorSelTab + spacer7 - - Color selected + + Vertical - - + + Expanding + + + + 20 + 381 + + + + - sliderThumbs + textLabel1_2 - - - 3 - 0 - 0 - 0 - + + Character to use for password entries: - + - defBtnIndicator + passwordChar - 3 + 4 0 0 0 - - - - fillSlider - - Fill used - - - - - sliderStyle - - - - - buttonEffect + - + - highlightFactor + stdBtnSizes - - % + + Don't make 'auto-default' buttons larger (KDE4) - tab + WStackPage - - Menus && Toolbars + + 16 unnamed - + - textLabel1_4 - - - Border: + gradCombo - - - spacer5 - - - Vertical - - - Expanding - - - - 20 - 54 - - - - + - groupBox2_2 + groupBox3 - Menus - - - true + Settings unnamed - - - lighterPopupMenuBgnd - - - Lighter popup-menu background - - - - - menubarMouseOver - - - Enable mouse-over for menubar items - - - + - roundMbTopOnly - - - Round selected menubar items on top only + gradBorder - + + + + Position (%) + + + true + + + true + + + + + Value (%) + + + true + + + true + + - textLabel1_4_2_3 + gradStops - - Coloration: + + + 1 + 7 + 0 + 0 + - + - textLabel1_4_2 + groupBox6 - - Menubar appearance: + + Gradient Stop + + + unnamed + + + + addButton + + + + 0 + 1 + 0 + 0 + + + + + + + + + updateButton + + + + 0 + 1 + 0 + 0 + + + + + + + + + removeButton + + + + 0 + 1 + 0 + 0 + + + + + + + + + textLabel2_3 + + + + 1 + 5 + 0 + 0 + + + + Value: + + + + + textLabel1_11 + + + + 1 + 5 + 0 + 0 + + + + Position: + + + + + stopPosition + + + 100 + + + % + + + + + stopValue + + + 200 + + + % + + + + + spacer12 + + + Horizontal + + + Expanding + + + + 160 + 8 + + + + - + - textLabel1_4_2_4 + textLabel1_9 - - Menuitem appearance: - - - - - thinnerMenuItems + + + 1 + 3 + 0 + 0 + - Thinner menu items - - - - - shadeMenubarOnlyWhenActive + <i><b>NOTE: </b><br> + +<u>Position</u> has a range of 0% to 100% - 0% being top/left, and 100% being bottom/right.<br> + +<u>Value</u> has a range of 0% to 200%. A value of 120% implies lightening by 20%, and a value of 80% implies darkening by 20%</i> - - Active window only + + WordBreak|AlignTop - + + + + + groupBox4 + + + Preview + + + + unnamed + + - customMenuTextColor + previewWidgetContainer - - Custom text colors (normal/selected): + + NoFrame - - - - menuitemAppearance + + Raised - + - shadeMenubars + previewColor - 3 + 0 0 0 0 - - - - menubarAppearance - - - - - customMenubarsColor - - - - - - - - borderMenuitems - - - Border - - - - - customMenuNormTextColor - - - - - - - - customMenuSelTextColor - - - - - - textLabel2 - - - Handles: - - - - - spacer4 - - - Horizontal - - - MinimumExpanding - - - - 20 - 20 - - - - - - handles - + + + + + + WStackPage + + + 17 + + + + unnamed + - toolbarBorders + shading + + + + 3 + 0 + 0 + 0 + - + - groupBox2 + customShading - Toolbars + Use Custom Values - + true unnamed - + + + spacer10 + + + Vertical + + + Expanding + + + + 4 + 15 + + + + + + shade2 + + + + 1 + 0 + 0 + 0 + + + + - textLabel1_4_2_2 + shade3 - - Appearance: + + + 1 + 0 + 0 + 0 + - + - toolbarAppearance + shade1 + + + + 1 + 0 + 0 + 0 + - + - textLabel2_2 + shade4 - - Separators: + + + 1 + 0 + 0 + 0 + - + - toolbarSeparators + shade5 + + + + 1 + 0 + 0 + 0 + - + - spacer4_2 + shade0 - - Horizontal + + + 1 + 0 + 0 + 0 + - - MinimumExpanding + + + + textLabel1_10 - - - 20 - 20 - + + + 3 + 3 + 0 + 0 + - - - - - - - - TabPage - - - Advanced - - - - unnamed - - - - gtkComboMenus - - - Gtk style comboboxes (KDE4 only) - - - - - gtkScrollViews - - - Gtk style scrollviews (KDE3 and KDE4 only) - - - - - gtkButtonOrder - - - Gtk button order - - - - - mapKdeIcons - - - Map KDE icons (Gtk2 only) - - - - - fixParentlessDialogs - - - 'Fix' parentless dialogs - - - <h2><font color="#ff0000">Warning: Experimental!</font></h1><p><p>Some applications - such as Kate, Kaffeine, and GIMP - produce dialogs that have no 'parent'. This causes the dialog to recieve an entry in the taskbar, and allows the dialog to be minimised independantly of the main application window.</p> - -<p>If you enable this option, QtCurve will try to 'fix' this by assigning the dialogs a parent.</p> - -<p><b>Note:</b> This may brake some applications, as it wiill alter the behaviour of dialogs in a way the application has not intended. Therefore, please use with care.</p> - - - - - inactiveHighlight - - - Use blended background/highlight colour for highlight of inactive elements - - - <h2><font color="#ff0000">Warning: Experimental!</font></h1><p><p>Some applications - such as Kate, Kaffeine, and GIMP - produce dialogs that have no 'parent'. This causes the dialog to recieve an entry in the taskbar, and allows the dialog to be minimised independantly of the main application window.</p> - -<p>If you enable this option, QtCurve will try to 'fix' this by assigning the dialogs a parent.</p> + + <i>QtCurve uses various hard-coded shading values to draw elements such as button frames, the background for pressed buttons, etc. The following is a brief overview of how each shade is used - use this as a guide only, as shades are used for various things.<br> -<p><b>Note:</b> This may brake some applications, as it wiill alter the behaviour of dialogs in a way the application has not intended. Therefore, please use with care.</p> - - - - - textLabel1_2 - - - Character to use for password entries: - +1 Is used for the light part of 3d elements - such as the border of tab widgets.<br> +2 Is used for the lighter shade of striped progressbars.<br> +3 Is used for the dark part of 3d elements - such as the border of tab widgets.<br> +4 Is used for the shaded border of checks and radios, toolbar borders (when set to dark), the dark part of sunken/raised slider handles, etc.<br> +5 Is used for the background of pressed widgets, and the border of toolbars (when not dark).<br> +6 Is used as the border of most widgets.</i> + + + WordBreak|AlignTop + + + - + - passwordChar + textLabel1_5 - 4 + 5 0 0 0 - - - - - - - spacer8 - - - Horizontal - - - Expanding - - - - 133 - 6 - - - - - - textLabel1_5 - Shading routine: - - - shading - - - - - spacer7 - - - Vertical - - - Expanding - - - - 20 - 203 - - - - - - spacer6_2 - - - Horizontal - - - Expanding - - - - 321 - 20 - - - - - - optionBtn - - - Options - - + + + framelessGroupBoxes + toggled(bool) + groupBoxLine + setEnabled(bool) + + + flatSbarButtons + toggled(bool) + sbarBgndAppearance + setEnabled(bool) + + + fillSlider + toggled(bool) + sliderFill + setEnabled(bool) + + + flatSbarButtons + toggled(bool) + thinSbarGroove + setEnabled(bool) + + - optionsTab + stackList appearance + sunkenAppearance round buttonEffect + focus + drawStatusBarFrames + framelessGroupBoxes + groupBoxLine + vArrows + stdSidebarButtons + darkerBorders + fadeLines + thinnerBtns + etchEntry + comboSplitter + unifyCombo + gtkComboMenus + doubleGtkComboArrow + comboBtn + customComboBtnColor + unifySpinBtns + unifySpin splitters + splitterHighlight sliderAppearance shadeSliders customSlidersColor + colorSliderMouseOver sliderStyle fillSlider + sliderFill + grooveAppearance + thinSbarGroove scrollbarType + flatSbarButtons + sbarBgndAppearance sliderThumbs progressAppearance - gradientPbGroove stripedProgress animatedProgress + fillProgress + progressGrooveAppearance + progressGrooveColor embolden defBtnIndicator coloredMouseOver highlightFactor lvAppearance + lvButton + sortedLv + customSortedLvColor + forceAlternateLvCols + selectionAppearance + squareLvSelection lvLines - tabAppearance + gtkScrollViews + highlightScrollViews + squareScrollViews + activeTabAppearance highlightTab colorSelTab + tabAppearance + tabMouseOver + roundAllTabs + borderTab + borderInactiveTab + invertBotTab + tabBgnd shadeCheckRadio customCheckRadioColor xCheck - stdFocus - vArrows - drawStatusBarFrames - stdSidebarButtons - framelessGroupBoxes - darkerBorders + smallRadio + crHighlight + crButton + crColor + titlebarAppearance + inactiveTitlebarAppearance + titlebarButtonAppearance + titlebarAlignment + colorTitlebarOnly + titlebarBorder toolbarBorders handles menubarAppearance @@ -965,32 +2684,93 @@ customMenuNormTextColor customMenuSelTextColor menubarMouseOver + colorMenubarMouseOver roundMbTopOnly menuitemAppearance borderMenuitems + menuIcons + useHighlightForMenu lighterPopupMenuBgnd + menuBgndAppearance + menuBgndGrad + menuDelay thinnerMenuItems + menuStripe + customMenuStripeColor + menuStripeAppearance + popupBorder toolbarAppearance toolbarSeparators - gtkComboMenus - gtkScrollViews + dwtAppearance gtkButtonOrder mapKdeIcons fixParentlessDialogs - inactiveHighlight + stdBtnSizes passwordChar + gradCombo + gradStops + gradBorder + stopPosition + stopValue + addButton + updateButton + removeButton + previewColor shading + shade0 + shade1 + shade2 + shade3 + shade4 + shade5 optionBtn + kpushbutton.h + kcolorbutton.h + knuminput.h + knuminput.h + kcolorbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h kcolorbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h kcolorbutton.h knuminput.h knuminput.h kcolorbutton.h kcolorbutton.h kcolorbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + kcolorbutton.h + kpushbutton.h kpushbutton.h + kpushbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + kcolorbutton.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h + knuminput.h diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..e76a565 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,25 @@ +find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt) + +if(NOT GETTEXT_MSGFMT_EXECUTABLE) + message("------\n" + "NOTE: msgfmt not found. Translations will *not* be installed\n" + "------\n") +else(NOT GETTEXT_MSGFMT_EXECUTABLE) + set(catalogname qtcurve) + add_custom_target(translations ALL) + file(GLOB PO_FILES *.po) + foreach(_poFile ${PO_FILES}) + get_filename_component(_poFileName ${_poFile} NAME) + string(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) + string(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) + if(_langCode) + get_filename_component(_lang ${_poFile} NAME_WE) + set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) + add_custom_command(TARGET translations + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} + DEPENDS ${_poFile}) + install(FILES ${_gmoFile} DESTINATION ${KDE3_LOCALE_PREFIX}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) + endif( _langCode ) + endforeach(_poFile ${PO_FILES}) +endif(NOT GETTEXT_MSGFMT_EXECUTABLE) + diff --git a/po/generate.sh b/po/generate.sh new file mode 100755 index 0000000..cf25955 --- /dev/null +++ b/po/generate.sh @@ -0,0 +1,48 @@ +#!/bin/sh +BASEDIR=".." # root of translatable sources +PROJECT="qtcurve" # project name +BUGADDR="http://sourceforge.net/tracker/?group_id=50231&atid=459007" # MSGID-Bugs +WDIR=`pwd` # working dir +echo "Preparing rc files" +cd ${BASEDIR} +# we use simple sorting to make sure the lines do not jump around too much from system to system +find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list +xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp +# additional string for KAboutData +echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp +echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp +cd ${WDIR} +echo "Done preparing rc files" + +echo "Extracting messages" +cd ${BASEDIR} +# see above on sorting +find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list +echo "rc.cpp" >> ${WDIR}/infiles.list +cd ${WDIR} +xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ + -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ + --msgid-bugs-address="${BUGADDR}" \ + --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } + +#Fix charset... +cat ${PROJECT}.pot | sed s^charset=CHARSET^charset=UTF-8^g > ${PROJECT}.pot-new +mv ${PROJECT}.pot-new ${PROJECT}.pot + +echo "Done extracting messages" + +echo "Merging translations" +catalogs=`find . -name '*.po'` +for cat in $catalogs; do + echo $cat + msgmerge -o $cat.new $cat ${PROJECT}.pot + mv $cat.new $cat +done +echo "Done merging translations" + +echo "Cleaning up" +cd ${WDIR} +rm rcfiles.list +rm infiles.list +rm rc.cpp +echo "Done" diff --git a/po/qtcurve.pot b/po/qtcurve.pot new file mode 100644 index 0000000..b9dbc98 --- /dev/null +++ b/po/qtcurve.pot @@ -0,0 +1,1423 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" +"group_id=50231&atid=459007\n" +"POT-Creation-Date: 2010-03-18 20:31+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: config/exportthemedialog.cpp:34 +msgid "Export Theme" +msgstr "" + +#: config/exportthemedialog.cpp:40 +msgid "Name:" +msgstr "" + +#: config/exportthemedialog.cpp:41 +msgid "Comment:" +msgstr "" + +#: config/exportthemedialog.cpp:42 +msgid "Destination folder:" +msgstr "" + +#: config/exportthemedialog.cpp:44 +msgid "QtCurve based theme" +msgstr "" + +#: config/exportthemedialog.cpp:64 +msgid "Name is empty!" +msgstr "" + +#: config/exportthemedialog.cpp:86 +msgid "" +"Succesfully created:\n" +"%1" +msgstr "" + +#: config/exportthemedialog.cpp:89 +msgid "Failed to create file: %1" +msgstr "" + +#: config/qtcurveconfig.cpp:146 +msgid "Select Password Character" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:696 +#. i18n: ectx: property (text), widget (QLabel) +#: config/qtcurveconfig.cpp:358 po/rc.cpp:128 rc.cpp:128 +msgid "Background" +msgstr "" + +#: config/qtcurveconfig.cpp:362 +msgid "Button" +msgstr "" + +#: config/qtcurveconfig.cpp:365 +msgid "Text" +msgstr "" + +#: config/qtcurveconfig.cpp:369 config/qtcurveconfig.cpp:411 +#: config/qtcurveconfig.cpp:464 config/qtcurveconfig.cpp:552 +msgid "None" +msgstr "" + +#: config/qtcurveconfig.cpp:373 +msgid "Custom:" +msgstr "" + +#: config/qtcurveconfig.cpp:374 +msgid "Selected background" +msgstr "" + +#: config/qtcurveconfig.cpp:377 +msgid "Blended selected background" +msgstr "" + +#: config/qtcurveconfig.cpp:378 +msgid "Menu background" +msgstr "" + +#: config/qtcurveconfig.cpp:378 config/qtcurveconfig.cpp:430 +msgid "Darken" +msgstr "" + +#: config/qtcurveconfig.cpp:385 config/qtcurveconfig.cpp:1237 +msgid "Custom gradient %1" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:712 +#. i18n: ectx: property (text), widget (QCheckBox) +#: config/qtcurveconfig.cpp:387 po/rc.cpp:134 rc.cpp:134 +msgid "Flat" +msgstr "" + +#: config/qtcurveconfig.cpp:388 +msgid "Raised" +msgstr "" + +#: config/qtcurveconfig.cpp:389 +msgid "Dull glass" +msgstr "" + +#: config/qtcurveconfig.cpp:390 +msgid "Shiny glass" +msgstr "" + +#: config/qtcurveconfig.cpp:391 +msgid "Agua" +msgstr "" + +#: config/qtcurveconfig.cpp:392 +msgid "Soft gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:393 +msgid "Standard gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:394 +msgid "Harsh gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:395 +msgid "Inverted gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:396 +msgid "Dark inverted gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:399 +msgid "Split gradient" +msgstr "" + +#: config/qtcurveconfig.cpp:402 +msgid "Bevelled" +msgstr "" + +#: config/qtcurveconfig.cpp:404 +msgid "Fade out (popup menuitems)" +msgstr "" + +#: config/qtcurveconfig.cpp:412 +msgid "Sunken lines" +msgstr "" + +#: config/qtcurveconfig.cpp:413 +msgid "Flat lines" +msgstr "" + +#: config/qtcurveconfig.cpp:414 +msgid "Dots" +msgstr "" + +#: config/qtcurveconfig.cpp:417 +msgid "Single dot (KDE4 & Gtk2 Only)" +msgstr "" + +#: config/qtcurveconfig.cpp:419 +msgid "Dashes" +msgstr "" + +#: config/qtcurveconfig.cpp:425 +msgid "Corner indicator" +msgstr "" + +#: config/qtcurveconfig.cpp:426 +msgid "Font color thin border" +msgstr "" + +#: config/qtcurveconfig.cpp:427 +msgid "Selected background thick border" +msgstr "" + +#: config/qtcurveconfig.cpp:428 +msgid "Selected background tinting" +msgstr "" + +#: config/qtcurveconfig.cpp:429 +msgid "A slight glow" +msgstr "" + +#: config/qtcurveconfig.cpp:431 +msgid "Use selected background color" +msgstr "" + +#: config/qtcurveconfig.cpp:432 +msgid "No indicator" +msgstr "" + +#: config/qtcurveconfig.cpp:437 +msgid "KDE" +msgstr "" + +#: config/qtcurveconfig.cpp:438 +msgid "MS Windows" +msgstr "" + +#: config/qtcurveconfig.cpp:439 +msgid "Platinum" +msgstr "" + +#: config/qtcurveconfig.cpp:440 +msgid "NeXT" +msgstr "" + +#: config/qtcurveconfig.cpp:441 +msgid "No buttons" +msgstr "" + +#: config/qtcurveconfig.cpp:446 +msgid "Square" +msgstr "" + +#: config/qtcurveconfig.cpp:447 +msgid "Slightly rounded" +msgstr "" + +#: config/qtcurveconfig.cpp:448 +msgid "Fully rounded" +msgstr "" + +#: config/qtcurveconfig.cpp:449 +msgid "Extra rounded (KDE4 & Gtk2)" +msgstr "" + +#: config/qtcurveconfig.cpp:450 +msgid "Max rounded (KDE4 & Gtk2)" +msgstr "" + +#: config/qtcurveconfig.cpp:455 +msgid "No coloration" +msgstr "" + +#: config/qtcurveconfig.cpp:456 +msgid "Color border" +msgstr "" + +#: config/qtcurveconfig.cpp:457 +msgid "Thick color border" +msgstr "" + +#: config/qtcurveconfig.cpp:458 +msgid "Plastik style" +msgstr "" + +#: config/qtcurveconfig.cpp:459 +msgid "Glow" +msgstr "" + +#: config/qtcurveconfig.cpp:465 +msgid "Light" +msgstr "" + +#: config/qtcurveconfig.cpp:466 +msgid "Dark" +msgstr "" + +#: config/qtcurveconfig.cpp:467 +msgid "Light (all sides)" +msgstr "" + +#: config/qtcurveconfig.cpp:468 +msgid "Dark (all sides)" +msgstr "" + +#: config/qtcurveconfig.cpp:473 config/qtcurveconfig.cpp:488 +#: config/qtcurveconfig.cpp:496 +msgid "Plain" +msgstr "" + +#: config/qtcurveconfig.cpp:474 +msgid "Etched" +msgstr "" + +#: config/qtcurveconfig.cpp:475 +msgid "Shadowed" +msgstr "" + +#: config/qtcurveconfig.cpp:480 +msgid "Simple" +msgstr "" + +#: config/qtcurveconfig.cpp:481 +msgid "Use HSL color space" +msgstr "" + +#: config/qtcurveconfig.cpp:482 +msgid "Use HSV color space" +msgstr "" + +#: config/qtcurveconfig.cpp:483 +msgid "Use HCY color space" +msgstr "" + +#: config/qtcurveconfig.cpp:489 +msgid "Stripes" +msgstr "" + +#: config/qtcurveconfig.cpp:490 +msgid "Diagonal stripes" +msgstr "" + +#: config/qtcurveconfig.cpp:491 +msgid "Faded stripes" +msgstr "" + +#: config/qtcurveconfig.cpp:497 +msgid "Round" +msgstr "" + +#: config/qtcurveconfig.cpp:498 +msgid "Plain - rotated" +msgstr "" + +#: config/qtcurveconfig.cpp:499 +msgid "Round - rotated" +msgstr "" + +#: config/qtcurveconfig.cpp:500 +msgid "Triangular" +msgstr "" + +#: config/qtcurveconfig.cpp:501 +msgid "Circular" +msgstr "" + +#: config/qtcurveconfig.cpp:506 +msgid "Base color" +msgstr "" + +#: config/qtcurveconfig.cpp:507 +msgid "Background color" +msgstr "" + +#: config/qtcurveconfig.cpp:508 +msgid "Darkened background color" +msgstr "" + +#: config/qtcurveconfig.cpp:513 +msgid "Standard (dotted)" +msgstr "" + +#: config/qtcurveconfig.cpp:514 +msgid "Highlight color" +msgstr "" + +#: config/qtcurveconfig.cpp:515 +msgid "Highlight color (full size)" +msgstr "" + +#: config/qtcurveconfig.cpp:516 +msgid "Highlight color, full, and fill (Gtk2 & KDE4 only)" +msgstr "" + +#: config/qtcurveconfig.cpp:517 +msgid "Line drawn with highlight color" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:877 +#. i18n: ectx: property (text), widget (QCheckBox) +#: config/qtcurveconfig.cpp:522 po/rc.cpp:170 rc.cpp:170 +msgid "No border" +msgstr "" + +#: config/qtcurveconfig.cpp:523 +msgid "Light border" +msgstr "" + +#: config/qtcurveconfig.cpp:524 +msgid "3D border (light only)" +msgstr "" + +#: config/qtcurveconfig.cpp:525 +msgid "3D border (dark and light)" +msgstr "" + +#: config/qtcurveconfig.cpp:526 +msgid "Shine" +msgstr "" + +#: config/qtcurveconfig.cpp:531 +msgid "Left" +msgstr "" + +#: config/qtcurveconfig.cpp:532 +msgid "Center (between controls)" +msgstr "" + +#: config/qtcurveconfig.cpp:533 +msgid "Center (full width)" +msgstr "" + +#: config/qtcurveconfig.cpp:534 +msgid "Right" +msgstr "" + +#: config/qtcurveconfig.cpp:539 +msgid "Highlight on top" +msgstr "" + +#: config/qtcurveconfig.cpp:540 +msgid "Highlight on bottom" +msgstr "" + +#: config/qtcurveconfig.cpp:541 +msgid "Add a slight glow" +msgstr "" + +#: config/qtcurveconfig.cpp:546 +msgid "Top to bottom" +msgstr "" + +#: config/qtcurveconfig.cpp:547 +msgid "Left to right" +msgstr "" + +#: config/qtcurveconfig.cpp:553 +msgid "New style (KDE and Gtk2 similar)" +msgstr "" + +#: config/qtcurveconfig.cpp:554 +msgid "Old style (KDE and Gtk2 different)" +msgstr "" + +#: config/qtcurveconfig.cpp:631 +msgid " pixels" +msgstr "" + +#: config/qtcurveconfig.cpp:768 +msgid "Predefined Style" +msgstr "" + +#: config/qtcurveconfig.cpp:770 +msgid "Import..." +msgstr "" + +#: config/qtcurveconfig.cpp:771 +msgid "Export..." +msgstr "" + +#: config/qtcurveconfig.cpp:774 +msgid "Export Theme..." +msgstr "" + +#: config/qtcurveconfig.cpp:1009 +msgid "General" +msgstr "" + +#: config/qtcurveconfig.cpp:1010 +msgid "Combos" +msgstr "" + +#: config/qtcurveconfig.cpp:1011 +msgid "Spin Buttons" +msgstr "" + +#: config/qtcurveconfig.cpp:1012 +msgid "Splitters" +msgstr "" + +#: config/qtcurveconfig.cpp:1013 +msgid "Sliders and Scrollbars" +msgstr "" + +#: config/qtcurveconfig.cpp:1014 +msgid "Progressbars" +msgstr "" + +#: config/qtcurveconfig.cpp:1015 +msgid "Default Button" +msgstr "" + +#: config/qtcurveconfig.cpp:1016 +msgid "Mouse-over" +msgstr "" + +#: config/qtcurveconfig.cpp:1017 +msgid "Listviews" +msgstr "" + +#: config/qtcurveconfig.cpp:1018 +msgid "Scrollviews" +msgstr "" + +#: config/qtcurveconfig.cpp:1019 +msgid "Tabs" +msgstr "" + +#: config/qtcurveconfig.cpp:1020 +msgid "Checks and Radios" +msgstr "" + +#: config/qtcurveconfig.cpp:1021 +msgid "Windows" +msgstr "" + +#: config/qtcurveconfig.cpp:1022 +msgid "Menus and Toolbars" +msgstr "" + +#: config/qtcurveconfig.cpp:1023 +msgid "Dock windows" +msgstr "" + +#: config/qtcurveconfig.cpp:1024 +msgid "Advanced Settings" +msgstr "" + +#: config/qtcurveconfig.cpp:1025 +msgid "Custom Gradients" +msgstr "" + +#: config/qtcurveconfig.cpp:1026 +msgid "Custom Shades" +msgstr "" + +#: config/qtcurveconfig.cpp:1250 +msgid "Add" +msgstr "" + +#: config/qtcurveconfig.cpp:1251 +msgid "Remove" +msgstr "" + +#: config/qtcurveconfig.cpp:1252 +msgid "Update" +msgstr "" + +#: config/qtcurveconfig.cpp:1362 config/qtcurveconfig.cpp:1372 +msgid "*" +msgstr "" + +#: config/qtcurveconfig.cpp:1388 +msgid "" +"Could not write to file:\n" +"%1" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:16 +#. i18n: ectx: property (caption), widget (QWidget) +#: po/rc.cpp:3 rc.cpp:3 +msgid "Form1" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:38 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:6 rc.cpp:6 +msgid "title" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:47 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:9 rc.cpp:9 +msgid "Category" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:79 +#. i18n: ectx: property (text), widget (KPushButton) +#: po/rc.cpp:12 rc.cpp:12 +msgid "Options" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:102 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:15 rc.cpp:15 +msgid "" +"The setting here affects the general appearance - and will be applied to " +"buttons, combo boxes, and spin buttons." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:110 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:559 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1687 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:110 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:559 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1687 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:18 po/rc.cpp:103 po/rc.cpp:318 rc.cpp:18 rc.cpp:103 rc.cpp:318 +msgid "Appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:135 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Focus rectangle:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:143 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:24 rc.cpp:24 +msgid "Button effect:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:156 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:27 rc.cpp:27 +msgid "Darker borders" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:164 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Standard buttons for sidebars" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:167 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:33 rc.cpp:33 +msgid "" +"Select this to have the sidebar buttons in konqueror, kate, kaffeine, " +"ktorrent, drawn as per normal buttons - otherwise they will be drawn in a " +"more flat style." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:180 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:36 rc.cpp:36 +msgid "Roundedness:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:188 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:39 rc.cpp:39 +msgid "'V' style arrows" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:224 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:42 rc.cpp:42 +msgid "Frameless groupboxes," +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:240 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:45 rc.cpp:45 +msgid "draw line after title (KDE4 && Gtk2)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:250 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:48 rc.cpp:48 +msgid "Draw statusbar frames" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:263 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:51 rc.cpp:51 +msgid "Sunken appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:271 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:54 rc.cpp:54 +msgid "Draw fading lines (KDE4 && Gtk2)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:282 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:58 rc.cpp:58 +msgid "Thinner buttons when etched/shadowed" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:310 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:62 rc.cpp:62 +msgid "Etch entries and scrollviews when button effect set to etched/shadowed." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:331 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:65 rc.cpp:65 +msgid "Draw splitter" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:334 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:68 rc.cpp:68 +msgid "" +"This option controls whether a line is drawn near non-editable combo box " +"arrows." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:342 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:71 rc.cpp:71 +msgid "Draw arrow of editable combos within edit field" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:384 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:74 rc.cpp:74 +msgid "Button shade:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:405 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Gtk style comboboxes (KDE4)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:408 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:81 rc.cpp:81 +msgid "" +"In Gtk, the list that is attached to a combo-box appears in the same style " +"as a popup-menu. KDE4 has the ability to mimic this look." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:416 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:84 rc.cpp:84 +msgid "Double arrows for Gtk style comboboxes" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:437 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:87 rc.cpp:87 +msgid "Combine both buttons" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:445 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:90 rc.cpp:90 +msgid "Draw arrows within edit field" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:483 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:93 rc.cpp:93 +msgid "Markings:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:508 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:996 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1272 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1337 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1469 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1892 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2286 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2297 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:508 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:996 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1272 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1337 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1469 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1892 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2286 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2297 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#: po/rc.cpp:97 po/rc.cpp:193 po/rc.cpp:240 po/rc.cpp:259 po/rc.cpp:285 +#: po/rc.cpp:367 po/rc.cpp:433 po/rc.cpp:437 rc.cpp:97 rc.cpp:193 rc.cpp:240 +#: rc.cpp:259 rc.cpp:285 rc.cpp:367 rc.cpp:433 rc.cpp:437 +#, no-c-format +msgid "%" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:538 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1477 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:538 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1477 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:100 po/rc.cpp:288 rc.cpp:100 rc.cpp:288 +msgid "Background mouse-over highlight:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:567 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:988 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1395 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1754 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:567 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:988 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1395 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1754 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:106 po/rc.cpp:189 po/rc.cpp:269 po/rc.cpp:330 rc.cpp:106 +#: rc.cpp:189 rc.cpp:269 rc.cpp:330 +msgid "Coloration:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:583 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:109 rc.cpp:109 +msgid "This color setting affects both scrollbar sliders, and other sliders." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:616 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:704 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:616 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:704 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:113 po/rc.cpp:131 rc.cpp:113 rc.cpp:131 +msgid "" +"This appearance setting affects both scrollbar sliders, and other sliders." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:664 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:116 rc.cpp:116 +msgid "Style:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:672 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:119 rc.cpp:119 +msgid "Slider thumbs:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:680 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:122 rc.cpp:122 +msgid "Slider width:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:688 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:125 rc.cpp:125 +msgid "Fill used part of groove:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:720 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:137 rc.cpp:137 +msgid "" +"This setting only affects standard sliders - i.e. not scrollbar sliders. " +"'Triangular' is a very similar style to plastik's sliders." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:728 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:140 rc.cpp:140 +msgid "Groove appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:736 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:143 rc.cpp:143 +msgid "Thin scrollbar groove" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:744 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:146 rc.cpp:146 +msgid "Scrollbar buttons:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:766 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:149 rc.cpp:149 +msgid "" +"This controls the position, and number, of buttons on a scrollbar.\n" +"\n" +"KDE - 1 button at the top/left, and two at the bottom/right\n" +"Windows - 1 botton at each end\n" +"Platinum - no buttons at the top/left, two at bottom/right\n" +"Next - two buttons at the top/left, none at bottom/right\n" +"None - no buttons, only the slider" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:787 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:158 rc.cpp:158 +msgid "Color only on mouse-over" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:818 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:161 rc.cpp:161 +msgid "Animated" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:843 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:164 rc.cpp:164 +msgid "Groove:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:851 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:167 rc.cpp:167 +msgid "Bar:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:880 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:173 rc.cpp:173 +msgid "" +"Enable this option to remove the 1 pixel border around the filled element." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:914 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:176 rc.cpp:176 +msgid "Indicate with:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:922 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:179 rc.cpp:179 +msgid "Embolden text" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:977 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:182 rc.cpp:182 +msgid "Highlight by:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:980 +#. i18n: ectx: property (whatsThis), widget (QLabel) +#: po/rc.cpp:186 rc.cpp:186 +#, no-c-format +msgid "" +"This controls the % that widgets will be highlighted by when the mouse " +"hovers over them" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1064 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:196 rc.cpp:196 +msgid "Button color" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1072 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:199 rc.cpp:199 +msgid "Header appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1085 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:202 rc.cpp:202 +msgid "Shade header of sorted column:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1109 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:206 rc.cpp:206 +msgid "Selection appearance (KDE4 && Gtk2):" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1139 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:209 rc.cpp:209 +msgid "Force alternate colors" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1147 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:212 rc.cpp:212 +msgid "Lines between items:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1160 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:215 rc.cpp:215 +msgid "Square selection" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1181 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:218 rc.cpp:218 +msgid "Scrollbars on the outside" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1189 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:221 rc.cpp:221 +msgid "Highlight on focus (KDE)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1197 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:224 rc.cpp:224 +msgid "" +"Always draw with a square frame - regardless of the general round setting." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1235 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:227 rc.cpp:227 +msgid "Active tab appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1243 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:230 rc.cpp:230 +msgid "Inactive tab appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1261 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:233 rc.cpp:233 +msgid "Highlight" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1264 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:236 rc.cpp:236 +msgid "This will cause a coloured stripe to be drawn over the current tab." +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1275 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#: po/rc.cpp:243 rc.cpp:243 +msgid "Tint by " +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1283 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:246 rc.cpp:246 +msgid "Mouse-over:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1296 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:249 rc.cpp:249 +msgid "Round all tabs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1304 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:252 rc.cpp:252 +msgid "Draw a light border around tab widget" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1312 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:255 rc.cpp:255 +msgid "Draw inner border of inactive tabs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1345 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:262 rc.cpp:262 +msgid "Alter background by:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1353 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:265 rc.cpp:265 +msgid "Invert shade of bottom tabs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1403 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:272 rc.cpp:272 +msgid "'X' style checkmarks" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1445 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:275 rc.cpp:275 +msgid "Button like" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1453 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:278 rc.cpp:278 +msgid "Small radio 'dot'" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1461 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:281 rc.cpp:281 +msgid "Color when selected" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1515 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:291 rc.cpp:291 +msgid "Button Appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1533 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1541 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1533 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1541 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:294 po/rc.cpp:297 rc.cpp:294 rc.cpp:297 +msgid "Titlebar Appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1554 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:300 rc.cpp:300 +msgid "Text alignment:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1567 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:303 rc.cpp:303 +msgid "Color titlebar only (KDE4)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1592 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:306 rc.cpp:306 +msgid "Light border (KDE4)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1613 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:309 rc.cpp:309 +msgid "Handles:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1621 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:312 rc.cpp:312 +msgid "Border:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1673 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:315 rc.cpp:315 +msgid "Toolbars" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1700 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:321 rc.cpp:321 +msgid "Separators:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1732 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:324 rc.cpp:324 +msgid "Menus" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1746 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:327 rc.cpp:327 +msgid "Apply coloration to active window only" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1762 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:333 rc.cpp:333 +msgid "Menubar appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1770 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:336 rc.cpp:336 +msgid "Menuitem appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1778 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:339 rc.cpp:339 +msgid "Use 'highlight' color for active menuitems" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1786 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:342 rc.cpp:342 +msgid "Stripe (KDE):" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1794 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:345 rc.cpp:345 +msgid "Border popupmenus" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1802 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:348 rc.cpp:348 +msgid "Sub-menu delay:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1818 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:351 rc.cpp:351 +msgid "Color menubar items on mouse-over" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1826 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:354 rc.cpp:354 +msgid "Custom text colors (active/normal):" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1871 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:360 rc.cpp:360 +msgid "Thinner menu items" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1879 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:363 rc.cpp:363 +msgid "Popup-menu background:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1928 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:370 rc.cpp:370 +msgid "Border menuitems" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1936 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:373 rc.cpp:373 +msgid "Draw icons" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1944 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:376 rc.cpp:376 +msgid "Round selected menubar items on top only" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1960 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:380 rc.cpp:380 +msgid "Enable mouse-over for menubar items" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1983 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:383 rc.cpp:383 +msgid "Titlebar appearance:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2043 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:386 rc.cpp:386 +msgid "'Fix' parentless dialogs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2050 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:389 rc.cpp:389 +msgid "" +"

Warning: Experimental!

Some " +"applications - such as Kate, Kaffeine, and GIMP - produce dialogs that have " +"no 'parent'. This causes the dialog to recieve an entry in the taskbar, and " +"allows the dialog to be minimised independantly of the main application " +"window.

\n" +"\n" +"

If you enable this option, QtCurve will try to 'fix' this by assigning " +"the dialogs a parent.

\n" +"\n" +"

Note: This may brake some applications, as it wiill alter the " +"behaviour of dialogs in a way the application has not intended. Therefore, " +"please use with care.

" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2058 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:396 rc.cpp:396 +msgid "Map KDE icons (Gtk2)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2066 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:399 rc.cpp:399 +msgid "Gtk button order" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2091 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:402 rc.cpp:402 +msgid "Character to use for password entries:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2115 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:406 rc.cpp:406 +msgid "Don't make 'auto-default' buttons larger (KDE4)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2141 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:409 rc.cpp:409 +msgid "Settings" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2155 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:413 rc.cpp:413 +#, no-c-format +msgid "Position (%)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2166 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:417 rc.cpp:417 +#, no-c-format +msgid "Value (%)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2192 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:420 rc.cpp:420 +msgid "Gradient Stop" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2259 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:426 rc.cpp:426 +msgid "Value:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2275 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:429 rc.cpp:429 +msgid "Position:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2336 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:441 rc.cpp:441 +#, no-c-format +msgid "" +"NOTE:
\n" +"\n" +"Position has a range of 0% to 100% - 0% being top/left, and 100% " +"being bottom/right.
\n" +"\n" +"Value has a range of 0% to 200%. A value of 120% implies lightening " +"by 20%, and a value of 80% implies darkening by 20%
" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2349 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:448 rc.cpp:448 +msgid "Preview" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2415 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:452 rc.cpp:452 +msgid "Use Custom Values" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2539 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:455 rc.cpp:455 +msgid "" +"QtCurve uses various hard-coded shading values to draw elements such as " +"button frames, the background for pressed buttons, etc. The following is a " +"brief overview of how each shade is used - use this as a guide only, as " +"shades are used for various things.
\n" +"\n" +"1 Is used for the light part of 3d elements - such as the border of tab " +"widgets.
\n" +"2 Is used for the lighter shade of striped progressbars.
\n" +"3 Is used for the dark part of 3d elements - such as the border of tab " +"widgets.
\n" +"4 Is used for the shaded border of checks and radios, toolbar borders (when " +"set to dark), the dark part of sunken/raised slider handles, etc.
\n" +"5 Is used for the background of pressed widgets, and the border of toolbars " +"(when not dark).
\n" +"6 Is used as the border of most widgets.
" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2560 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:465 rc.cpp:465 +msgid "Shading routine:" +msgstr "" + +#: po/rc.cpp:466 rc.cpp:466 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: po/rc.cpp:467 rc.cpp:467 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..1153fd3 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,1509 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Necmettin Begiter , 2009. +msgid "" +msgstr "" +"Project-Id-Version: kde3-qtcurve\n" +"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" +"group_id=50231&atid=459007\n" +"POT-Creation-Date: 2010-03-18 20:31+0000\n" +"PO-Revision-Date: 2009-07-04 01:44+0300\n" +"Last-Translator: Necmettin Begiter \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: config/exportthemedialog.cpp:34 +msgid "Export Theme" +msgstr "Temayı Dışarı Aktar" + +#: config/exportthemedialog.cpp:40 +msgid "Name:" +msgstr "İsim:" + +#: config/exportthemedialog.cpp:41 +msgid "Comment:" +msgstr "Yorum:" + +#: config/exportthemedialog.cpp:42 +msgid "Destination folder:" +msgstr "Hedef klasör:" + +#: config/exportthemedialog.cpp:44 +msgid "QtCurve based theme" +msgstr "QtCurve tabanlı tema" + +#: config/exportthemedialog.cpp:64 +msgid "Name is empty!" +msgstr "İsim boş!" + +#: config/exportthemedialog.cpp:86 +msgid "" +"Succesfully created:\n" +"%1" +msgstr "" +"Başarıyla oluşturuldu:\n" +"%1" + +#: config/exportthemedialog.cpp:89 +msgid "Failed to create file: %1" +msgstr "Dosya oluşturulamadı: %1" + +#: config/qtcurveconfig.cpp:146 +msgid "Select Password Character" +msgstr "Parola Karakterini Seç" + +#. i18n: file: config/qtcurveconfigbase.ui:696 +#. i18n: ectx: property (text), widget (QLabel) +#: config/qtcurveconfig.cpp:358 po/rc.cpp:128 rc.cpp:128 +msgid "Background" +msgstr "Arkaplan" + +#: config/qtcurveconfig.cpp:362 +msgid "Button" +msgstr "Düğme" + +#: config/qtcurveconfig.cpp:365 +msgid "Text" +msgstr "Metin" + +#: config/qtcurveconfig.cpp:369 config/qtcurveconfig.cpp:411 +#: config/qtcurveconfig.cpp:464 config/qtcurveconfig.cpp:552 +msgid "None" +msgstr "Yok" + +#: config/qtcurveconfig.cpp:373 +msgid "Custom:" +msgstr "Özel:" + +#: config/qtcurveconfig.cpp:374 +msgid "Selected background" +msgstr "Seçili arkaplan" + +#: config/qtcurveconfig.cpp:377 +msgid "Blended selected background" +msgstr "Seçili arkaplanla harmanlanmış" + +#: config/qtcurveconfig.cpp:378 +msgid "Menu background" +msgstr "Menü arkaplanı" + +#: config/qtcurveconfig.cpp:378 config/qtcurveconfig.cpp:430 +msgid "Darken" +msgstr "Karart" + +#: config/qtcurveconfig.cpp:385 config/qtcurveconfig.cpp:1237 +msgid "Custom gradient %1" +msgstr "Özel eğimli %1" + +#. i18n: file: config/qtcurveconfigbase.ui:712 +#. i18n: ectx: property (text), widget (QCheckBox) +#: config/qtcurveconfig.cpp:387 po/rc.cpp:134 rc.cpp:134 +msgid "Flat" +msgstr "Düz" + +#: config/qtcurveconfig.cpp:388 +msgid "Raised" +msgstr "Yükseltilmiş" + +#: config/qtcurveconfig.cpp:389 +msgid "Dull glass" +msgstr "Donuk cam" + +#: config/qtcurveconfig.cpp:390 +msgid "Shiny glass" +msgstr "Parlak cam" + +#: config/qtcurveconfig.cpp:391 +msgid "Agua" +msgstr "" + +#: config/qtcurveconfig.cpp:392 +msgid "Soft gradient" +msgstr "Yumuşak eğimli" + +#: config/qtcurveconfig.cpp:393 +msgid "Standard gradient" +msgstr "Standart eğimli" + +#: config/qtcurveconfig.cpp:394 +msgid "Harsh gradient" +msgstr "Sert eğimli" + +#: config/qtcurveconfig.cpp:395 +msgid "Inverted gradient" +msgstr "Ters eğimli" + +#: config/qtcurveconfig.cpp:396 +#, fuzzy +msgid "Dark inverted gradient" +msgstr "Ters eğimli" + +#: config/qtcurveconfig.cpp:399 +msgid "Split gradient" +msgstr "Ayrık eğimli" + +#: config/qtcurveconfig.cpp:402 +msgid "Bevelled" +msgstr "Eğik" + +#: config/qtcurveconfig.cpp:404 +msgid "Fade out (popup menuitems)" +msgstr "Sön (açılır menü öğeleri)" + +#: config/qtcurveconfig.cpp:412 +msgid "Sunken lines" +msgstr "Çökmüş çizgiler" + +#: config/qtcurveconfig.cpp:413 +msgid "Flat lines" +msgstr "Düz çizgiler" + +#: config/qtcurveconfig.cpp:414 +msgid "Dots" +msgstr "Noktalar" + +#: config/qtcurveconfig.cpp:417 +#, fuzzy +msgid "Single dot (KDE4 & Gtk2 Only)" +msgstr "En fazla yuvarlatılmış (KDE4 ve Gtk2)" + +#: config/qtcurveconfig.cpp:419 +msgid "Dashes" +msgstr "Kesik çizgiler" + +#: config/qtcurveconfig.cpp:425 +msgid "Corner indicator" +msgstr "Köşe belirteci" + +#: config/qtcurveconfig.cpp:426 +msgid "Font color thin border" +msgstr "Font rengi, ince kenar" + +#: config/qtcurveconfig.cpp:427 +msgid "Selected background thick border" +msgstr "Seçili arkaplan, kalın kenar" + +#: config/qtcurveconfig.cpp:428 +msgid "Selected background tinting" +msgstr "Seçili arkaplan tonlama" + +#: config/qtcurveconfig.cpp:429 +msgid "A slight glow" +msgstr "Hafif bir parlama" + +#: config/qtcurveconfig.cpp:431 +#, fuzzy +msgid "Use selected background color" +msgstr "Seçili arkaplan" + +#: config/qtcurveconfig.cpp:432 +msgid "No indicator" +msgstr "Belirteç yok" + +#: config/qtcurveconfig.cpp:437 +msgid "KDE" +msgstr "KDE" + +#: config/qtcurveconfig.cpp:438 +msgid "MS Windows" +msgstr "MS Windows" + +#: config/qtcurveconfig.cpp:439 +msgid "Platinum" +msgstr "Platin" + +#: config/qtcurveconfig.cpp:440 +msgid "NeXT" +msgstr "NeXT" + +#: config/qtcurveconfig.cpp:441 +msgid "No buttons" +msgstr "Düğme yok" + +#: config/qtcurveconfig.cpp:446 +msgid "Square" +msgstr "Köşeli" + +#: config/qtcurveconfig.cpp:447 +msgid "Slightly rounded" +msgstr "Hafif yuvarlatılmış" + +#: config/qtcurveconfig.cpp:448 +msgid "Fully rounded" +msgstr "Tam yuvarlatılmış" + +#: config/qtcurveconfig.cpp:449 +msgid "Extra rounded (KDE4 & Gtk2)" +msgstr "Fazladan yuvarlatılmış (KDE4 ve Gtk2)" + +#: config/qtcurveconfig.cpp:450 +msgid "Max rounded (KDE4 & Gtk2)" +msgstr "En fazla yuvarlatılmış (KDE4 ve Gtk2)" + +#: config/qtcurveconfig.cpp:455 +msgid "No coloration" +msgstr "Renklendirme yok" + +#: config/qtcurveconfig.cpp:456 +msgid "Color border" +msgstr "Kenarlar renklendirilmiş" + +#: config/qtcurveconfig.cpp:457 +msgid "Thick color border" +msgstr "Kenarlar kalın renklendirilmiş" + +#: config/qtcurveconfig.cpp:458 +msgid "Plastik style" +msgstr "Plastik biçemi" + +#: config/qtcurveconfig.cpp:459 +msgid "Glow" +msgstr "Parlama" + +#: config/qtcurveconfig.cpp:465 +msgid "Light" +msgstr "Açık renk" + +#: config/qtcurveconfig.cpp:466 +msgid "Dark" +msgstr "Koyu renk" + +#: config/qtcurveconfig.cpp:467 +msgid "Light (all sides)" +msgstr "Açık renk (tüm kenarlar)" + +#: config/qtcurveconfig.cpp:468 +msgid "Dark (all sides)" +msgstr "Koyu renk (tüm kenarlar)" + +#: config/qtcurveconfig.cpp:473 config/qtcurveconfig.cpp:488 +#: config/qtcurveconfig.cpp:496 +msgid "Plain" +msgstr "Düz" + +#: config/qtcurveconfig.cpp:474 +msgid "Etched" +msgstr "Damgalı" + +#: config/qtcurveconfig.cpp:475 +msgid "Shadowed" +msgstr "Gölgeli" + +#: config/qtcurveconfig.cpp:480 +msgid "Simple" +msgstr "Basit" + +#: config/qtcurveconfig.cpp:481 +msgid "Use HSL color space" +msgstr "HSL renk uzayı kullan" + +#: config/qtcurveconfig.cpp:482 +msgid "Use HSV color space" +msgstr "HSV renk uzayı kullan" + +#: config/qtcurveconfig.cpp:483 +msgid "Use HCY color space" +msgstr "HCY renk uzayı kullan" + +#: config/qtcurveconfig.cpp:489 +#, fuzzy +msgid "Stripes" +msgstr "Çizgili" + +#: config/qtcurveconfig.cpp:490 +msgid "Diagonal stripes" +msgstr "Köşegen çizgili" + +#: config/qtcurveconfig.cpp:491 +#, fuzzy +msgid "Faded stripes" +msgstr "Köşegen çizgili" + +#: config/qtcurveconfig.cpp:497 +msgid "Round" +msgstr "Yuvarlak" + +#: config/qtcurveconfig.cpp:498 +msgid "Plain - rotated" +msgstr "Düz - çevrilmiş" + +#: config/qtcurveconfig.cpp:499 +msgid "Round - rotated" +msgstr "Yuvarlak - çevrilmiş" + +#: config/qtcurveconfig.cpp:500 +msgid "Triangular" +msgstr "Üç köşeli" + +#: config/qtcurveconfig.cpp:501 +msgid "Circular" +msgstr "" + +#: config/qtcurveconfig.cpp:506 +msgid "Base color" +msgstr "Taban renk" + +#: config/qtcurveconfig.cpp:507 +msgid "Background color" +msgstr "Arkaplan rengi" + +#: config/qtcurveconfig.cpp:508 +msgid "Darkened background color" +msgstr "Karartılmış arkaplan rengi" + +#: config/qtcurveconfig.cpp:513 +msgid "Standard (dotted)" +msgstr "Standart (noktalı)" + +#: config/qtcurveconfig.cpp:514 +msgid "Highlight color" +msgstr "Vurgu rengi" + +#: config/qtcurveconfig.cpp:515 +msgid "Highlight color (full size)" +msgstr "Vurgu rengi (tam boyut)" + +#: config/qtcurveconfig.cpp:516 +msgid "Highlight color, full, and fill (Gtk2 & KDE4 only)" +msgstr "Vurgu rengi, dolu, ve doldur (sadece Gtk2 ve KDE4)" + +#: config/qtcurveconfig.cpp:517 +msgid "Line drawn with highlight color" +msgstr "Vurgu rengiyle çizilmiş çizgi" + +#. i18n: file: config/qtcurveconfigbase.ui:877 +#. i18n: ectx: property (text), widget (QCheckBox) +#: config/qtcurveconfig.cpp:522 po/rc.cpp:170 rc.cpp:170 +msgid "No border" +msgstr "Kenarlık yok" + +#: config/qtcurveconfig.cpp:523 +msgid "Light border" +msgstr "Açık renk kenarlık" + +#: config/qtcurveconfig.cpp:524 +msgid "3D border (light only)" +msgstr "3B kenarlık (sadece açık renk)" + +#: config/qtcurveconfig.cpp:525 +msgid "3D border (dark and light)" +msgstr "3B kenarlık (açık ve koyu renk)" + +#: config/qtcurveconfig.cpp:526 +msgid "Shine" +msgstr "" + +#: config/qtcurveconfig.cpp:531 +msgid "Left" +msgstr "Sol" + +#: config/qtcurveconfig.cpp:532 +msgid "Center (between controls)" +msgstr "Merkez (kontroller arası)" + +#: config/qtcurveconfig.cpp:533 +msgid "Center (full width)" +msgstr "Merkez (tam genişlik)" + +#: config/qtcurveconfig.cpp:534 +msgid "Right" +msgstr "Sağ" + +#: config/qtcurveconfig.cpp:539 +msgid "Highlight on top" +msgstr "Vurgu yukarıda" + +#: config/qtcurveconfig.cpp:540 +msgid "Highlight on bottom" +msgstr "Vurgu aşağıda" + +#: config/qtcurveconfig.cpp:541 +msgid "Add a slight glow" +msgstr "Hafif bir parlama ekle" + +#: config/qtcurveconfig.cpp:546 +msgid "Top to bottom" +msgstr "Yukarıdan aşağıya" + +#: config/qtcurveconfig.cpp:547 +msgid "Left to right" +msgstr "Soldan sağa" + +#: config/qtcurveconfig.cpp:553 +msgid "New style (KDE and Gtk2 similar)" +msgstr "Yeni biçem (KDE ve Gtk2 benzer)" + +#: config/qtcurveconfig.cpp:554 +msgid "Old style (KDE and Gtk2 different)" +msgstr "Eski biçem (KDE ve Gtk2 farklı)" + +#: config/qtcurveconfig.cpp:631 +msgid " pixels" +msgstr " piksel" + +#: config/qtcurveconfig.cpp:768 +msgid "Predefined Style" +msgstr "Hazır Biçem" + +#: config/qtcurveconfig.cpp:770 +msgid "Import..." +msgstr "İçeri Aktar..." + +#: config/qtcurveconfig.cpp:771 +msgid "Export..." +msgstr "Dışarı Aktar..." + +#: config/qtcurveconfig.cpp:774 +msgid "Export Theme..." +msgstr "Temayı Dışarı Aktar..." + +#: config/qtcurveconfig.cpp:1009 +msgid "General" +msgstr "Genel" + +#: config/qtcurveconfig.cpp:1010 +msgid "Combos" +msgstr "Birleşik Kutular" + +#: config/qtcurveconfig.cpp:1011 +msgid "Spin Buttons" +msgstr "Çevirme Düğmeleri" + +#: config/qtcurveconfig.cpp:1012 +msgid "Splitters" +msgstr "Ayraçlar" + +#: config/qtcurveconfig.cpp:1013 +msgid "Sliders and Scrollbars" +msgstr "Sürgüler ve Kaydırma Çubukları" + +#: config/qtcurveconfig.cpp:1014 +msgid "Progressbars" +msgstr "İlerleme Çubukları" + +#: config/qtcurveconfig.cpp:1015 +msgid "Default Button" +msgstr "Varsayılan Düğme" + +#: config/qtcurveconfig.cpp:1016 +msgid "Mouse-over" +msgstr "Fare Altında" + +#: config/qtcurveconfig.cpp:1017 +msgid "Listviews" +msgstr "Listeler" + +#: config/qtcurveconfig.cpp:1018 +msgid "Scrollviews" +msgstr "Kaydırma Kutuları" + +#: config/qtcurveconfig.cpp:1019 +msgid "Tabs" +msgstr "Sekmeler" + +#: config/qtcurveconfig.cpp:1020 +msgid "Checks and Radios" +msgstr "İşaretleme ve Seçme Kutuları" + +#: config/qtcurveconfig.cpp:1021 +#, fuzzy +msgid "Windows" +msgstr "MS Windows" + +#: config/qtcurveconfig.cpp:1022 +msgid "Menus and Toolbars" +msgstr "Menüler ve Araç Çubukları" + +#: config/qtcurveconfig.cpp:1023 +#, fuzzy +msgid "Dock windows" +msgstr "MS Windows" + +#: config/qtcurveconfig.cpp:1024 +msgid "Advanced Settings" +msgstr "Gelişmiş Seçenekler" + +#: config/qtcurveconfig.cpp:1025 +msgid "Custom Gradients" +msgstr "Özel Eğimler" + +#: config/qtcurveconfig.cpp:1026 +msgid "Custom Shades" +msgstr "Özel Gölgeler" + +#: config/qtcurveconfig.cpp:1250 +msgid "Add" +msgstr "Ekle" + +#: config/qtcurveconfig.cpp:1251 +msgid "Remove" +msgstr "Kaldır" + +#: config/qtcurveconfig.cpp:1252 +msgid "Update" +msgstr "Güncelle" + +#: config/qtcurveconfig.cpp:1362 config/qtcurveconfig.cpp:1372 +msgid "*" +msgstr "*" + +#: config/qtcurveconfig.cpp:1388 +msgid "" +"Could not write to file:\n" +"%1" +msgstr "" +"Dosyaya yazılamadı:\n" +"%1" + +#. i18n: file: config/qtcurveconfigbase.ui:16 +#. i18n: ectx: property (caption), widget (QWidget) +#: po/rc.cpp:3 rc.cpp:3 +msgid "Form1" +msgstr "Form1" + +#. i18n: file: config/qtcurveconfigbase.ui:38 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:6 rc.cpp:6 +msgid "title" +msgstr "başlık" + +#. i18n: file: config/qtcurveconfigbase.ui:47 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:9 rc.cpp:9 +msgid "Category" +msgstr "Kategori" + +#. i18n: file: config/qtcurveconfigbase.ui:79 +#. i18n: ectx: property (text), widget (KPushButton) +#: po/rc.cpp:12 rc.cpp:12 +msgid "Options" +msgstr "Seçenekler" + +#. i18n: file: config/qtcurveconfigbase.ui:102 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:15 rc.cpp:15 +msgid "" +"The setting here affects the general appearance - and will be applied to " +"buttons, combo boxes, and spin buttons." +msgstr "" +"Buradaki ayar genel görünümü etkiler ve düğmelere, birleşik kutulara ve " +"çevirme düğmelerine uygulanır." + +#. i18n: file: config/qtcurveconfigbase.ui:110 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:559 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1687 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:110 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:559 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1687 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:18 po/rc.cpp:103 po/rc.cpp:318 rc.cpp:18 rc.cpp:103 rc.cpp:318 +msgid "Appearance:" +msgstr "Görünüm:" + +#. i18n: file: config/qtcurveconfigbase.ui:135 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Focus rectangle:" +msgstr "Odak dikdörtgeni:" + +#. i18n: file: config/qtcurveconfigbase.ui:143 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:24 rc.cpp:24 +msgid "Button effect:" +msgstr "Düğme efekti:" + +#. i18n: file: config/qtcurveconfigbase.ui:156 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:27 rc.cpp:27 +msgid "Darker borders" +msgstr "Daha koyu renk kenarlıklar" + +#. i18n: file: config/qtcurveconfigbase.ui:164 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Standard buttons for sidebars" +msgstr "Yan çubuklarda standart düğme görünümü" + +#. i18n: file: config/qtcurveconfigbase.ui:167 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:33 rc.cpp:33 +msgid "" +"Select this to have the sidebar buttons in konqueror, kate, kaffeine, " +"ktorrent, drawn as per normal buttons - otherwise they will be drawn in a " +"more flat style." +msgstr "" +"Konqueror, Kate, Kaffeine ve Ktorrent'teki yan çubuk düğmeleri normalde daha " +"düz görünür. Bu seçenekle o düğmelerin normal düğmeler gibi görünmesini " +"sağlayabilirsiniz." + +#. i18n: file: config/qtcurveconfigbase.ui:180 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:36 rc.cpp:36 +msgid "Roundedness:" +msgstr "Yuvarlatılma:" + +#. i18n: file: config/qtcurveconfigbase.ui:188 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:39 rc.cpp:39 +msgid "'V' style arrows" +msgstr "'V' şeklinde oklar" + +#. i18n: file: config/qtcurveconfigbase.ui:224 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:42 rc.cpp:42 +msgid "Frameless groupboxes," +msgstr "Çerçevesiz grup kutuları," + +#. i18n: file: config/qtcurveconfigbase.ui:240 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:45 rc.cpp:45 +msgid "draw line after title (KDE4 && Gtk2)" +msgstr "başlıktan sonra çizgi çiz (KDE4 ve Gtk2)" + +#. i18n: file: config/qtcurveconfigbase.ui:250 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:48 rc.cpp:48 +msgid "Draw statusbar frames" +msgstr "Durum çubuğu çerçevesini çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:263 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:51 rc.cpp:51 +msgid "Sunken appearance:" +msgstr "Çökmüş görünüm:" + +#. i18n: file: config/qtcurveconfigbase.ui:271 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:54 rc.cpp:54 +msgid "Draw fading lines (KDE4 && Gtk2)" +msgstr "Solan çizgiler çiz (KDE4 ve Gtk2)" + +#. i18n: file: config/qtcurveconfigbase.ui:282 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:58 rc.cpp:58 +msgid "Thinner buttons when etched/shadowed" +msgstr "Damgalı veya gölgeli iken daha ince düğmeler" + +#. i18n: file: config/qtcurveconfigbase.ui:310 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:62 rc.cpp:62 +#, fuzzy +msgid "Etch entries and scrollviews when button effect set to etched/shadowed." +msgstr "Düğme efekti damgalı veya gölgeli olduğunda damgalı çiz." + +#. i18n: file: config/qtcurveconfigbase.ui:331 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:65 rc.cpp:65 +msgid "Draw splitter" +msgstr "Ayraç çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:334 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:68 rc.cpp:68 +msgid "" +"This option controls whether a line is drawn near non-editable combo box " +"arrows." +msgstr "" +"Bu seçenek değiştirilebilir olmayan birleşik kutu oklarının yakınında bir " +"çizgi çizilip çizilmeyeceğini belirler." + +#. i18n: file: config/qtcurveconfigbase.ui:342 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:71 rc.cpp:71 +msgid "Draw arrow of editable combos within edit field" +msgstr "Değiştirme alanı içinde değiştirilebilir birleşiklerin oklarını çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:384 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:74 rc.cpp:74 +msgid "Button shade:" +msgstr "Düğme gölgesi:" + +#. i18n: file: config/qtcurveconfigbase.ui:405 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Gtk style comboboxes (KDE4)" +msgstr "Gtk biçemi birleşik kutular (KDE4)" + +#. i18n: file: config/qtcurveconfigbase.ui:408 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:81 rc.cpp:81 +msgid "" +"In Gtk, the list that is attached to a combo-box appears in the same style " +"as a popup-menu. KDE4 has the ability to mimic this look." +msgstr "" +"Gtk'de birleşik bir kutuya eklenen liste açılır menü ile aynı biçimde " +"görünür. KDE4 bu davranışı taklit edebilir." + +#. i18n: file: config/qtcurveconfigbase.ui:416 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:84 rc.cpp:84 +#, fuzzy +msgid "Double arrows for Gtk style comboboxes" +msgstr "Gtk biçemi birleşik kutular (KDE4)" + +#. i18n: file: config/qtcurveconfigbase.ui:437 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:87 rc.cpp:87 +msgid "Combine both buttons" +msgstr "İki düğmeyi birleştir" + +#. i18n: file: config/qtcurveconfigbase.ui:445 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:90 rc.cpp:90 +msgid "Draw arrows within edit field" +msgstr "Değiştirme alanında okları çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:483 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:93 rc.cpp:93 +msgid "Markings:" +msgstr "İşaretler:" + +#. i18n: file: config/qtcurveconfigbase.ui:508 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:996 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1272 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1337 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1469 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1892 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2286 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2297 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:508 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:996 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1272 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1337 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1469 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:1892 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2286 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#. i18n: file: config/qtcurveconfigbase.ui:2297 +#. i18n: ectx: property (suffix), widget (KIntNumInput) +#: po/rc.cpp:97 po/rc.cpp:193 po/rc.cpp:240 po/rc.cpp:259 po/rc.cpp:285 +#: po/rc.cpp:367 po/rc.cpp:433 po/rc.cpp:437 rc.cpp:97 rc.cpp:193 rc.cpp:240 +#: rc.cpp:259 rc.cpp:285 rc.cpp:367 rc.cpp:433 rc.cpp:437 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file: config/qtcurveconfigbase.ui:538 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1477 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:538 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1477 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:100 po/rc.cpp:288 rc.cpp:100 rc.cpp:288 +#, fuzzy +msgid "Background mouse-over highlight:" +msgstr "Metin arkaplanını vurgula" + +#. i18n: file: config/qtcurveconfigbase.ui:567 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:988 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1395 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1754 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:567 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:988 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1395 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1754 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:106 po/rc.cpp:189 po/rc.cpp:269 po/rc.cpp:330 rc.cpp:106 +#: rc.cpp:189 rc.cpp:269 rc.cpp:330 +msgid "Coloration:" +msgstr "Renklendirme:" + +#. i18n: file: config/qtcurveconfigbase.ui:583 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:109 rc.cpp:109 +msgid "This color setting affects both scrollbar sliders, and other sliders." +msgstr "" +"Bu renk ayarı hem kaydırma çubuğu sürgülerini hem diğer sürgüleri etkiler." + +#. i18n: file: config/qtcurveconfigbase.ui:616 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:704 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:616 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#. i18n: file: config/qtcurveconfigbase.ui:704 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:113 po/rc.cpp:131 rc.cpp:113 rc.cpp:131 +msgid "" +"This appearance setting affects both scrollbar sliders, and other sliders." +msgstr "" +"Bu görünüm ayarı hem kaydırma çubuğu sürgülerini hem diğer sürgüleri etkiler." + +#. i18n: file: config/qtcurveconfigbase.ui:664 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:116 rc.cpp:116 +msgid "Style:" +msgstr "Biçem:" + +#. i18n: file: config/qtcurveconfigbase.ui:672 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:119 rc.cpp:119 +msgid "Slider thumbs:" +msgstr "Sürgü minyatürleri:" + +#. i18n: file: config/qtcurveconfigbase.ui:680 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:122 rc.cpp:122 +msgid "Slider width:" +msgstr "Sürgü genişliği:" + +#. i18n: file: config/qtcurveconfigbase.ui:688 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:125 rc.cpp:125 +msgid "Fill used part of groove:" +msgstr "Kanalın kullanılan kısmını doldur:" + +#. i18n: file: config/qtcurveconfigbase.ui:720 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:137 rc.cpp:137 +msgid "" +"This setting only affects standard sliders - i.e. not scrollbar sliders. " +"'Triangular' is a very similar style to plastik's sliders." +msgstr "" +"Bu ayar sadece standart sürgüleri etkiler, kaydırma çubuğu sürgülerini " +"değiştirmez. 'Üç köşeli' plastik'in sürgülerine çok benzer bir biçemdir." + +#. i18n: file: config/qtcurveconfigbase.ui:728 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:140 rc.cpp:140 +msgid "Groove appearance:" +msgstr "Kanal görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:736 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:143 rc.cpp:143 +msgid "Thin scrollbar groove" +msgstr "İnce kaydırma çubuğu kanalı" + +#. i18n: file: config/qtcurveconfigbase.ui:744 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:146 rc.cpp:146 +msgid "Scrollbar buttons:" +msgstr "Kaydırma çubuğu düğmeleri:" + +#. i18n: file: config/qtcurveconfigbase.ui:766 +#. i18n: ectx: property (whatsThis), widget (QComboBox) +#: po/rc.cpp:149 rc.cpp:149 +msgid "" +"This controls the position, and number, of buttons on a scrollbar.\n" +"\n" +"KDE - 1 button at the top/left, and two at the bottom/right\n" +"Windows - 1 botton at each end\n" +"Platinum - no buttons at the top/left, two at bottom/right\n" +"Next - two buttons at the top/left, none at bottom/right\n" +"None - no buttons, only the slider" +msgstr "" +"Bu, kaydırma çubuğu üzerindeki düğmelerin konum ve adedini belirler.\n" +"\n" +"KDE - sol üstte bir, sağ altta iki düğme\n" +"Windows - iki uçta da bir düğme\n" +"Platin - sadece sağ altta iki düğme\n" +"Next - sadece sol üstte iki düğme\n" +"Yok - düğme yok, sadece sürgü" + +#. i18n: file: config/qtcurveconfigbase.ui:787 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:158 rc.cpp:158 +msgid "Color only on mouse-over" +msgstr "Sadece fare altındayken renklendir" + +#. i18n: file: config/qtcurveconfigbase.ui:818 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:161 rc.cpp:161 +msgid "Animated" +msgstr "Hareketli" + +#. i18n: file: config/qtcurveconfigbase.ui:843 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:164 rc.cpp:164 +msgid "Groove:" +msgstr "Kanal:" + +#. i18n: file: config/qtcurveconfigbase.ui:851 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:167 rc.cpp:167 +msgid "Bar:" +msgstr "Çubuk:" + +#. i18n: file: config/qtcurveconfigbase.ui:880 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:173 rc.cpp:173 +msgid "" +"Enable this option to remove the 1 pixel border around the filled element." +msgstr "" +"Doldurulan öğenin etrafındaki bir piksellik kenarlığı kaldırmak için bu " +"seçeneği açın." + +#. i18n: file: config/qtcurveconfigbase.ui:914 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:176 rc.cpp:176 +msgid "Indicate with:" +msgstr "Belirteç:" + +#. i18n: file: config/qtcurveconfigbase.ui:922 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:179 rc.cpp:179 +msgid "Embolden text" +msgstr "Metni kalınlaştır" + +#. i18n: file: config/qtcurveconfigbase.ui:977 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:182 rc.cpp:182 +msgid "Highlight by:" +msgstr "Vurgulama biçimi:" + +#. i18n: file: config/qtcurveconfigbase.ui:980 +#. i18n: ectx: property (whatsThis), widget (QLabel) +#: po/rc.cpp:186 rc.cpp:186 +#, no-c-format +msgid "" +"This controls the % that widgets will be highlighted by when the mouse " +"hovers over them" +msgstr "" +"Bu ayar fare üzerlerine geldiğinde gereçlerin yüzde kaç oranda " +"vurgulanacağını belirler." + +#. i18n: file: config/qtcurveconfigbase.ui:1064 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:196 rc.cpp:196 +msgid "Button color" +msgstr "Düğme rengi" + +#. i18n: file: config/qtcurveconfigbase.ui:1072 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:199 rc.cpp:199 +msgid "Header appearance:" +msgstr "Başlık görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1085 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:202 rc.cpp:202 +msgid "Shade header of sorted column:" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1109 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:206 rc.cpp:206 +msgid "Selection appearance (KDE4 && Gtk2):" +msgstr "Seçim görünümü (KDE4 ve Gtk2):" + +#. i18n: file: config/qtcurveconfigbase.ui:1139 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:209 rc.cpp:209 +msgid "Force alternate colors" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1147 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:212 rc.cpp:212 +msgid "Lines between items:" +msgstr "Öğeler arasındaki çizgiler:" + +#. i18n: file: config/qtcurveconfigbase.ui:1160 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:215 rc.cpp:215 +msgid "Square selection" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1181 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:218 rc.cpp:218 +msgid "Scrollbars on the outside" +msgstr "Kaydırma çubukları dışarıda" + +#. i18n: file: config/qtcurveconfigbase.ui:1189 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:221 rc.cpp:221 +msgid "Highlight on focus (KDE)" +msgstr "Odaklanınca vurgula (KDE)" + +#. i18n: file: config/qtcurveconfigbase.ui:1197 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:224 rc.cpp:224 +msgid "" +"Always draw with a square frame - regardless of the general round setting." +msgstr "" +"Gelen yuvarlatma ayarını dikkate alma, her zaman köşeli bir çerçeve kullan." + +#. i18n: file: config/qtcurveconfigbase.ui:1235 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:227 rc.cpp:227 +msgid "Active tab appearance:" +msgstr "Etkin sekme görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1243 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:230 rc.cpp:230 +msgid "Inactive tab appearance:" +msgstr "Etkin olmayan sekme görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1261 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:233 rc.cpp:233 +msgid "Highlight" +msgstr "Vurgula" + +#. i18n: file: config/qtcurveconfigbase.ui:1264 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:236 rc.cpp:236 +msgid "This will cause a coloured stripe to be drawn over the current tab." +msgstr "" +"Bu seçenek etkin sekmenin üst kısmına renkli bir şerit çizilmesini sağlar." + +#. i18n: file: config/qtcurveconfigbase.ui:1275 +#. i18n: ectx: property (prefix), widget (KIntNumInput) +#: po/rc.cpp:243 rc.cpp:243 +msgid "Tint by " +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1283 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:246 rc.cpp:246 +msgid "Mouse-over:" +msgstr "Fare altında:" + +#. i18n: file: config/qtcurveconfigbase.ui:1296 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:249 rc.cpp:249 +msgid "Round all tabs" +msgstr "Tüm sekmeleri yuvarlat" + +#. i18n: file: config/qtcurveconfigbase.ui:1304 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:252 rc.cpp:252 +msgid "Draw a light border around tab widget" +msgstr "Sekme gerecinin etrafına açık renk bir kenarlık çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:1312 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:255 rc.cpp:255 +msgid "Draw inner border of inactive tabs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1345 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:262 rc.cpp:262 +#, fuzzy +msgid "Alter background by:" +msgstr "Seçili arkaplan" + +#. i18n: file: config/qtcurveconfigbase.ui:1353 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:265 rc.cpp:265 +msgid "Invert shade of bottom tabs" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1403 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:272 rc.cpp:272 +msgid "'X' style checkmarks" +msgstr "'X' biçemli işaretler" + +#. i18n: file: config/qtcurveconfigbase.ui:1445 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:275 rc.cpp:275 +msgid "Button like" +msgstr "Düğme gibi" + +#. i18n: file: config/qtcurveconfigbase.ui:1453 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:278 rc.cpp:278 +msgid "Small radio 'dot'" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1461 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:281 rc.cpp:281 +msgid "Color when selected" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1515 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:291 rc.cpp:291 +msgid "Button Appearance:" +msgstr "Düğme Görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1533 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1541 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1533 +#. i18n: ectx: property (text), widget (QLabel) +#. i18n: file: config/qtcurveconfigbase.ui:1541 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:294 po/rc.cpp:297 rc.cpp:294 rc.cpp:297 +msgid "Titlebar Appearance:" +msgstr "Başlık Çubuğu Görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1554 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:300 rc.cpp:300 +msgid "Text alignment:" +msgstr "Metin hizalama:" + +#. i18n: file: config/qtcurveconfigbase.ui:1567 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:303 rc.cpp:303 +msgid "Color titlebar only (KDE4)" +msgstr "Sadece başlık çubuğu renkli (KDE4)" + +#. i18n: file: config/qtcurveconfigbase.ui:1592 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:306 rc.cpp:306 +msgid "Light border (KDE4)" +msgstr "Açık renk kenarlık (KDE4)" + +#. i18n: file: config/qtcurveconfigbase.ui:1613 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:309 rc.cpp:309 +msgid "Handles:" +msgstr "Tutamaçlar:" + +#. i18n: file: config/qtcurveconfigbase.ui:1621 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:312 rc.cpp:312 +msgid "Border:" +msgstr "Kenarlık:" + +#. i18n: file: config/qtcurveconfigbase.ui:1673 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:315 rc.cpp:315 +msgid "Toolbars" +msgstr "Araç çubukları" + +#. i18n: file: config/qtcurveconfigbase.ui:1700 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:321 rc.cpp:321 +msgid "Separators:" +msgstr "Ayraçlar:" + +#. i18n: file: config/qtcurveconfigbase.ui:1732 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:324 rc.cpp:324 +msgid "Menus" +msgstr "Menüler" + +#. i18n: file: config/qtcurveconfigbase.ui:1746 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:327 rc.cpp:327 +msgid "Apply coloration to active window only" +msgstr "Renklendirmeyi sadece etkin pencereye uygula" + +#. i18n: file: config/qtcurveconfigbase.ui:1762 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:333 rc.cpp:333 +msgid "Menubar appearance:" +msgstr "Menü çubuğu görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1770 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:336 rc.cpp:336 +msgid "Menuitem appearance:" +msgstr "Menü öğesi görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:1778 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:339 rc.cpp:339 +msgid "Use 'highlight' color for active menuitems" +msgstr "Etkin menü öğelerine 'vurgu' rengi uygula" + +#. i18n: file: config/qtcurveconfigbase.ui:1786 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:342 rc.cpp:342 +msgid "Stripe (KDE):" +msgstr "Şerit (KDE):" + +#. i18n: file: config/qtcurveconfigbase.ui:1794 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:345 rc.cpp:345 +msgid "Border popupmenus" +msgstr "Açılır menülere kenarlık ekle" + +#. i18n: file: config/qtcurveconfigbase.ui:1802 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:348 rc.cpp:348 +msgid "Sub-menu delay:" +msgstr "Alt menü gecikmesi:" + +#. i18n: file: config/qtcurveconfigbase.ui:1818 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:351 rc.cpp:351 +msgid "Color menubar items on mouse-over" +msgstr "Fare altında menü çubuğu öğelerini renklendir" + +#. i18n: file: config/qtcurveconfigbase.ui:1826 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:354 rc.cpp:354 +msgid "Custom text colors (active/normal):" +msgstr "Özel metin renkleri (etkin-normal):" + +#. i18n: file: config/qtcurveconfigbase.ui:1871 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:360 rc.cpp:360 +msgid "Thinner menu items" +msgstr "Daha ince menü öğeleri" + +#. i18n: file: config/qtcurveconfigbase.ui:1879 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:363 rc.cpp:363 +msgid "Popup-menu background:" +msgstr "Açılır menü arkaplanı:" + +#. i18n: file: config/qtcurveconfigbase.ui:1928 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:370 rc.cpp:370 +msgid "Border menuitems" +msgstr "Menü öğelerine kenarlık çiz" + +#. i18n: file: config/qtcurveconfigbase.ui:1936 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:373 rc.cpp:373 +msgid "Draw icons" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:1944 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:376 rc.cpp:376 +msgid "Round selected menubar items on top only" +msgstr "Sadece en üst menü çubuğu öğelerini yuvarlat" + +#. i18n: file: config/qtcurveconfigbase.ui:1960 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:380 rc.cpp:380 +msgid "Enable mouse-over for menubar items" +msgstr "Menü çubuğu öğelerine 'fare altında' efekti uygula" + +#. i18n: file: config/qtcurveconfigbase.ui:1983 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:383 rc.cpp:383 +#, fuzzy +msgid "Titlebar appearance:" +msgstr "Başlık Çubuğu Görünümü:" + +#. i18n: file: config/qtcurveconfigbase.ui:2043 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:386 rc.cpp:386 +msgid "'Fix' parentless dialogs" +msgstr "Yetim diyalogları 'tamir et'" + +#. i18n: file: config/qtcurveconfigbase.ui:2050 +#. i18n: ectx: property (whatsThis), widget (QCheckBox) +#: po/rc.cpp:389 rc.cpp:389 +msgid "" +"

Warning: Experimental!

Some " +"applications - such as Kate, Kaffeine, and GIMP - produce dialogs that have " +"no 'parent'. This causes the dialog to recieve an entry in the taskbar, and " +"allows the dialog to be minimised independantly of the main application " +"window.

\n" +"\n" +"

If you enable this option, QtCurve will try to 'fix' this by assigning " +"the dialogs a parent.

\n" +"\n" +"

Note: This may brake some applications, as it wiill alter the " +"behaviour of dialogs in a way the application has not intended. Therefore, " +"please use with care.

" +msgstr "" +"

Uyarı: Deneyseldir!

Kate, " +"Kaffeine ve GIMP gibi bazı uygulamalar üst penceresi olmayan (yetim) diyalog " +"pencereleri oluşturur. Bu durum o diyalog çubuklarının görev çubuğunda yer " +"almasına neden olur ve ana uygulama penceresinden bağımsız olarak " +"küçültülebilmelerine olanak verir.

\n" +"\n" +"

Eğer bu seçeneği işaretlerseniz, QtCurve o diyalog pencerelerine bir " +"ebeveyn atayarak bu durumu 'tamir etmeye' çalışır.

\n" +"\n" +"

Not: Bu seçenek diyalog pencerelerinin davranışını uygulamada " +"ayarlanan şeklin dışına çıkardığı için bazı uygulamaların düzgün çalışmasını " +"engelleyebilir. O nedenle, dikkatli kullanmanızı tavsiye ederiz.

" + +#. i18n: file: config/qtcurveconfigbase.ui:2058 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:396 rc.cpp:396 +msgid "Map KDE icons (Gtk2)" +msgstr "KDE simgelerine eşle (Gtk2)" + +#. i18n: file: config/qtcurveconfigbase.ui:2066 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:399 rc.cpp:399 +msgid "Gtk button order" +msgstr "Gtk düğme sırası" + +#. i18n: file: config/qtcurveconfigbase.ui:2091 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:402 rc.cpp:402 +msgid "Character to use for password entries:" +msgstr "Parola girişlerinde kullanılacak karakter:" + +#. i18n: file: config/qtcurveconfigbase.ui:2115 +#. i18n: ectx: property (text), widget (QCheckBox) +#: po/rc.cpp:406 rc.cpp:406 +msgid "Don't make 'auto-default' buttons larger (KDE4)" +msgstr "" + +#. i18n: file: config/qtcurveconfigbase.ui:2141 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:409 rc.cpp:409 +msgid "Settings" +msgstr "Ayarlar" + +#. i18n: file: config/qtcurveconfigbase.ui:2155 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:413 rc.cpp:413 +#, no-c-format +msgid "Position (%)" +msgstr "Konum (%)" + +#. i18n: file: config/qtcurveconfigbase.ui:2166 +#. i18n: ectx: property (text), widget (QListView) +#: po/rc.cpp:417 rc.cpp:417 +#, no-c-format +msgid "Value (%)" +msgstr "Değer (%)" + +#. i18n: file: config/qtcurveconfigbase.ui:2192 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:420 rc.cpp:420 +msgid "Gradient Stop" +msgstr "Eğim Durağı" + +#. i18n: file: config/qtcurveconfigbase.ui:2259 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:426 rc.cpp:426 +msgid "Value:" +msgstr "Değer:" + +#. i18n: file: config/qtcurveconfigbase.ui:2275 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:429 rc.cpp:429 +msgid "Position:" +msgstr "Konum:" + +#. i18n: file: config/qtcurveconfigbase.ui:2336 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:441 rc.cpp:441 +#, no-c-format +msgid "" +"NOTE:
\n" +"\n" +"Position has a range of 0% to 100% - 0% being top/left, and 100% " +"being bottom/right.
\n" +"\n" +"Value has a range of 0% to 200%. A value of 120% implies lightening " +"by 20%, and a value of 80% implies darkening by 20%
" +msgstr "" +"NOT:
\n" +"\n" +"Konum yüzde 0 ile 100 arasında olabilir. 0 sol üst kısmı, 100 sağ alt " +"kısmı temsil eder.
\n" +"\n" +"Değer yüzde 0 ile 200 arasında olabilir. % 120, % 20 oranında daha " +"açık bir renk anlamına gelir, % 80 ise % 20 oranında daha koyu bir rengi " +"temsil eder.
" + +#. i18n: file: config/qtcurveconfigbase.ui:2349 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:448 rc.cpp:448 +msgid "Preview" +msgstr "Önizleme" + +#. i18n: file: config/qtcurveconfigbase.ui:2415 +#. i18n: ectx: property (title), widget (QGroupBox) +#: po/rc.cpp:452 rc.cpp:452 +msgid "Use Custom Values" +msgstr "Özel Değerler Kullan" + +#. i18n: file: config/qtcurveconfigbase.ui:2539 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:455 rc.cpp:455 +msgid "" +"QtCurve uses various hard-coded shading values to draw elements such as " +"button frames, the background for pressed buttons, etc. The following is a " +"brief overview of how each shade is used - use this as a guide only, as " +"shades are used for various things.
\n" +"\n" +"1 Is used for the light part of 3d elements - such as the border of tab " +"widgets.
\n" +"2 Is used for the lighter shade of striped progressbars.
\n" +"3 Is used for the dark part of 3d elements - such as the border of tab " +"widgets.
\n" +"4 Is used for the shaded border of checks and radios, toolbar borders (when " +"set to dark), the dark part of sunken/raised slider handles, etc.
\n" +"5 Is used for the background of pressed widgets, and the border of toolbars " +"(when not dark).
\n" +"6 Is used as the border of most widgets.
" +msgstr "" +"QtCurve düğme çerçeveleri, basılı düğmelerin arkaplanı ve benzerleri için " +"önceden belirlenmiş gölgeleme değerleri kullanır. Aşağıda her gölgenin nasıl " +"kullanıldığına dair bir özet bulabilirsiniz. Gölgeler çeşitli öğelerde " +"kullanıldığı için bunları sadece bir kılavuz olarak kullanın.
\n" +"\n" +"1 Sekme gereçleri gibi 3B öğelerin aydınlık tarafı için kullanılır.
\n" +"2 Çizgili ilerleme çubuklarının açık renk kısmı için kullanılır.
\n" +"3 Sekme gereçleri gibi 3B öğelerin karanlık tarafı için kullanılır.
\n" +"4 Koyu renge ayarlandıklarında işaretleme kutularının ve araç çubuğu " +"kenarlıklarının gölgeli kenarlığı için, çökmüş ya da yükseltilmiş sürgü " +"tutamaçları ve benzer, yerlerde kullanılır.
\n" +"5 Basılı durumdaki gereçlerin arkaplanı ve (koyu değilken) araç çubuklarının " +"çerçeveleri için kullanılır.
\n" +"6 Çoğu gerecin kenarlığı olarak kullanılır.
" + +#. i18n: file: config/qtcurveconfigbase.ui:2560 +#. i18n: ectx: property (text), widget (QLabel) +#: po/rc.cpp:465 rc.cpp:465 +msgid "Shading routine:" +msgstr "Gölgeleme yordamı:" + +#: po/rc.cpp:466 rc.cpp:466 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Necmettin Begiter" + +#: po/rc.cpp:467 rc.cpp:467 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "necmettin.begiter@gmail.com" + +#, fuzzy +#~ msgid "Highlight text background on mouse-over" +#~ msgstr "Metin arkaplanını vurgula" + +#~ msgid "Color" +#~ msgstr "Renk" + +#~ msgid "Next" +#~ msgstr "Next" diff --git a/style/CMakeLists.txt b/style/CMakeLists.txt index 030487b..0b5a404 100644 --- a/style/CMakeLists.txt +++ b/style/CMakeLists.txt @@ -1,10 +1,22 @@ -set(qtcurve_SRCS qtcurve.cpp pixmaps.h) -add_definitions(-DQT_PLUGIN) -include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/common) -link_directories(${KDE3_LIB_DIR}) -kde3_automoc(${qtcurve_SRCS}) -add_library(qtcurve SHARED ${qtcurve_SRCS}) -set_target_properties(qtcurve PROPERTIES PREFIX "") -target_link_libraries(qtcurve ${QT_QTGUI_LIBRARY} kdefx) -install(TARGETS qtcurve LIBRARY DESTINATION ${KDE3_LIB_DIR}/kde3/plugins/styles) -install(FILES qtcurve.themerc DESTINATION ${KDE3PREFIX}/share/apps/kstyle/themes) +if (NOT QTC_QT_ONLY) + set(qtcurve_SRCS qtcurve.cpp pixmaps.h) + add_definitions(-DQT_PLUGIN) + include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/common) + link_directories(${KDE3_LIB_DIR}) + kde3_automoc(${qtcurve_SRCS}) + add_library(qtcurve MODULE ${qtcurve_SRCS}) + set_target_properties(qtcurve PROPERTIES PREFIX "") + target_link_libraries(qtcurve ${QT_LIBRARIES} kdefx) + install(TARGETS qtcurve LIBRARY DESTINATION ${KDE3_LIB_DIR}/kde3/plugins/styles) + install(FILES qtcurve.themerc DESTINATION ${KDE3PREFIX}/share/apps/kstyle/themes) +else (NOT QTC_QT_ONLY) + set(qtcurve_MOC_CLASSES qtcurve.h qtc_kstyle.h) + QTCURVE_QT_WRAP_CPP(qtcurve_MOC_SRCS ${qtcurve_MOC_CLASSES}) + set(qtcurve_SRCS qtcurve.cpp qtc_kstyle.cpp pixmaps.h) + include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${QT_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/common) + add_library(qtcurve MODULE ${qtcurve_SRCS} ${qtcurve_MOC_SRCS}) + set_target_properties(qtcurve PROPERTIES PREFIX "") + target_link_libraries(qtcurve ${QT_LIBRARIES}) + install(TARGETS qtcurve LIBRARY DESTINATION ${QT_PLUGINS_DIR}/styles) +endif (NOT QTC_QT_ONLY) + diff --git a/style/pixmaps.h b/style/pixmaps.h index 4873fa5..ff34491 100644 --- a/style/pixmaps.h +++ b/style/pixmaps.h @@ -35,6 +35,30 @@ static const unsigned char radio_frame_png_data[] = { }; /* Generated by qembed */ +static const unsigned int radio_inner_png_len = 276; +static const unsigned char radio_inner_png_data[] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, + 0x44,0x52,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0x08,0x04,0x00,0x00, + 0x00,0xd8,0xe2,0x2c,0xf7,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00, + 0xae,0xce,0x1c,0xe9,0x00,0x00,0x00,0x02,0x62,0x4b,0x47,0x44,0x00,0x00, + 0xaa,0x8d,0x23,0x32,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00, + 0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x00, + 0x07,0x74,0x49,0x4d,0x45,0x07,0xd8,0x0c,0x0a,0x0c,0x30,0x0e,0xa9,0x10, + 0xdb,0x17,0x00,0x00,0x00,0x98,0x49,0x44,0x41,0x54,0x18,0xd3,0x85,0x8c, + 0x31,0x0a,0xc2,0x40,0x10,0x45,0x1f,0x62,0x95,0x9b,0x18,0x16,0x6b,0xf1, + 0x08,0xa6,0xf5,0x04,0x36,0x5a,0x59,0x6e,0x61,0x9b,0x0b,0x04,0xcc,0x01, + 0x2c,0x72,0x0c,0x6b,0x3d,0x81,0x85,0x20,0x04,0x0b,0x31,0x45,0x18,0x85, + 0x80,0x36,0x81,0x58,0x0c,0x92,0x65,0x40,0xfc,0xd5,0x1b,0xde,0xfc,0x0f, + 0x7f,0x33,0xc4,0x23,0x74,0xbc,0xc8,0x88,0x42,0xe1,0x28,0xa9,0xd9,0x30, + 0x65,0xc9,0x85,0x07,0xb3,0xbe,0x51,0xb2,0x0f,0x1e,0x73,0x6e,0xc4,0x8a, + 0x9e,0xda,0xcc,0x9f,0xd8,0x2a,0x08,0xa9,0x51,0x0b,0x2a,0x85,0x8e,0xc4, + 0x28,0x47,0x0b,0x03,0xe0,0xcd,0xd8,0xa8,0x11,0x8d,0x42,0xc6,0xd5,0xa8, + 0x03,0x85,0x42,0xc4,0x93,0x5d,0x20,0x3c,0xc2,0xe4,0x7b,0x24,0xdc,0x39, + 0xb3,0xc2,0x31,0xe7,0x88,0xb0,0x0e,0x27,0x62,0x72,0x2a,0x5a,0x84,0xa2, + 0x6f,0xfc,0xcc,0x07,0xef,0xe8,0x26,0x2e,0x6f,0x29,0xb2,0x5f,0x00,0x00, + 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + static const unsigned int radio_light_png_len = 236; static const unsigned char radio_light_png_data[] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, @@ -56,25 +80,47 @@ static const unsigned char radio_light_png_data[] = { 0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; -static const unsigned int radio_on_png_len = 231; +static const unsigned int radio_on_png_len = 221; static const unsigned char radio_on_png_data[] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, 0x44,0x52,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0x08,0x06,0x00,0x00, - 0x00,0x72,0xeb,0xe4,0x7c,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00, - 0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70, - 0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a, - 0x9c,0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd7,0x05,0x1d, - 0x0b,0x26,0x21,0x2a,0x9e,0xfa,0x9e,0x00,0x00,0x00,0x74,0x49,0x44,0x41, - 0x54,0x28,0xcf,0xd5,0xd0,0x3d,0x0e,0x82,0x50,0x10,0x04,0xe0,0x4f,0xa9, - 0x68,0x39,0x84,0x3d,0xb7,0x80,0x96,0xda,0x23,0xd8,0x51,0xd8,0x7a,0x2f, - 0x2f,0xc0,0x19,0x80,0xd2,0xc6,0xe6,0x9d,0xc1,0xe6,0x91,0xbc,0x6c,0x50, - 0x5b,0x9d,0x64,0xb3,0x7f,0x33,0xd9,0xcc,0xf2,0x77,0xb8,0x60,0xc2,0x9c, - 0x73,0x17,0x09,0xd5,0x8e,0x00,0xee,0x68,0x73,0x3d,0x60,0xc1,0xba,0x91, - 0x8e,0x41,0x74,0xc6,0x13,0x63,0x98,0xdf,0xca,0xe6,0x10,0x96,0x33,0x52, - 0x98,0x35,0x39,0x9f,0xde,0x5d,0x4a,0x05,0xa9,0x14,0xa4,0x4f,0x9e,0x1e, - 0xe8,0x51,0xe7,0xd8,0x70,0x2d,0x3d,0xed,0xa1,0xfb,0xf6,0xbd,0x1f,0xc7, - 0x0b,0x02,0x3c,0x12,0x4f,0x16,0x9a,0x81,0xa2,0x00,0x00,0x00,0x00,0x49, - 0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x00,0x72,0xeb,0xe4,0x7c,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00, + 0xae,0xce,0x1c,0xe9,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff, + 0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70,0x48, + 0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c, + 0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd9,0x04,0x11,0x0a, + 0x2d,0x0a,0x29,0xa8,0x47,0x5a,0x00,0x00,0x00,0x5d,0x49,0x44,0x41,0x54, + 0x28,0xcf,0xd5,0xd0,0xb1,0x09,0x80,0x40,0x0c,0x05,0xd0,0xa7,0x56,0xb6, + 0x37,0x8d,0x23,0xe8,0x44,0xae,0xe8,0x0c,0x62,0x69,0x7d,0x33,0xd8,0x9c, + 0xa0,0xe1,0x0a,0x0b,0x0b,0xfd,0xf0,0x09,0x81,0xbc,0x26,0xfc,0x2e,0x23, + 0x16,0xac,0x65,0x8e,0x4f,0xc0,0x5a,0xe9,0x0d,0x36,0x01,0x2d,0x48,0xc8, + 0x65,0x4f,0x65,0x66,0x0c,0xe7,0x51,0x1b,0xd0,0x15,0xa8,0xe0,0x2a,0xca, + 0xe1,0x20,0x05,0x0c,0xba,0x80,0x76,0x4c,0xe8,0x4b,0xcf,0xcc,0xd8,0x5e, + 0xfd,0xde,0xc7,0x72,0x00,0x70,0x62,0x14,0x61,0xef,0x49,0xda,0x94,0x00, + 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 +}; + +static const unsigned int radio_on_small_png_len = 258; +static const unsigned char radio_on_small_png_data[] = { + 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, + 0x44,0x52,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0x08,0x06,0x00,0x00, + 0x00,0x72,0xeb,0xe4,0x7c,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00, + 0xae,0xce,0x1c,0xe9,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff, + 0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70,0x48, + 0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c, + 0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd9,0x0a,0x14,0x0b, + 0x13,0x19,0x65,0xff,0x39,0x9d,0x00,0x00,0x00,0x82,0x49,0x44,0x41,0x54, + 0x28,0xcf,0xcd,0xd0,0x31,0x0a,0xc2,0x50,0x10,0x04,0xd0,0xa7,0x82,0xf0, + 0x41,0x9b,0x78,0x0b,0xdb,0x9c,0xc1,0xc6,0xeb,0xa4,0xcf,0x65,0x2c,0x3c, + 0x84,0x07,0x51,0x1b,0x0b,0x49,0x6b,0x0a,0x45,0x02,0x22,0x62,0xb3,0x82, + 0x04,0x63,0x95,0x22,0xd3,0x0c,0x3b,0xcc,0xcc,0x2e,0xcb,0xa0,0x31,0xfa, + 0xa1,0x25,0xac,0x90,0xa1,0xc6,0x0e,0xcd,0xbf,0x92,0x84,0x12,0x07,0x54, + 0xd8,0xc7,0x9c,0xbe,0x4d,0x93,0x56,0x68,0x8d,0x02,0x77,0x5c,0x31,0xc3, + 0x12,0x27,0x1c,0x3f,0xa6,0x71,0x2b,0xb4,0xc0,0x0b,0x8f,0xe0,0x1a,0xf3, + 0x38,0x55,0x57,0xe8,0x12,0xda,0x34,0x38,0xc3,0x2d,0xc2,0x9d,0xe7,0x9d, + 0xa3,0x39,0x8f,0xad,0x0d,0xb6,0xd8,0xe0,0xd9,0xeb,0xf7,0x06,0x86,0x37, + 0x26,0x03,0x19,0xb1,0xe6,0xd3,0x1d,0x4f,0x00,0x00,0x00,0x00,0x49,0x45, + 0x4e,0x44,0xae,0x42,0x60,0x82 }; static const unsigned int check_on_png_len = 179; @@ -140,67 +186,33 @@ static const unsigned char slider_light_png_data[] = { 0x42,0x60,0x82 }; -static const unsigned int slider_v_png_len = 310; -static const unsigned char slider_v_png_data[] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, - 0x44,0x52,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x15,0x08,0x06,0x00,0x00, - 0x00,0x9d,0x6e,0x64,0x8a,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00, - 0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,0x70, - 0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a, - 0x9c,0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd7,0x06,0x19, - 0x0b,0x21,0x3b,0x50,0x7f,0x78,0xa4,0x00,0x00,0x00,0xc3,0x49,0x44,0x41, - 0x54,0x38,0xcb,0xed,0xd4,0x31,0x4e,0x02,0x41,0x14,0x87,0xf1,0x5f,0xa0, - 0xa3,0x5f,0x3a,0xc2,0x1d,0x0c,0x21,0x48,0x24,0xf4,0x36,0x9a,0x58,0xee, - 0x0d,0xa8,0xac,0xe1,0x16,0x36,0x34,0x9e,0x02,0x2e,0xc0,0x19,0x30,0x6e, - 0xa2,0x26,0x54,0x34,0xc6,0x06,0x05,0xeb,0xa5,0x19,0xc8,0x92,0x2c,0x32, - 0xda,0xd8,0xf0,0x35,0x33,0x99,0x79,0x5f,0x5e,0x26,0x79,0xff,0xe1,0x90, - 0x04,0x53,0x3c,0x23,0x0f,0xeb,0x34,0x9c,0xef,0xa9,0x14,0xf6,0x29,0x16, - 0x78,0xc7,0x08,0x5d,0x0c,0xb1,0xc4,0x5b,0xb8,0x3f,0x20,0xc5,0x2b,0xfa, - 0xca,0xe9,0x62,0x5e,0x14,0x13,0x6c,0xd0,0xf3,0x33,0x1d,0x7c,0x22,0xa9, - 0x62,0x80,0x0f,0x3c,0x9c,0x90,0x96,0x68,0xa0,0x29,0x3c,0xf6,0x4e,0x1c, - 0xd7,0xa1,0x5e,0x8e,0xcb,0x48,0xe9,0x02,0x79,0xc5,0x1f,0x38,0x4b,0xff, - 0x22,0x65,0xa8,0x47,0xd6,0xd7,0x91,0x55,0x51,0xc3,0x15,0x26,0x11,0xd2, - 0x3d,0x66,0xbb,0x29,0xff,0x8e,0x18,0xa5,0x16,0xbe,0x8a,0x81,0x4c,0xf1, - 0x12,0x72,0x53,0x46,0x1b,0x4f,0xc7,0x82,0xb8,0xc6,0x23,0x6e,0x43,0xe7, - 0x1b,0x8c,0xb1,0x2a,0x13,0x7e,0xf5,0x47,0x6c,0x01,0x0f,0x64,0x29,0x02, - 0xd4,0x3b,0x9e,0x77,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42, - 0x60,0x82 -}; - -static const unsigned int slider_light_v_png_len = 204; -static const unsigned char slider_light_v_png_data[] = { +static const unsigned int check_x_on_png_len = 154; +static const unsigned char check_x_on_png_data[] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, - 0x44,0x52,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x15,0x08,0x06,0x00,0x00, - 0x00,0x9d,0x6e,0x64,0x8a,0x00,0x00,0x00,0x93,0x49,0x44,0x41,0x54,0x38, - 0xcb,0xed,0xd3,0xa1,0x0a,0x02,0x51,0x10,0x85,0xe1,0x8f,0x75,0x41,0x10, - 0x9b,0x4d,0x11,0xb1,0x18,0xad,0x46,0x93,0xdd,0x6a,0xf3,0x51,0x4c,0x3e, - 0x97,0x46,0x93,0x6f,0x20,0x88,0x60,0x5f,0x58,0x0c,0x06,0xd7,0x72,0xc3, - 0x65,0x51,0xd9,0x5d,0x30,0x08,0x9e,0x32,0xc3,0x9d,0xf9,0x39,0x77,0x60, - 0x86,0x06,0x6a,0x45,0x79,0x8a,0x11,0x96,0x38,0x62,0x83,0x36,0x86,0xc8, - 0x90,0xe3,0x01,0x49,0x04,0xcc,0x70,0xc2,0x04,0x0b,0x4c,0xb1,0xc3,0x00, - 0x3d,0x14,0x65,0xc7,0x71,0x78,0x5c,0xa1,0x5b,0xaa,0x75,0xde,0x7d,0x73, - 0x8d,0xed,0x0b,0xe0,0xa3,0x0a,0xcc,0xab,0x36,0x27,0x51,0x7e,0x6d,0x02, - 0xf9,0x43,0x3f,0x01,0xf5,0xeb,0x9e,0xc6,0x39,0x6c,0xf9,0x01,0xf7,0xaa, - 0x4e,0xfb,0x10,0xf3,0x3a,0x4e,0x39,0x6e,0xb8,0xd4,0x9d,0x2f,0xf5,0x4d, - 0x3d,0x01,0xf6,0xc8,0x14,0xaa,0x58,0xc9,0x89,0xb4,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x44,0x52,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x09,0x08,0x06,0x00,0x00, + 0x00,0xe0,0x91,0x06,0x10,0x00,0x00,0x00,0x61,0x49,0x44,0x41,0x54,0x18, + 0x95,0x6d,0x8f,0x41,0x11,0xc0,0x30,0x08,0x04,0xb7,0x83,0x83,0xea,0x88, + 0xa0,0x88,0xe9,0xb3,0x1a,0xaa,0x01,0x1d,0xd1,0x50,0x41,0xfd,0x5c,0x12, + 0x60,0xca,0xef,0x60,0xe1,0x0e,0x03,0x2e,0xe0,0x01,0x4e,0x60,0xb0,0x6b, + 0xf5,0x0f,0xe0,0x0d,0x03,0x07,0x6e,0x01,0x7d,0x36,0x4d,0x17,0x9a,0x74, + 0x93,0xee,0x71,0xd1,0x64,0x51,0xc1,0x74,0xd9,0x24,0x2a,0x18,0xad,0x99, + 0x50,0xca,0x50,0xac,0x87,0xfd,0x00,0x5e,0x33,0x9a,0xde,0xac,0x16,0x29, + 0x63,0xfc,0x6e,0x65,0x28,0x19,0xfd,0x03,0xc4,0xa9,0x14,0xf0,0x37,0xcf, + 0xd8,0xd2,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; -static const unsigned int check_x_on_png_len = 181; -static const unsigned char check_x_on_png_data[] = { +static const unsigned int dot_png_len = 130; +static const unsigned char dot_png_data[] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48, - 0x44,0x52,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x09,0x08,0x06,0x00,0x00, - 0x00,0xe0,0x91,0x06,0x10,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00, - 0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00, - 0x00,0x1d,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x00, - 0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x54, - 0x68,0x65,0x20,0x47,0x49,0x4d,0x50,0xef,0x64,0x25,0x6e,0x00,0x00,0x00, - 0x3e,0x49,0x44,0x41,0x54,0x18,0x95,0x95,0x8f,0x4b,0x0a,0x00,0x20,0x08, - 0x05,0x07,0xba,0xb6,0x97,0xab,0x7b,0x45,0xee,0xea,0x91,0x86,0x24,0xb8, - 0x70,0x18,0x7f,0x0d,0x30,0xa0,0x03,0x13,0x18,0x9c,0x50,0xce,0x92,0x34, - 0x11,0x94,0x07,0x90,0xd5,0x69,0x67,0x10,0x5e,0x62,0x29,0x94,0xab,0xd2, - 0x89,0x5f,0xdf,0xdd,0x37,0x6c,0xee,0x67,0xfc,0x35,0xc3,0xb2,0x07,0xf6, - 0x7b,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 + 0x44,0x52,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x05,0x08,0x04,0x00,0x00, + 0x00,0x27,0x66,0xee,0x6e,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00, + 0xae,0xce,0x1c,0xe9,0x00,0x00,0x00,0x02,0x62,0x4b,0x47,0x44,0x00,0xff, + 0x87,0x8f,0xcc,0xbf,0x00,0x00,0x00,0x2e,0x49,0x44,0x41,0x54,0x08,0xd7, + 0x63,0x64,0xe0,0x62,0x88,0x63,0x50,0x64,0xf8,0xc7,0x30,0x8f,0x81,0x21, + 0x83,0x41,0x8d,0x81,0x81,0x81,0x81,0xa1,0x8e,0x81,0xa1,0x97,0x01,0x0a, + 0x98,0x18,0xfe,0x32,0xc0,0x81,0x2a,0x43,0x33,0x84,0x01,0x00,0xb7,0x94, + 0x05,0x67,0x58,0x92,0xdc,0x0c,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82 }; #include @@ -211,14 +223,15 @@ static struct Embed { const char *name; } embed_vec[] = { { 419, radio_frame_png_data, "radio_frame.png" }, + { 276, radio_inner_png_data, "radio_inner.png" }, { 236, radio_light_png_data, "radio_light.png" }, - { 231, radio_on_png_data, "radio_on.png" }, + { 221, radio_on_png_data, "radio_on.png" }, + { 258, radio_on_small_png_data, "radio_on_small.png" }, { 179, check_on_png_data, "check_on.png" }, { 311, slider_png_data, "slider.png" }, { 199, slider_light_png_data, "slider_light.png" }, - { 310, slider_v_png_data, "slider_v.png" }, - { 204, slider_light_v_png_data, "slider_light_v.png" }, - { 181, check_x_on_png_data, "check_x_on.png" }, + { 154, check_x_on_png_data, "check_x_on.png" }, + { 130, dot_png_data, "dot.png" }, { 0, 0, 0 } }; diff --git a/style/qtc_fixx11h.h b/style/qtc_fixx11h.h new file mode 100644 index 0000000..ec8e53a --- /dev/null +++ b/style/qtc_fixx11h.h @@ -0,0 +1,233 @@ +//#ifdef don't do this, this file is supposed to be included +//#define multiple times + +/* Usage: + + If you get compile errors caused by X11 includes (the line + where first error appears contains word like None, Unsorted, + Below, etc.), put #include in the .cpp file + (not .h file!) between the place where X11 headers are + included and the place where the file with compile + error is included (or the place where the compile error + in the .cpp file occurs). + + This file remaps X11 #defines to const variables or + inline functions. The side effect may be that these + symbols may now refer to different variables + (e.g. if X11 #defined NoButton, after this file + is included NoButton would no longer be X11's + NoButton, but Qt::NoButton instead). At this time, + there's no conflict known that could cause problems. + + The original X11 symbols are still accessible + (e.g. for None) as X::None, XNone, and also still + None, unless name lookup finds different None + first (in the current class, etc.) + + Use 'Unsorted', 'Bool' and 'index' as templates. + +*/ + +namespace X +{ + +// template ---> +// Affects: Should be without side effects. +#ifdef Unsorted +#ifndef FIXX11H_Unsorted +#define FIXX11H_Unsorted +const int XUnsorted = Unsorted; +#undef Unsorted +const int Unsorted = XUnsorted; +#endif +#undef Unsorted +#endif +// template <--- + +// Affects: Should be without side effects. +#ifdef None +#ifndef FIXX11H_None +#define FIXX11H_None +const XID XNone = None; +#undef None +const XID None = XNone; +#endif +#undef None +#endif + +// template ---> +// Affects: Should be without side effects. +#ifdef Bool +#ifndef FIXX11H_Bool +#define FIXX11H_Bool +typedef Bool XBool; +#undef Bool +typedef XBool Bool; +#endif +#undef Bool +#endif +// template <--- + +// Affects: Should be without side effects. +#ifdef KeyPress +#ifndef FIXX11H_KeyPress +#define FIXX11H_KeyPress +const int XKeyPress = KeyPress; +#undef KeyPress +const int KeyPress = XKeyPress; +#endif +#undef KeyPress +#endif + +// Affects: Should be without side effects. +#ifdef KeyRelease +#ifndef FIXX11H_KeyRelease +#define FIXX11H_KeyRelease +const int XKeyRelease = KeyRelease; +#undef KeyRelease +const int KeyRelease = XKeyRelease; +#endif +#undef KeyRelease +#endif + +// Affects: Should be without side effects. +#ifdef Above +#ifndef FIXX11H_Above +#define FIXX11H_Above +const int XAbove = Above; +#undef Above +const int Above = XAbove; +#endif +#undef Above +#endif + +// Affects: Should be without side effects. +#ifdef Below +#ifndef FIXX11H_Below +#define FIXX11H_Below +const int XBelow = Below; +#undef Below +const int Below = XBelow; +#endif +#undef Below +#endif + +// Affects: Should be without side effects. +#ifdef FocusIn +#ifndef FIXX11H_FocusIn +#define FIXX11H_FocusIn +const int XFocusIn = FocusIn; +#undef FocusIn +const int FocusIn = XFocusIn; +#endif +#undef FocusIn +#endif + +// Affects: Should be without side effects. +#ifdef FocusOut +#ifndef FIXX11H_FocusOut +#define FIXX11H_FocusOut +const int XFocusOut = FocusOut; +#undef FocusOut +const int FocusOut = XFocusOut; +#endif +#undef FocusOut +#endif + +// Affects: Should be without side effects. +#ifdef Always +#ifndef FIXX11H_Always +#define FIXX11H_Always +const int XAlways = Always; +#undef Always +const int Always = XAlways; +#endif +#undef Always +#endif + +// Affects: Should be without side effects. +#ifdef Success +#ifndef FIXX11H_Success +#define FIXX11H_Success +const int XSuccess = Success; +#undef Success +const int Success = XSuccess; +#endif +#undef Success +#endif + +// Affects: Should be without side effects. +#ifdef GrayScale +#ifndef FIXX11H_GrayScale +#define FIXX11H_GrayScale +const int XGrayScale = GrayScale; +#undef GrayScale +const int GrayScale = XGrayScale; +#endif +#undef GrayScale +#endif + +// Affects: Should be without side effects. +#ifdef Status +#ifndef FIXX11H_Status +#define FIXX11H_Status +typedef Status XStatus; +#undef Status +typedef XStatus Status; +#endif +#undef Status +#endif + +// Affects: Should be without side effects. +#ifdef CursorShape +#ifndef FIXX11H_CursorShape +#define FIXX11H_CursorShape +const int XCursorShape = CursorShape; +#undef CursorShape +const int CursorShape = CursorShape; +#endif +#undef CursorShape +#endif + +// template ---> +// Affects: Should be without side effects. +#ifdef index +#ifndef FIXX11H_index +#define FIXX11H_index +inline +char* Xindex( const char* s, int c ) + { + return index( s, c ); + } +#undef index +inline +char* index( const char* s, int c ) + { + return Xindex( s, c ); + } +#endif +#undef index +#endif +// template <--- + +#ifdef rindex +// Affects: Should be without side effects. +#ifndef FIXX11H_rindex +#define FIXX11H_rindex +inline +char* Xrindex( const char* s, int c ) + { + return rindex( s, c ); + } +#undef rindex +inline +char* rindex( const char* s, int c ) + { + return Xrindex( s, c ); + } +#endif +#undef rindex +#endif +} + +using namespace X; diff --git a/style/qtc_kstyle.cpp b/style/qtc_kstyle.cpp new file mode 100644 index 0000000..da7e9e1 --- /dev/null +++ b/style/qtc_kstyle.cpp @@ -0,0 +1,1717 @@ +/* + * + * QtCKStyle + * Copyright (C) 2001-2002 Karol Szwed + * + * QWindowsStyle CC_ListView and style images were kindly donated by TrollTech, + * Copyright (C) 1998-2000 TrollTech AS. + * + * Many thanks to Bradley T. Hughes for the 3 button scrollbar code. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "qtc_kstyle.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef Q_WS_X11 +# include +# ifdef HAVE_XRENDER +# include // schroder + extern bool qt_use_xrender; +# endif +#else +#undef HAVE_XRENDER +#endif + + +#include + +struct QtCKStylePrivate +{ + bool highcolor : 1; + bool useFilledFrameWorkaround : 1; + bool etchDisabledText : 1; + bool scrollablePopupmenus : 1; + bool menuAltKeyNavigation : 1; + bool menuDropShadow : 1; + bool sloppySubMenus : 1; + int popupMenuDelay; + float menuOpacity; + + QtCKStyle::KStyleScrollBarType scrollbarType; + QtCKStyle::KStyleFlags flags; + + //For KPE_ListViewBranch + QBitmap *verticalLine; + QBitmap *horizontalLine; +}; + +// ----------------------------------------------------------------------------- + + +QtCKStyle::QtCKStyle( KStyleFlags flags, KStyleScrollBarType sbtype ) + : QCommonStyle(), d(new QtCKStylePrivate) +{ + d->flags = flags; + d->useFilledFrameWorkaround = (flags & FilledFrameWorkaround); + d->scrollbarType = sbtype; + d->highcolor = QPixmap::defaultDepth() > 8; + + // Read style settings + QSettings settings; + d->popupMenuDelay = settings.readNumEntry ("/QtCKStyle/Settings/PopupMenuDelay", 256); + d->sloppySubMenus = settings.readBoolEntry("/QtCKStyle/Settings/SloppySubMenus", false); + d->etchDisabledText = settings.readBoolEntry("/QtCKStyle/Settings/EtchDisabledText", true); + d->menuAltKeyNavigation = settings.readBoolEntry("/QtCKStyle/Settings/MenuAltKeyNavigation", true); + d->scrollablePopupmenus = settings.readBoolEntry("/QtCKStyle/Settings/ScrollablePopupMenus", false); + d->menuDropShadow = settings.readBoolEntry("/QtCKStyle/Settings/MenuDropShadow", false); + + d->verticalLine = 0; + d->horizontalLine = 0; +} + + +QtCKStyle::~QtCKStyle() +{ + delete d->verticalLine; + delete d->horizontalLine; + + delete d; +} + + +QString QtCKStyle::defaultStyle() +{ + if (QPixmap::defaultDepth() > 8) + return QString("plastik"); + else + return QString("light, 3rd revision"); +} + + +void QtCKStyle::polish( QWidget* widget ) +{ + if ( d->useFilledFrameWorkaround ) + { + if ( QFrame *frame = ::qt_cast< QFrame* >( widget ) ) { + QFrame::Shape shape = frame->frameShape(); + if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel) + widget->installEventFilter(this); + } + } +} + + +void QtCKStyle::unPolish( QWidget* widget ) +{ + if ( d->useFilledFrameWorkaround ) + { + if ( QFrame *frame = ::qt_cast< QFrame* >( widget ) ) { + QFrame::Shape shape = frame->frameShape(); + if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel) + widget->removeEventFilter(this); + } + } +} + + +// Style changes (should) always re-polish popups. +void QtCKStyle::polishPopupMenu( QPopupMenu* p ) +{ + if (!p->testWState( WState_Polished )) + p->setCheckable(true); +} + + +// ----------------------------------------------------------------------------- +// QtCKStyle extensions +// ----------------------------------------------------------------------------- + +void QtCKStyle::setScrollBarType(KStyleScrollBarType sbtype) +{ + d->scrollbarType = sbtype; +} + +QtCKStyle::KStyleFlags QtCKStyle::styleFlags() const +{ + return d->flags; +} + +void QtCKStyle::drawKStylePrimitive( KStylePrimitive kpe, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption& /* opt */ ) const +{ + switch( kpe ) + { + // Dock / Toolbar / General handles. + // --------------------------------- + + case KPE_DockWindowHandle: { + + // Draws a nice DockWindow handle including the dock title. + QWidget* wid = const_cast(widget); + bool horizontal = flags & Style_Horizontal; + int x,y,w,h,x2,y2; + + r.rect( &x, &y, &w, &h ); + if ((w <= 2) || (h <= 2)) { + p->fillRect(r, cg.highlight()); + return; + } + + + x2 = x + w - 1; + y2 = y + h - 1; + + QFont fnt; + fnt = QApplication::font(wid); + fnt.setPointSize( fnt.pointSize()-2 ); + + // Draw the item on an off-screen pixmap + // to preserve Xft antialiasing for + // vertically oriented handles. + QPixmap pix; + if (horizontal) + pix.resize( h-2, w-2 ); + else + pix.resize( w-2, h-2 ); + + QString title = wid->parentWidget()->caption(); + QPainter p2; + p2.begin(&pix); + p2.fillRect(pix.rect(), cg.brush(QColorGroup::Highlight)); + p2.setPen(cg.highlightedText()); + p2.setFont(fnt); + p2.drawText(pix.rect(), AlignCenter, title); + p2.end(); + + // Draw a sunken bevel + p->setPen(cg.dark()); + p->drawLine(x, y, x2, y); + p->drawLine(x, y, x, y2); + p->setPen(cg.light()); + p->drawLine(x+1, y2, x2, y2); + p->drawLine(x2, y+1, x2, y2); + + if (horizontal) { + QWMatrix m; + m.rotate(-90.0); + QPixmap vpix = pix.xForm(m); + bitBlt(wid, r.x()+1, r.y()+1, &vpix); + } else + bitBlt(wid, r.x()+1, r.y()+1, &pix); + + break; + } + + + /* + * KPE_ListViewExpander and KPE_ListViewBranch are based on code from + * QWindowStyle's CC_ListView, kindly donated by TrollTech. + * CC_ListView code is Copyright (C) 1998-2000 TrollTech AS. + */ + + case KPE_ListViewExpander: { + // Typical Windows style expand/collapse element. + int radius = (r.width() - 4) / 2; + int centerx = r.x() + r.width()/2; + int centery = r.y() + r.height()/2; + + // Outer box + p->setPen( cg.mid() ); + p->drawRect( r ); + + // plus or minus + p->setPen( cg.text() ); + p->drawLine( centerx - radius, centery, centerx + radius, centery ); + if ( flags & Style_On ) // Collapsed = On + p->drawLine( centerx, centery - radius, centerx, centery + radius ); + break; + } + + case KPE_ListViewBranch: { + // Typical Windows style listview branch element (dotted line). + + // Create the dotline pixmaps if not already created + if ( !d->verticalLine ) + { + // make 128*1 and 1*128 bitmaps that can be used for + // drawing the right sort of lines. + d->verticalLine = new QBitmap( 1, 129, true ); + d->horizontalLine = new QBitmap( 128, 1, true ); + QPointArray a( 64 ); + QPainter p2; + p2.begin( d->verticalLine ); + + int i; + for( i=0; i < 64; i++ ) + a.setPoint( i, 0, i*2+1 ); + p2.setPen( color1 ); + p2.drawPoints( a ); + p2.end(); + QApplication::flushX(); + d->verticalLine->setMask( *d->verticalLine ); + + p2.begin( d->horizontalLine ); + for( i=0; i < 64; i++ ) + a.setPoint( i, i*2+1, 0 ); + p2.setPen( color1 ); + p2.drawPoints( a ); + p2.end(); + QApplication::flushX(); + d->horizontalLine->setMask( *d->horizontalLine ); + } + + p->setPen( cg.text() ); // cg.dark() is bad for dark color schemes. + + if (flags & Style_Horizontal) + { + int point = r.x(); + int other = r.y(); + int end = r.x()+r.width(); + int thickness = r.height(); + + while( point < end ) + { + int i = 128; + if ( i+point > end ) + i = end-point; + p->drawPixmap( point, other, *d->horizontalLine, 0, 0, i, thickness ); + point += i; + } + + } else { + int point = r.y(); + int other = r.x(); + int end = r.y()+r.height(); + int thickness = r.width(); + int pixmapoffset = (flags & Style_NoChange) ? 0 : 1; // ### Hackish + + while( point < end ) + { + int i = 128; + if ( i+point > end ) + i = end-point; + p->drawPixmap( other, point, *d->verticalLine, 0, pixmapoffset, thickness, i ); + point += i; + } + } + + break; + } + + // Reimplement the other primitives in your styles. + // The current implementation just paints something visibly different. + case KPE_ToolBarHandle: + case KPE_GeneralHandle: + case KPE_SliderHandle: + p->fillRect(r, cg.light()); + break; + + case KPE_SliderGroove: + p->fillRect(r, cg.dark()); + break; + + default: + p->fillRect(r, Qt::yellow); // Something really bad happened - highlight. + break; + } +} + + +int QtCKStyle::kPixelMetric( KStylePixelMetric kpm, const QWidget* /* widget */) const +{ + int value; + switch(kpm) + { + case KPM_ListViewBranchThickness: + value = 1; + break; + + case KPM_MenuItemSeparatorHeight: + case KPM_MenuItemHMargin: + case KPM_MenuItemVMargin: + case KPM_MenuItemHFrame: + case KPM_MenuItemVFrame: + case KPM_MenuItemCheckMarkHMargin: + case KPM_MenuItemArrowHMargin: + case KPM_MenuItemTabSpacing: + default: + value = 0; + } + + return value; +} + + +// ----------------------------------------------------------------------------- + +void QtCKStyle::drawPrimitive( PrimitiveElement pe, + QPainter* p, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption& opt ) const +{ + // TOOLBAR/DOCK WINDOW HANDLE + // ------------------------------------------------------------------------ + if (pe == PE_DockWindowHandle) + { + // Wild workarounds are here. Beware. + QWidget *widget, *parent; + + if (p && p->device()->devType() == QInternal::Widget) { + widget = static_cast(p->device()); + parent = widget->parentWidget(); + } else + return; // Don't paint on non-widgets + + // Check if we are a normal toolbar or a hidden dockwidget. + if ( parent && + (parent->inherits("QToolBar") || // Normal toolbar + (parent->inherits("QMainWindow")) )) // Collapsed dock + + // Draw a toolbar handle + drawKStylePrimitive( KPE_ToolBarHandle, p, widget, r, cg, flags, opt ); + + else if ( widget->inherits("QDockWindowHandle") ) + + // Draw a dock window handle + drawKStylePrimitive( KPE_DockWindowHandle, p, widget, r, cg, flags, opt ); + + else + // General handle, probably a kicker applet handle. + drawKStylePrimitive( KPE_GeneralHandle, p, widget, r, cg, flags, opt ); + + } else + QCommonStyle::drawPrimitive( pe, p, r, cg, flags, opt ); +} + + + +void QtCKStyle::drawControl( ControlElement element, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption &opt ) const +{ + switch (element) + { + // TABS + // ------------------------------------------------------------------------ + case CE_TabBarTab: { + const QTabBar* tb = (const QTabBar*) widget; + QTabBar::Shape tbs = tb->shape(); + bool selected = flags & Style_Selected; + int x = r.x(), y=r.y(), bottom=r.bottom(), right=r.right(); + + switch (tbs) { + + case QTabBar::RoundedAbove: { + if (!selected) + p->translate(0,1); + p->setPen(selected ? cg.light() : cg.shadow()); + p->drawLine(x, y+4, x, bottom); + p->drawLine(x, y+4, x+4, y); + p->drawLine(x+4, y, right-1, y); + if (selected) + p->setPen(cg.shadow()); + p->drawLine(right, y+1, right, bottom); + + p->setPen(cg.midlight()); + p->drawLine(x+1, y+4, x+1, bottom); + p->drawLine(x+1, y+4, x+4, y+1); + p->drawLine(x+5, y+1, right-2, y+1); + + if (selected) { + p->setPen(cg.mid()); + p->drawLine(right-1, y+1, right-1, bottom); + } else { + p->setPen(cg.mid()); + p->drawPoint(right-1, y+1); + p->drawLine(x+4, y+2, right-1, y+2); + p->drawLine(x+3, y+3, right-1, y+3); + p->fillRect(x+2, y+4, r.width()-3, r.height()-6, cg.mid()); + + p->setPen(cg.light()); + p->drawLine(x, bottom-1, right, bottom-1); + p->translate(0,-1); + } + break; + } + + case QTabBar::RoundedBelow: { + if (!selected) + p->translate(0,-1); + p->setPen(selected ? cg.light() : cg.shadow()); + p->drawLine(x, bottom-4, x, y); + if (selected) + p->setPen(cg.mid()); + p->drawLine(x, bottom-4, x+4, bottom); + if (selected) + p->setPen(cg.shadow()); + p->drawLine(x+4, bottom, right-1, bottom); + p->drawLine(right, bottom-1, right, y); + + p->setPen(cg.midlight()); + p->drawLine(x+1, bottom-4, x+1, y); + p->drawLine(x+1, bottom-4, x+4, bottom-1); + p->drawLine(x+5, bottom-1, right-2, bottom-1); + + if (selected) { + p->setPen(cg.mid()); + p->drawLine(right-1, y, right-1, bottom-1); + } else { + p->setPen(cg.mid()); + p->drawPoint(right-1, bottom-1); + p->drawLine(x+4, bottom-2, right-1, bottom-2); + p->drawLine(x+3, bottom-3, right-1, bottom-3); + p->fillRect(x+2, y+2, r.width()-3, r.height()-6, cg.mid()); + p->translate(0,1); + p->setPen(cg.dark()); + p->drawLine(x, y, right, y); + } + break; + } + + case QTabBar::TriangularAbove: { + if (!selected) + p->translate(0,1); + p->setPen(selected ? cg.light() : cg.shadow()); + p->drawLine(x, bottom, x, y+6); + p->drawLine(x, y+6, x+6, y); + p->drawLine(x+6, y, right-6, y); + if (selected) + p->setPen(cg.mid()); + p->drawLine(right-5, y+1, right-1, y+5); + p->setPen(cg.shadow()); + p->drawLine(right, y+6, right, bottom); + + p->setPen(cg.midlight()); + p->drawLine(x+1, bottom, x+1, y+6); + p->drawLine(x+1, y+6, x+6, y+1); + p->drawLine(x+6, y+1, right-6, y+1); + p->drawLine(right-5, y+2, right-2, y+5); + p->setPen(cg.mid()); + p->drawLine(right-1, y+6, right-1, bottom); + + QPointArray a(6); + a.setPoint(0, x+2, bottom); + a.setPoint(1, x+2, y+7); + a.setPoint(2, x+7, y+2); + a.setPoint(3, right-7, y+2); + a.setPoint(4, right-2, y+7); + a.setPoint(5, right-2, bottom); + p->setPen (selected ? cg.background() : cg.mid()); + p->setBrush(selected ? cg.background() : cg.mid()); + p->drawPolygon(a); + p->setBrush(NoBrush); + if (!selected) { + p->translate(0,-1); + p->setPen(cg.light()); + p->drawLine(x, bottom, right, bottom); + } + break; + } + + default: { // QTabBar::TriangularBelow + if (!selected) + p->translate(0,-1); + p->setPen(selected ? cg.light() : cg.shadow()); + p->drawLine(x, y, x, bottom-6); + if (selected) + p->setPen(cg.mid()); + p->drawLine(x, bottom-6, x+6, bottom); + if (selected) + p->setPen(cg.shadow()); + p->drawLine(x+6, bottom, right-6, bottom); + p->drawLine(right-5, bottom-1, right-1, bottom-5); + if (!selected) + p->setPen(cg.shadow()); + p->drawLine(right, bottom-6, right, y); + + p->setPen(cg.midlight()); + p->drawLine(x+1, y, x+1, bottom-6); + p->drawLine(x+1, bottom-6, x+6, bottom-1); + p->drawLine(x+6, bottom-1, right-6, bottom-1); + p->drawLine(right-5, bottom-2, right-2, bottom-5); + p->setPen(cg.mid()); + p->drawLine(right-1, bottom-6, right-1, y); + + QPointArray a(6); + a.setPoint(0, x+2, y); + a.setPoint(1, x+2, bottom-7); + a.setPoint(2, x+7, bottom-2); + a.setPoint(3, right-7, bottom-2); + a.setPoint(4, right-2, bottom-7); + a.setPoint(5, right-2, y); + p->setPen (selected ? cg.background() : cg.mid()); + p->setBrush(selected ? cg.background() : cg.mid()); + p->drawPolygon(a); + p->setBrush(NoBrush); + if (!selected) { + p->translate(0,1); + p->setPen(cg.dark()); + p->drawLine(x, y, right, y); + } + break; + } + }; + + break; + } + + // Popup menu scroller + // ------------------------------------------------------------------------ + case CE_PopupMenuScroller: { + p->fillRect(r, cg.background()); + drawPrimitive(PE_ButtonTool, p, r, cg, Style_Enabled); + drawPrimitive((flags & Style_Up) ? PE_ArrowUp : PE_ArrowDown, p, r, cg, Style_Enabled); + break; + } + + + // PROGRESSBAR + // ------------------------------------------------------------------------ + case CE_ProgressBarGroove: { + QRect fr = subRect(SR_ProgressBarGroove, widget); + drawPrimitive(PE_Panel, p, fr, cg, Style_Sunken, QStyleOption::Default); + break; + } + + case CE_ProgressBarContents: { + // ### Take into account totalSteps() for busy indicator + const QProgressBar* pb = (const QProgressBar*)widget; + QRect cr = subRect(SR_ProgressBarContents, widget); + double progress = pb->progress(); + bool reverse = QApplication::reverseLayout(); + int steps = pb->totalSteps(); + + if (!cr.isValid()) + return; + + // Draw progress bar + if (progress > 0 || steps == 0) { + double pg = (steps == 0) ? 0.1 : progress / steps; + int width = QMIN(cr.width(), (int)(pg * cr.width())); + if (steps == 0) { //Busy indicator + + if (width < 1) width = 1; //A busy indicator with width 0 is kind of useless + + int remWidth = cr.width() - width; //Never disappear completely + if (remWidth <= 0) remWidth = 1; //Do something non-crashy when too small... + + int pstep = int(progress) % ( 2 * remWidth ); + + if ( pstep > remWidth ) { + //Bounce about.. We're remWidth + some delta, we want to be remWidth - delta... + // - ( (remWidth + some delta) - 2* remWidth ) = - (some deleta - remWidth) = remWidth - some delta.. + pstep = - (pstep - 2 * remWidth ); + } + + if (reverse) + p->fillRect(cr.x() + cr.width() - width - pstep, cr.y(), width, cr.height(), + cg.brush(QColorGroup::Highlight)); + else + p->fillRect(cr.x() + pstep, cr.y(), width, cr.height(), + cg.brush(QColorGroup::Highlight)); + + return; + } + + + // Do fancy gradient for highcolor displays +// if (d->highcolor) { +// QColor c(cg.highlight()); +// KPixmap pix; +// pix.resize(cr.width(), cr.height()); +// KPixmapEffect::gradient(pix, reverse ? c.light(150) : c.dark(150), +// reverse ? c.dark(150) : c.light(150), +// KPixmapEffect::HorizontalGradient); +// if (reverse) +// p->drawPixmap(cr.x()+(cr.width()-width), cr.y(), pix, +// cr.width()-width, 0, width, cr.height()); +// else +// p->drawPixmap(cr.x(), cr.y(), pix, 0, 0, width, cr.height()); +// } else + if (reverse) + p->fillRect(cr.x()+(cr.width()-width), cr.y(), width, cr.height(), + cg.brush(QColorGroup::Highlight)); + else + p->fillRect(cr.x(), cr.y(), width, cr.height(), + cg.brush(QColorGroup::Highlight)); + } + break; + } + + case CE_ProgressBarLabel: { + const QProgressBar* pb = (const QProgressBar*)widget; + QRect cr = subRect(SR_ProgressBarContents, widget); + double progress = pb->progress(); + bool reverse = QApplication::reverseLayout(); + int steps = pb->totalSteps(); + + if (!cr.isValid()) + return; + + QFont font = p->font(); + font.setBold(true); + p->setFont(font); + + // Draw label + if (progress > 0 || steps == 0) { + double pg = (steps == 0) ? 1.0 : progress / steps; + int width = QMIN(cr.width(), (int)(pg * cr.width())); + QRect crect; + if (reverse) + crect.setRect(cr.x()+(cr.width()-width), cr.y(), cr.width(), cr.height()); + else + crect.setRect(cr.x()+width, cr.y(), cr.width(), cr.height()); + + p->save(); + p->setPen(pb->isEnabled() ? (reverse ? cg.text() : cg.highlightedText()) : cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + p->setClipRect(crect); + p->setPen(reverse ? cg.highlightedText() : cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + p->restore(); + + } else { + p->setPen(cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + } + + break; + } + + default: + QCommonStyle::drawControl(element, p, widget, r, cg, flags, opt); + } +} + + +QRect QtCKStyle::subRect(SubRect r, const QWidget* widget) const +{ + switch(r) + { + // KDE2 look smooth progress bar + // ------------------------------------------------------------------------ + case SR_ProgressBarGroove: + return widget->rect(); + + case SR_ProgressBarContents: + case SR_ProgressBarLabel: { + // ### take into account indicatorFollowsStyle() + QRect rt = widget->rect(); + return QRect(rt.x()+2, rt.y()+2, rt.width()-4, rt.height()-4); + } + + default: + return QCommonStyle::subRect(r, widget); + } +} + + +int QtCKStyle::pixelMetric(PixelMetric m, const QWidget* widget) const +{ + switch(m) + { + // BUTTONS + // ------------------------------------------------------------------------ + case PM_ButtonShiftHorizontal: // Offset by 1 + case PM_ButtonShiftVertical: // ### Make configurable + return 1; + + case PM_DockWindowHandleExtent: + { + QWidget* parent = 0; + // Check that we are not a normal toolbar or a hidden dockwidget, + // in which case we need to adjust the height for font size + if (widget && (parent = widget->parentWidget() ) + && !parent->inherits("QToolBar") + && !parent->inherits("QMainWindow") + && widget->inherits("QDockWindowHandle") ) + return widget->fontMetrics().lineSpacing(); + else + return QCommonStyle::pixelMetric(m, widget); + } + + // TABS + // ------------------------------------------------------------------------ + case PM_TabBarTabHSpace: + return 24; + + case PM_TabBarTabVSpace: { + const QTabBar * tb = (const QTabBar *) widget; + if ( tb->shape() == QTabBar::RoundedAbove || + tb->shape() == QTabBar::RoundedBelow ) + return 10; + else + return 4; + } + + case PM_TabBarTabOverlap: { + const QTabBar* tb = (const QTabBar*)widget; + QTabBar::Shape tbs = tb->shape(); + + if ( (tbs == QTabBar::RoundedAbove) || + (tbs == QTabBar::RoundedBelow) ) + return 0; + else + return 2; + } + + // SLIDER + // ------------------------------------------------------------------------ + case PM_SliderLength: + return 18; + + case PM_SliderThickness: + return 24; + + // Determines how much space to leave for the actual non-tickmark + // portion of the slider. + case PM_SliderControlThickness: { + const QSlider* slider = (const QSlider*)widget; + QSlider::TickSetting ts = slider->tickmarks(); + int thickness = (slider->orientation() == Horizontal) ? + slider->height() : slider->width(); + switch (ts) { + case QSlider::NoMarks: // Use total area. + break; + case QSlider::Both: + thickness = (thickness/2) + 3; // Use approx. 1/2 of area. + break; + default: // Use approx. 2/3 of area + thickness = ((thickness*2)/3) + 3; + break; + }; + return thickness; + } + + // SPLITTER + // ------------------------------------------------------------------------ + case PM_SplitterWidth: + if (widget && widget->inherits("QDockWindowResizeHandle")) + return 8; // ### why do we need 2pix extra? + else + return 6; + + // FRAMES + // ------------------------------------------------------------------------ + case PM_MenuBarFrameWidth: + return 1; + + case PM_DockWindowFrameWidth: + return 1; + + // GENERAL + // ------------------------------------------------------------------------ + case PM_MaximumDragDistance: + return -1; + + case PM_MenuBarItemSpacing: + return 5; + + case PM_ToolBarItemSpacing: + return 0; + + case PM_PopupMenuScrollerHeight: + return pixelMetric( PM_ScrollBarExtent, 0); + + default: + return QCommonStyle::pixelMetric( m, widget ); + } +} + +//Helper to find the next sibling that's not hidden +static QListViewItem* nextVisibleSibling(QListViewItem* item) +{ + QListViewItem* sibling = item; + do + { + sibling = sibling->nextSibling(); + } + while (sibling && !sibling->isVisible()); + + return sibling; +} + +void QtCKStyle::drawComplexControl( ComplexControl control, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + SCFlags controls, + SCFlags active, + const QStyleOption &opt ) const +{ + switch(control) + { + // 3 BUTTON SCROLLBAR + // ------------------------------------------------------------------------ + case CC_ScrollBar: { + // Many thanks to Brad Hughes for contributing this code. + bool useThreeButtonScrollBar = (d->scrollbarType & ThreeButtonScrollBar); + + const QScrollBar *sb = (const QScrollBar*)widget; + bool maxedOut = (sb->minValue() == sb->maxValue()); + bool horizontal = (sb->orientation() == Qt::Horizontal); + SFlags sflags = ((horizontal ? Style_Horizontal : Style_Default) | + (maxedOut ? Style_Default : Style_Enabled)); + + QRect addline, subline, subline2, addpage, subpage, slider, first, last; + subline = querySubControlMetrics(control, widget, SC_ScrollBarSubLine, opt); + addline = querySubControlMetrics(control, widget, SC_ScrollBarAddLine, opt); + subpage = querySubControlMetrics(control, widget, SC_ScrollBarSubPage, opt); + addpage = querySubControlMetrics(control, widget, SC_ScrollBarAddPage, opt); + slider = querySubControlMetrics(control, widget, SC_ScrollBarSlider, opt); + first = querySubControlMetrics(control, widget, SC_ScrollBarFirst, opt); + last = querySubControlMetrics(control, widget, SC_ScrollBarLast, opt); + subline2 = addline; + + if ( useThreeButtonScrollBar ) + if (horizontal) + subline2.moveBy(-addline.width(), 0); + else + subline2.moveBy(0, -addline.height()); + + // Draw the up/left button set + if ((controls & SC_ScrollBarSubLine) && subline.isValid()) { + drawPrimitive(PE_ScrollBarSubLine, p, subline, cg, + sflags | (active == SC_ScrollBarSubLine ? + Style_Down : Style_Default)); + + if (useThreeButtonScrollBar && subline2.isValid()) + drawPrimitive(PE_ScrollBarSubLine, p, subline2, cg, + sflags | (active == SC_ScrollBarSubLine ? + Style_Down : Style_Default)); + } + + if ((controls & SC_ScrollBarAddLine) && addline.isValid()) + drawPrimitive(PE_ScrollBarAddLine, p, addline, cg, + sflags | ((active == SC_ScrollBarAddLine) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarSubPage) && subpage.isValid()) + drawPrimitive(PE_ScrollBarSubPage, p, subpage, cg, + sflags | ((active == SC_ScrollBarSubPage) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarAddPage) && addpage.isValid()) + drawPrimitive(PE_ScrollBarAddPage, p, addpage, cg, + sflags | ((active == SC_ScrollBarAddPage) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarFirst) && first.isValid()) + drawPrimitive(PE_ScrollBarFirst, p, first, cg, + sflags | ((active == SC_ScrollBarFirst) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarLast) && last.isValid()) + drawPrimitive(PE_ScrollBarLast, p, last, cg, + sflags | ((active == SC_ScrollBarLast) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarSlider) && slider.isValid()) { + drawPrimitive(PE_ScrollBarSlider, p, slider, cg, + sflags | ((active == SC_ScrollBarSlider) ? + Style_Down : Style_Default)); + // Draw focus rect + if (sb->hasFocus()) { + QRect fr(slider.x() + 2, slider.y() + 2, + slider.width() - 5, slider.height() - 5); + drawPrimitive(PE_FocusRect, p, fr, cg, Style_Default); + } + } + break; + } + + + // SLIDER + // ------------------------------------------------------------------- + case CC_Slider: { + const QSlider* slider = (const QSlider*)widget; + QRect groove = querySubControlMetrics(CC_Slider, widget, SC_SliderGroove, opt); + QRect handle = querySubControlMetrics(CC_Slider, widget, SC_SliderHandle, opt); + + // Double-buffer slider for no flicker + QPixmap pix(widget->size()); + QPainter p2; + p2.begin(&pix); + + if ( slider->parentWidget() && + slider->parentWidget()->backgroundPixmap() && + !slider->parentWidget()->backgroundPixmap()->isNull() ) { + QPixmap pixmap = *(slider->parentWidget()->backgroundPixmap()); + p2.drawTiledPixmap(r, pixmap, slider->pos()); + } else + pix.fill(cg.background()); + + // Draw slider groove + if ((controls & SC_SliderGroove) && groove.isValid()) { + drawKStylePrimitive( KPE_SliderGroove, &p2, widget, groove, cg, flags, opt ); + + // Draw the focus rect around the groove + if (slider->hasFocus()) + drawPrimitive(PE_FocusRect, &p2, groove, cg); + } + + // Draw the tickmarks + if (controls & SC_SliderTickmarks) + QCommonStyle::drawComplexControl(control, &p2, widget, + r, cg, flags, SC_SliderTickmarks, active, opt); + + // Draw the slider handle + if ((controls & SC_SliderHandle) && handle.isValid()) { + if (active == SC_SliderHandle) + flags |= Style_Active; + drawKStylePrimitive( KPE_SliderHandle, &p2, widget, handle, cg, flags, opt ); + } + + p2.end(); + bitBlt((QWidget*)widget, r.x(), r.y(), &pix); + break; + } + + // LISTVIEW + // ------------------------------------------------------------------- + case CC_ListView: { + + /* + * Many thanks to TrollTech AS for donating CC_ListView from QWindowsStyle. + * CC_ListView code is Copyright (C) 1998-2000 TrollTech AS. + */ + + // Paint the icon and text. + if ( controls & SC_ListView ) + QCommonStyle::drawComplexControl( control, p, widget, r, cg, flags, controls, active, opt ); + + // If we're have a branch or are expanded... + if ( controls & (SC_ListViewBranch | SC_ListViewExpand) ) + { + // If no list view item was supplied, break + if (opt.isDefault()) + break; + + QListViewItem *item = opt.listViewItem(); + QListViewItem *child = item->firstChild(); + + int y = r.y(); + int c; // dotline vertice count + int dotoffset = 0; + QPointArray dotlines; + + if ( active == SC_All && controls == SC_ListViewExpand ) { + // We only need to draw a vertical line + c = 2; + dotlines.resize(2); + dotlines[0] = QPoint( r.right(), r.top() ); + dotlines[1] = QPoint( r.right(), r.bottom() ); + + } else { + + int linetop = 0, linebot = 0; + // each branch needs at most two lines, ie. four end points + dotoffset = (item->itemPos() + item->height() - y) % 2; + dotlines.resize( item->childCount() * 4 ); + c = 0; + + // skip the stuff above the exposed rectangle + while ( child && y + child->height() <= 0 ) + { + y += child->totalHeight(); + child = nextVisibleSibling(child); + } + + int bx = r.width() / 2; + + // paint stuff in the magical area + QListView* v = item->listView(); + int lh = QMAX( p->fontMetrics().height() + 2 * v->itemMargin(), + QApplication::globalStrut().height() ); + if ( lh % 2 > 0 ) + lh++; + + // Draw all the expand/close boxes... + QRect boxrect; + QStyle::StyleFlags boxflags; + while ( child && y < r.height() ) + { + linebot = y + lh/2; + if ( (child->isExpandable() || child->childCount()) && + (child->height() > 0) ) + { + // The primitive requires a rect. + boxrect = QRect( bx-4, linebot-4, 9, 9 ); + boxflags = child->isOpen() ? QStyle::Style_Off : QStyle::Style_On; + + // QtCKStyle extension: Draw the box and expand/collapse indicator + drawKStylePrimitive( KPE_ListViewExpander, p, NULL, boxrect, cg, boxflags, opt ); + + // dotlinery + p->setPen( cg.mid() ); + dotlines[c++] = QPoint( bx, linetop ); + dotlines[c++] = QPoint( bx, linebot - 5 ); + dotlines[c++] = QPoint( bx + 5, linebot ); + dotlines[c++] = QPoint( r.width(), linebot ); + linetop = linebot + 5; + } else { + // just dotlinery + dotlines[c++] = QPoint( bx+1, linebot ); + dotlines[c++] = QPoint( r.width(), linebot ); + } + + y += child->totalHeight(); + child = nextVisibleSibling(child); + } + + if ( child ) // there's a child to draw, so move linebot to edge of rectangle + linebot = r.height(); + + if ( linetop < linebot ) + { + dotlines[c++] = QPoint( bx, linetop ); + dotlines[c++] = QPoint( bx, linebot ); + } + } + + // Draw all the branches... + static int thickness = kPixelMetric( KPM_ListViewBranchThickness ); + int line; // index into dotlines + QRect branchrect; + QStyle::StyleFlags branchflags; + for( line = 0; line < c; line += 2 ) + { + // assumptions here: lines are horizontal or vertical. + // lines always start with the numerically lowest + // coordinate. + + // point ... relevant coordinate of current point + // end ..... same coordinate of the end of the current line + // other ... the other coordinate of the current point/line + if ( dotlines[line].y() == dotlines[line+1].y() ) + { + // Horizontal branch + int end = dotlines[line+1].x(); + int point = dotlines[line].x(); + int other = dotlines[line].y(); + + branchrect = QRect( point, other-(thickness/2), end-point, thickness ); + branchflags = QStyle::Style_Horizontal; + + // QtCKStyle extension: Draw the horizontal branch + drawKStylePrimitive( KPE_ListViewBranch, p, NULL, branchrect, cg, branchflags, opt ); + + } else { + // Vertical branch + int end = dotlines[line+1].y(); + int point = dotlines[line].y(); + int other = dotlines[line].x(); + int pixmapoffset = ((point & 1) != dotoffset ) ? 1 : 0; + + branchrect = QRect( other-(thickness/2), point, thickness, end-point ); + if (!pixmapoffset) // ### Hackish - used to hint the offset + branchflags = QStyle::Style_NoChange; + else + branchflags = QStyle::Style_Default; + + // QtCKStyle extension: Draw the vertical branch + drawKStylePrimitive( KPE_ListViewBranch, p, NULL, branchrect, cg, branchflags, opt ); + } + } + } + break; + } + + default: + QCommonStyle::drawComplexControl( control, p, widget, r, cg, + flags, controls, active, opt ); + break; + } +} + + +QStyle::SubControl QtCKStyle::querySubControl( ComplexControl control, + const QWidget* widget, + const QPoint &pos, + const QStyleOption &opt ) const +{ + QStyle::SubControl ret = QCommonStyle::querySubControl(control, widget, pos, opt); + + if (d->scrollbarType == ThreeButtonScrollBar) { + // Enable third button + if (control == CC_ScrollBar && ret == SC_None) + ret = SC_ScrollBarSubLine; + } + return ret; +} + + +QRect QtCKStyle::querySubControlMetrics( ComplexControl control, + const QWidget* widget, + SubControl sc, + const QStyleOption &opt ) const +{ + QRect ret; + + if (control == CC_ScrollBar) + { + bool threeButtonScrollBar = d->scrollbarType & ThreeButtonScrollBar; + bool platinumScrollBar = d->scrollbarType & PlatinumStyleScrollBar; + bool nextScrollBar = d->scrollbarType & NextStyleScrollBar; + + const QScrollBar *sb = (const QScrollBar*)widget; + bool horizontal = sb->orientation() == Qt::Horizontal; + int sliderstart = sb->sliderStart(); + int sbextent = pixelMetric(PM_ScrollBarExtent, widget); + int maxlen = (horizontal ? sb->width() : sb->height()) + - (sbextent * (threeButtonScrollBar ? 3 : 2)); + int sliderlen; + + // calculate slider length + if (sb->maxValue() != sb->minValue()) + { + uint range = sb->maxValue() - sb->minValue(); + sliderlen = (sb->pageStep() * maxlen) / (range + sb->pageStep()); + + int slidermin = pixelMetric( PM_ScrollBarSliderMin, widget ); + if ( sliderlen < slidermin || range > INT_MAX / 2 ) + sliderlen = slidermin; + if ( sliderlen > maxlen ) + sliderlen = maxlen; + } else + sliderlen = maxlen; + + // Subcontrols + switch (sc) + { + case SC_ScrollBarSubLine: { + // top/left button + if (platinumScrollBar) { + if (horizontal) + ret.setRect(sb->width() - 2 * sbextent, 0, sbextent, sbextent); + else + ret.setRect(0, sb->height() - 2 * sbextent, sbextent, sbextent); + } else + ret.setRect(0, 0, sbextent, sbextent); + break; + } + + case SC_ScrollBarAddLine: { + // bottom/right button + if (nextScrollBar) { + if (horizontal) + ret.setRect(sbextent, 0, sbextent, sbextent); + else + ret.setRect(0, sbextent, sbextent, sbextent); + } else { + if (horizontal) + ret.setRect(sb->width() - sbextent, 0, sbextent, sbextent); + else + ret.setRect(0, sb->height() - sbextent, sbextent, sbextent); + } + break; + } + + case SC_ScrollBarSubPage: { + // between top/left button and slider + if (platinumScrollBar) { + if (horizontal) + ret.setRect(0, 0, sliderstart, sbextent); + else + ret.setRect(0, 0, sbextent, sliderstart); + } else if (nextScrollBar) { + if (horizontal) + ret.setRect(sbextent*2, 0, sliderstart-2*sbextent, sbextent); + else + ret.setRect(0, sbextent*2, sbextent, sliderstart-2*sbextent); + } else { + if (horizontal) + ret.setRect(sbextent, 0, sliderstart - sbextent, sbextent); + else + ret.setRect(0, sbextent, sbextent, sliderstart - sbextent); + } + break; + } + + case SC_ScrollBarAddPage: { + // between bottom/right button and slider + int fudge; + + if (platinumScrollBar) + fudge = 0; + else if (nextScrollBar) + fudge = 2*sbextent; + else + fudge = sbextent; + + if (horizontal) + ret.setRect(sliderstart + sliderlen, 0, + maxlen - sliderstart - sliderlen + fudge, sbextent); + else + ret.setRect(0, sliderstart + sliderlen, sbextent, + maxlen - sliderstart - sliderlen + fudge); + break; + } + + case SC_ScrollBarGroove: { + int multi = threeButtonScrollBar ? 3 : 2; + int fudge; + + if (platinumScrollBar) + fudge = 0; + else if (nextScrollBar) + fudge = 2*sbextent; + else + fudge = sbextent; + + if (horizontal) + ret.setRect(fudge, 0, sb->width() - sbextent * multi, sb->height()); + else + ret.setRect(0, fudge, sb->width(), sb->height() - sbextent * multi); + break; + } + + case SC_ScrollBarSlider: { + if (horizontal) + ret.setRect(sliderstart, 0, sliderlen, sbextent); + else + ret.setRect(0, sliderstart, sbextent, sliderlen); + break; + } + + default: + ret = QCommonStyle::querySubControlMetrics(control, widget, sc, opt); + break; + } + } else + ret = QCommonStyle::querySubControlMetrics(control, widget, sc, opt); + + return ret; +} + +static const char * const kstyle_close_xpm[] = { +"12 12 2 1", +"# c #000000", +". c None", +"............", +"............", +"..##....##..", +"...##..##...", +"....####....", +".....##.....", +"....####....", +"...##..##...", +"..##....##..", +"............", +"............", +"............"}; + +static const char * const kstyle_maximize_xpm[]={ +"12 12 2 1", +"# c #000000", +". c None", +"............", +"............", +".##########.", +".##########.", +".#........#.", +".#........#.", +".#........#.", +".#........#.", +".#........#.", +".#........#.", +".##########.", +"............"}; + + +static const char * const kstyle_minimize_xpm[] = { +"12 12 2 1", +"# c #000000", +". c None", +"............", +"............", +"............", +"............", +"............", +"............", +"............", +"...######...", +"...######...", +"............", +"............", +"............"}; + +static const char * const kstyle_normalizeup_xpm[] = { +"12 12 2 1", +"# c #000000", +". c None", +"............", +"...#######..", +"...#######..", +"...#.....#..", +".#######.#..", +".#######.#..", +".#.....#.#..", +".#.....###..", +".#.....#....", +".#.....#....", +".#######....", +"............"}; + + +static const char * const kstyle_shade_xpm[] = { +"12 12 2 1", +"# c #000000", +". c None", +"............", +"............", +"............", +"............", +"............", +".....#......", +"....###.....", +"...#####....", +"..#######...", +"............", +"............", +"............"}; + +static const char * const kstyle_unshade_xpm[] = { +"12 12 2 1", +"# c #000000", +". c None", +"............", +"............", +"............", +"............", +"..#######...", +"...#####....", +"....###.....", +".....#......", +"............", +"............", +"............", +"............"}; + +static const char * const dock_window_close_xpm[] = { +"8 8 2 1", +"# c #000000", +". c None", +"##....##", +".##..##.", +"..####..", +"...##...", +"..####..", +".##..##.", +"##....##", +"........"}; + +// Message box icons, from page 210 of the Windows style guide. + +// Hand-drawn to resemble Microsoft's icons, but in the Mac/Netscape +// palette. The "question mark" icon, which Microsoft recommends not +// using but a lot of people still use, is left out. + +/* XPM */ +static const char * const information_xpm[]={ +"32 32 5 1", +". c None", +"c c #000000", +"* c #999999", +"a c #ffffff", +"b c #0000ff", +"...........********.............", +"........***aaaaaaaa***..........", +"......**aaaaaaaaaaaaaa**........", +".....*aaaaaaaaaaaaaaaaaa*.......", +"....*aaaaaaaabbbbaaaaaaaac......", +"...*aaaaaaaabbbbbbaaaaaaaac.....", +"..*aaaaaaaaabbbbbbaaaaaaaaac....", +".*aaaaaaaaaaabbbbaaaaaaaaaaac...", +".*aaaaaaaaaaaaaaaaaaaaaaaaaac*..", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaaac*.", +"*aaaaaaaaaabbbbbbbaaaaaaaaaaac*.", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +".*aaaaaaaaaaabbbbbaaaaaaaaaac***", +".*aaaaaaaaaaabbbbbaaaaaaaaaac***", +"..*aaaaaaaaaabbbbbaaaaaaaaac***.", +"...caaaaaaabbbbbbbbbaaaaaac****.", +"....caaaaaaaaaaaaaaaaaaaac****..", +".....caaaaaaaaaaaaaaaaaac****...", +"......ccaaaaaaaaaaaaaacc****....", +".......*cccaaaaaaaaccc*****.....", +"........***cccaaaac*******......", +"..........****caaac*****........", +".............*caaac**...........", +"...............caac**...........", +"................cac**...........", +".................cc**...........", +"..................***...........", +"...................**..........."}; +/* XPM */ +static const char* const warning_xpm[]={ +"32 32 4 1", +". c None", +"a c #ffff00", +"* c #000000", +"b c #999999", +".............***................", +"............*aaa*...............", +"...........*aaaaa*b.............", +"...........*aaaaa*bb............", +"..........*aaaaaaa*bb...........", +"..........*aaaaaaa*bb...........", +".........*aaaaaaaaa*bb..........", +".........*aaaaaaaaa*bb..........", +"........*aaaaaaaaaaa*bb.........", +"........*aaaa***aaaa*bb.........", +".......*aaaa*****aaaa*bb........", +".......*aaaa*****aaaa*bb........", +"......*aaaaa*****aaaaa*bb.......", +"......*aaaaa*****aaaaa*bb.......", +".....*aaaaaa*****aaaaaa*bb......", +".....*aaaaaa*****aaaaaa*bb......", +"....*aaaaaaaa***aaaaaaaa*bb.....", +"....*aaaaaaaa***aaaaaaaa*bb.....", +"...*aaaaaaaaa***aaaaaaaaa*bb....", +"...*aaaaaaaaaa*aaaaaaaaaa*bb....", +"..*aaaaaaaaaaa*aaaaaaaaaaa*bb...", +"..*aaaaaaaaaaaaaaaaaaaaaaa*bb...", +".*aaaaaaaaaaaa**aaaaaaaaaaa*bb..", +".*aaaaaaaaaaa****aaaaaaaaaa*bb..", +"*aaaaaaaaaaaa****aaaaaaaaaaa*bb.", +"*aaaaaaaaaaaaa**aaaaaaaaaaaa*bb.", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", +".*aaaaaaaaaaaaaaaaaaaaaaaaa*bbbb", +"..*************************bbbbb", +"....bbbbbbbbbbbbbbbbbbbbbbbbbbb.", +".....bbbbbbbbbbbbbbbbbbbbbbbbb.."}; +/* XPM */ +static const char* const critical_xpm[]={ +"32 32 4 1", +". c None", +"a c #999999", +"* c #ff0000", +"b c #ffffff", +"...........********.............", +".........************...........", +".......****************.........", +"......******************........", +".....********************a......", +"....**********************a.....", +"...************************a....", +"..*******b**********b*******a...", +"..******bbb********bbb******a...", +".******bbbbb******bbbbb******a..", +".*******bbbbb****bbbbb*******a..", +"*********bbbbb**bbbbb*********a.", +"**********bbbbbbbbbb**********a.", +"***********bbbbbbbb***********aa", +"************bbbbbb************aa", +"************bbbbbb************aa", +"***********bbbbbbbb***********aa", +"**********bbbbbbbbbb**********aa", +"*********bbbbb**bbbbb*********aa", +".*******bbbbb****bbbbb*******aa.", +".******bbbbb******bbbbb******aa.", +"..******bbb********bbb******aaa.", +"..*******b**********b*******aa..", +"...************************aaa..", +"....**********************aaa...", +"....a********************aaa....", +".....a******************aaa.....", +"......a****************aaa......", +".......aa************aaaa.......", +".........aa********aaaaa........", +"...........aaaaaaaaaaa..........", +".............aaaaaaa............"}; + +QPixmap QtCKStyle::stylePixmap( StylePixmap stylepixmap, + const QWidget* widget, + const QStyleOption& opt) const +{ + switch (stylepixmap) { + case SP_TitleBarShadeButton: + return QPixmap(const_cast(kstyle_shade_xpm)); + case SP_TitleBarUnshadeButton: + return QPixmap(const_cast(kstyle_unshade_xpm)); + case SP_TitleBarNormalButton: + return QPixmap(const_cast(kstyle_normalizeup_xpm)); + case SP_TitleBarMinButton: + return QPixmap(const_cast(kstyle_minimize_xpm)); + case SP_TitleBarMaxButton: + return QPixmap(const_cast(kstyle_maximize_xpm)); + case SP_TitleBarCloseButton: + return QPixmap(const_cast(kstyle_close_xpm)); + case SP_DockWindowCloseButton: + return QPixmap(const_cast(dock_window_close_xpm )); + case SP_MessageBoxInformation: + return QPixmap(const_cast(information_xpm)); + case SP_MessageBoxWarning: + return QPixmap(const_cast(warning_xpm)); + case SP_MessageBoxCritical: + return QPixmap(const_cast(critical_xpm)); + default: + break; + } + return QCommonStyle::stylePixmap(stylepixmap, widget, opt); +} + + +int QtCKStyle::styleHint( StyleHint sh, const QWidget* w, + const QStyleOption &opt, QStyleHintReturn* shr) const +{ + switch (sh) + { + case SH_EtchDisabledText: + return d->etchDisabledText ? 1 : 0; + + case SH_PopupMenu_Scrollable: + return d->scrollablePopupmenus ? 1 : 0; + + case SH_MenuBar_AltKeyNavigation: + return d->menuAltKeyNavigation ? 1 : 0; + + case SH_PopupMenu_SubMenuPopupDelay: + if ( styleHint( SH_PopupMenu_SloppySubMenus, w ) ) + return QMIN( 100, d->popupMenuDelay ); + else + return d->popupMenuDelay; + + case SH_PopupMenu_SloppySubMenus: + return d->sloppySubMenus; + + case SH_ItemView_ChangeHighlightOnFocus: + case SH_Slider_SloppyKeyEvents: + case SH_MainWindow_SpaceBelowMenuBar: + case SH_PopupMenu_AllowActiveAndDisabled: + return 0; + + case SH_Slider_SnapToValue: + case SH_PrintDialog_RightAlignButtons: + case SH_FontDialog_SelectAssociatedText: + case SH_MenuBar_MouseTracking: + case SH_PopupMenu_MouseTracking: + case SH_ComboBox_ListMouseTracking: + case SH_ScrollBar_MiddleClickAbsolutePosition: + return 1; + case SH_LineEdit_PasswordCharacter: + { + if (w) { + const QFontMetrics &fm = w->fontMetrics(); + if (fm.inFont(QChar(0x25CF))) { + return 0x25CF; + } else if (fm.inFont(QChar(0x2022))) { + return 0x2022; + } + } + return '*'; + } + + default: + return QCommonStyle::styleHint(sh, w, opt, shr); + } +} + + +bool QtCKStyle::eventFilter( QObject* object, QEvent* event ) +{ + if ( d->useFilledFrameWorkaround ) + { + // Make the QMenuBar/QToolBar paintEvent() cover a larger area to + // ensure that the filled frame contents are properly painted. + // We essentially modify the paintEvent's rect to include the + // panel border, which also paints the widget's interior. + // This is nasty, but I see no other way to properly repaint + // filled frames in all QMenuBars and QToolBars. + // -- Karol. + QFrame *frame = 0; + if ( event->type() == QEvent::Paint + && (frame = ::qt_cast(object)) ) + { + if (frame->frameShape() != QFrame::ToolBarPanel && frame->frameShape() != QFrame::MenuBarPanel) + return false; + + bool horizontal = true; + QPaintEvent* pe = (QPaintEvent*)event; + QToolBar *toolbar = ::qt_cast< QToolBar *>( frame ); + QRect r = pe->rect(); + + if (toolbar && toolbar->orientation() == Qt::Vertical) + horizontal = false; + + if (horizontal) { + if ( r.height() == frame->height() ) + return false; // Let QFrame handle the painting now. + + // Else, send a new paint event with an updated paint rect. + QPaintEvent dummyPE( QRect( r.x(), 0, r.width(), frame->height()) ); + QApplication::sendEvent( frame, &dummyPE ); + } + else { // Vertical + if ( r.width() == frame->width() ) + return false; + + QPaintEvent dummyPE( QRect( 0, r.y(), frame->width(), r.height()) ); + QApplication::sendEvent( frame, &dummyPE ); + } + + // Discard this event as we sent a new paintEvent. + return true; + } + } + + return false; +} + +void QtCKStyle::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +// vim: set noet ts=4 sw=4: +// kate: indent-width 4; replace-tabs off; tab-width 4; space-indent off; + +#include "qtc_kstyle.moc" diff --git a/style/qtc_kstyle.h b/style/qtc_kstyle.h new file mode 100644 index 0000000..9c8b059 --- /dev/null +++ b/style/qtc_kstyle.h @@ -0,0 +1,324 @@ +/* + * $Id$ + * + * KStyle + * Copyright (C) 2001-2002 Karol Szwed + * + * QWindowsStyle CC_ListView and style images were kindly donated by TrollTech, + * Copyright (C) 1998-2000 TrollTech AS. + * + * Many thanks to Bradley T. Hughes for the 3 button scrollbar code. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __QTC_KSTYLE_H +#define __QTC_KSTYLE_H + +// W A R N I N G +// ------------- +// This API is still subject to change. +// I will remove this warning when I feel the API is sufficiently flexible. + +#include + +struct QtCKStylePrivate; +/** + * Simplifies and extends the QStyle API to make style coding easier. + * + * The KStyle class provides a simple internal menu transparency engine + * which attempts to use XRender for accelerated blending where requested, + * or falls back to fast internal software tinting/blending routines. + * It also simplifies more complex portions of the QStyle API, such as + * the PopupMenuItems, ScrollBars and Sliders by providing extra "primitive + * elements" which are simple to implement by the style writer. + * + * @see QStyle::QStyle + * @see QCommonStyle::QCommonStyle + * @author Karol Szwed (gallium@kde.org) + * @version $Id$ + */ +class QtCKStyle: public QCommonStyle +{ + Q_OBJECT + + public: + + /** + * QtCKStyle Flags: + * + * @li Default - Default style setting, where menu transparency + * and the FilledFrameWorkaround are disabled. + * + * @li AllowMenuTransparency - Enable this flag to use QtCKStyle's + * internal menu transparency engine. + * + * @li FilledFrameWorkaround - Enable this flag to facilitate + * proper repaints of QMenuBars and QToolBars when the style chooses + * to paint the interior of a QFrame. The style primitives in question + * are PE_PanelMenuBar and PE_PanelDockWindow. The HighColor style uses + * this workaround to enable painting of gradients in menubars and + * toolbars. + */ + typedef uint KStyleFlags; + enum KStyleOption { + Default = 0x00000000, //!< All options disabled + AllowMenuTransparency = 0x00000001, //!< Internal transparency enabled + FilledFrameWorkaround = 0x00000002 //!< Filled frames enabled + }; + + /** + * KStyle ScrollBarType: + * + * Allows the style writer to easily select what type of scrollbar + * should be used without having to duplicate large amounts of source + * code by implementing the complex control CC_ScrollBar. + * + * @li WindowsStyleScrollBar - Two button scrollbar with the previous + * button at the top/left, and the next button at the bottom/right. + * + * @li PlatinumStyleScrollBar - Two button scrollbar with both the + * previous and next buttons at the bottom/right. + * + * @li ThreeButtonScrollBar - %KDE style three button scrollbar with + * two previous buttons, and one next button. The next button is always + * at the bottom/right, whilst the two previous buttons are on either + * end of the scrollbar. + * + * @li NextStyleScrollBar - Similar to the PlatinumStyle scroll bar, but + * with the buttons grouped on the opposite end of the scrollbar. + * + * @see KStyle::KStyle() + */ + enum KStyleScrollBarType { + WindowsStyleScrollBar = 0x00000000, //!< two button, windows style + PlatinumStyleScrollBar = 0x00000001, //!< two button, platinum style + ThreeButtonScrollBar = 0x00000002, //!< three buttons, %KDE style + NextStyleScrollBar = 0x00000004 //!< two button, NeXT style + }; + + /** + * Constructs a KStyle object. + * + * Select the appropriate KStyle flags and scrollbar type + * for your style. The user's style preferences selected in KControl + * are read by using QSettings and are automatically applied to the style. + * As a fallback, KStyle paints progressbars and tabbars. It inherits from + * QCommonStyle for speed, so don't expect much to be implemented. + * + * It is advisable to use a currently implemented style such as the HighColor + * style as a foundation for any new KStyle, so the limited number of + * drawing fallbacks should not prove problematic. + * + * @param flags the style to be applied + * @param sbtype the scroll bar type + * @see KStyle::KStyleFlags + * @see KStyle::KStyleScrollBarType + * @author Karol Szwed (gallium@kde.org) + */ + QtCKStyle( KStyleFlags flags = QtCKStyle::Default, + KStyleScrollBarType sbtype = QtCKStyle::WindowsStyleScrollBar ); + + /** + * Destructs the QtCKStyle object. + */ + ~QtCKStyle(); + + /** + * Returns the default widget style depending on color depth. + */ + static QString defaultStyle(); + + /** + * Modifies the scrollbar type used by the style. + * + * This function is only provided for convenience. It allows + * you to make a late decision about what scrollbar type to use for the + * style after performing some processing in your style's constructor. + * In most situations however, setting the scrollbar type via the QtCKStyle + * constructor should suffice. + * @param sbtype the scroll bar type + * @see QtCKStyle::KStyleScrollBarType + */ + void setScrollBarType(KStyleScrollBarType sbtype); + + /** + * Returns the KStyle flags used to initialize the style. + * + * This is used solely for the kcmstyle module, and hence is internal. + */ + KStyleFlags styleFlags() const; + + /** + * KStyle Primitive Elements: + * + * The KStyle class extends the Qt's Style API by providing certain + * simplifications for parts of QStyle. To do this, the KStylePrimitive + * elements were defined, which are very similar to Qt's PrimitiveElement. + * + * The first three Handle primitives simplify and extend PE_DockWindowHandle, + * so do not reimplement PE_DockWindowHandle if you want the KStyle handle + * simplifications to be operable. Similarly do not reimplement CC_Slider, + * SC_SliderGroove and SC_SliderHandle when using the KStyle slider + * primitives. KStyle automatically double-buffers slider painting + * when they are drawn via these KStyle primitives to avoid flicker. + * + * @li KPE_DockWindowHandle - This primitive is already implemented in KStyle, + * and paints a bevelled rect with the DockWindow caption text. Re-implement + * this primitive to perform other more fancy effects when drawing the dock window + * handle. + * + * @li KPE_ToolBarHandle - This primitive must be reimplemented. It currently + * only paints a filled rectangle as default behavior. This primitive is used + * to render QToolBar handles. + * + * @li KPE_GeneralHandle - This primitive must be reimplemented. It is used + * to render general handles that are not part of a QToolBar or QDockWindow, such + * as the applet handles used in Kicker. The default implementation paints a filled + * rect of arbitrary color. + * + * @li KPE_SliderGroove - This primitive must be reimplemented. It is used to + * paint the slider groove. The default implementation paints a filled rect of + * arbitrary color. + * + * @li KPE_SliderHandle - This primitive must be reimplemented. It is used to + * paint the slider handle. The default implementation paints a filled rect of + * arbitrary color. + * + * @li KPE_ListViewExpander - This primitive is already implemented in KStyle. It + * is used to draw the Expand/Collapse element in QListViews. To indicate the + * expanded state, the style flags are set to Style_Off, while Style_On implies collapsed. + * + * @li KPE_ListViewBranch - This primitive is already implemented in KStyle. It is + * used to draw the ListView branches where necessary. + */ + enum KStylePrimitive { + KPE_DockWindowHandle, + KPE_ToolBarHandle, + KPE_GeneralHandle, + + KPE_SliderGroove, + KPE_SliderHandle, + + KPE_ListViewExpander, + KPE_ListViewBranch + }; + + /** + * This function is identical to Qt's QStyle::drawPrimitive(), except that + * it adds one further parameter, 'widget', that can be used to determine + * the widget state of the KStylePrimitive in question. + * + * @see KStyle::KStylePrimitive + * @see QStyle::drawPrimitive + * @see QStyle::drawComplexControl + */ + virtual void drawKStylePrimitive( KStylePrimitive kpe, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + + enum KStylePixelMetric { + KPM_MenuItemSeparatorHeight = 0x00000001, + KPM_MenuItemHMargin = 0x00000002, + KPM_MenuItemVMargin = 0x00000004, + KPM_MenuItemHFrame = 0x00000008, + KPM_MenuItemVFrame = 0x00000010, + KPM_MenuItemCheckMarkHMargin = 0x00000020, + KPM_MenuItemArrowHMargin = 0x00000040, + KPM_MenuItemTabSpacing = 0x00000080, + KPM_ListViewBranchThickness = 0x00000100 + }; + + int kPixelMetric( KStylePixelMetric kpm, const QWidget* widget = 0 ) const; + + // --------------------------------------------------------------------------- + + void polish( QWidget* widget ); + void unPolish( QWidget* widget ); + void polishPopupMenu( QPopupMenu* ); + + void drawPrimitive( PrimitiveElement pe, + QPainter* p, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawControl( ControlElement element, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawComplexControl( ComplexControl control, + QPainter *p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + SCFlags controls = SC_All, + SCFlags active = SC_None, + const QStyleOption& = QStyleOption::Default ) const; + + SubControl querySubControl( ComplexControl control, + const QWidget* widget, + const QPoint &pos, + const QStyleOption& = QStyleOption::Default ) const; + + QRect querySubControlMetrics( ComplexControl control, + const QWidget* widget, + SubControl sc, + const QStyleOption& = QStyleOption::Default ) const; + + int pixelMetric( PixelMetric m, + const QWidget* widget = 0 ) const; + + QRect subRect( SubRect r, + const QWidget* widget ) const; + + QPixmap stylePixmap( StylePixmap stylepixmap, + const QWidget* widget = 0, + const QStyleOption& = QStyleOption::Default ) const; + + int styleHint( StyleHint sh, + const QWidget* w = 0, + const QStyleOption &opt = QStyleOption::Default, + QStyleHintReturn* shr = 0 ) const; + + protected: + bool eventFilter( QObject* object, QEvent* event ); + + private: + // Disable copy constructor and = operator + QtCKStyle( const QtCKStyle & ); + QtCKStyle& operator=( const QtCKStyle & ); + + protected: + virtual void virtual_hook( int id, void* data ); + private: + QtCKStylePrivate *d; +}; + + +// vim: set noet ts=4 sw=4: +#endif + diff --git a/style/qtcurve.cpp b/style/qtcurve.cpp index de2cc1f..f5dbdbc 100644 --- a/style/qtcurve.cpp +++ b/style/qtcurve.cpp @@ -1,5 +1,5 @@ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -54,13 +54,17 @@ Srollbars: For some reason Scrollbars in KHTML seem to lose the bottom/left pixels. As if KHTML expects the scrollbar to be 1 pixel smaller/thinner than it actually is. To 'fix' this, the pixelMetric -function will return 1 scrollbar with 1 greater than standard for form widgets, or where widget==NULL +function will return 1 scrollbar with 1 greater than standard for form widgets, or where widget==0L In the CC_ScrollBar draw code, the rects used for each component are shrunk by 1, in the appropriate dimension, so as to draw the scrollbar at the correct size. */ +#include +#include "config.h" +#ifndef QTC_QT_ONLY #include +#endif #include #include #include @@ -95,11 +99,15 @@ dimension, so as to draw the scrollbar at the correct size. #include #include #include +#include +#include +#include #include #include #include #include -#define QTC_COMMON_FUNCTIONS +#include +#define COMMON_FUNCTIONS #include "qtcurve.h" #define CONFIG_READ #include "config_file.c" @@ -109,9 +117,134 @@ dimension, so as to draw the scrollbar at the correct size. #include #include #include +// Need access to classname from within QMetaObject... +#define private public +#include #include #include -#include +#include "qtc_fixx11h.h" + +static const Atom constNetMoveResize = XInternAtom(qt_xdisplay(), "_NET_WM_MOVERESIZE", False); +static const QWidget * getTopLevel(const QWidget *widget) +{ + const QWidget *w=widget; + + while(w && !w->isTopLevel()) + w=w->parentWidget(); + return w; +} + +static void emitMenuSize(const QWidget *widget, unsigned short size) +{ + const QWidget *w=getTopLevel(widget); + + if(w) + { + static const Atom constAtom = XInternAtom(qt_xdisplay(), MENU_SIZE_ATOM, False); + XChangeProperty(qt_xdisplay(), w->parentWidget() ? w->parentWidget()->winId() : w->winId(), + constAtom, XA_CARDINAL, 16, PropModeReplace, (unsigned char *)&size, 1); + } +} + +void setBgndProp(QWidget *widget, unsigned short app) +{ + const QWidget *w=getTopLevel(widget); + + if(w) + { + static const Atom constAtom = XInternAtom(qt_xdisplay(), BGND_ATOM, False); + XChangeProperty(qt_xdisplay(), w->parentWidget() ? w->parentWidget()->winId() : w->winId(), + constAtom, XA_CARDINAL, 16, PropModeReplace, (unsigned char *)&app, 1); + } +} + +static void triggerWMMove(const QWidget *w, const QPoint &p) +{ + //...Taken from bespin... + // stolen... errr "adapted!" from QSizeGrip + XEvent xev; + xev.xclient.type = ClientMessage; + xev.xclient.message_type = constNetMoveResize; + xev.xclient.display = qt_xdisplay(); + xev.xclient.window = w->parentWidget() ? w->parentWidget()->winId() : w->winId(); + xev.xclient.format = 32; + xev.xclient.data.l[0] = p.x(); + xev.xclient.data.l[1] = p.y(); + xev.xclient.data.l[2] = 8; // NET::Move + xev.xclient.data.l[3] = Button1; + xev.xclient.data.l[4] = 0; + XUngrabPointer(qt_xdisplay(), CurrentTime); + XSendEvent(qt_xdisplay(), qt_xrootwin(), False, + SubstructureRedirectMask | SubstructureNotifyMask, &xev); +} + +#define MO_ARROW_X(FLAGS, COL) (MO_NONE!=opts.coloredMouseOver && FLAGS&Style_MouseOver && FLAGS&Style_Enabled ? itsMouseOverCols[ARROW_MO_SHADE] : COL) +#define MO_ARROW(COL) MO_ARROW_X(flags, COL) + +static const int constMenuPixmapWidth=22; + +static bool useQt3Settings() +{ + static int ver=0; + + if(0==ver) + { + const char *sessionVersion=getenv("KDE_SESSION_VERSION"); + + ver=sessionVersion + ? atoi(sessionVersion)<4 + ? 3 + : 4 +#ifdef QTC_DEFAULT_TO_KDE3 + : 3; +#else + : getenv("KDE_FULL_SESSION") + ? 3 + : 4; +#endif + } + + return 3==ver; +} + +static QRect adjusted(const QRect r, int xp1, int yp1, int xp2, int yp2) +{ + int x1, y1, x2, y2; + + r.coords(&x1, &y1, &x2, &y2); + return QRect(QPoint(x1 + xp1, y1 + yp1), QPoint(x2 + xp2, y2 + yp2)); +} + +static void adjust(QRect &r, int dx1, int dy1, int dx2, int dy2) +{ + int x1, y1, x2, y2; + + r.coords(&x1, &y1, &x2, &y2); + x1 += dx1; + y1 += dy1; + x2 += dx2; + y2 += dy2; + r.setCoords(x1, y1, x2, y2); +} + +inline bool isSpecialHover(QWidget *w) +{ + return w && ( +#if QT_VERSION >= 0x030200 + ::qt_cast(w) || + ::qt_cast(w) || +#endif + ::qt_cast(w) || +#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 + ::qt_cast(w) || + +#endif + ::qt_cast(w) || + ::qt_cast(w) || + ::qt_cast(w) || + ::qt_cast(w) + ); +} static QString readEnvPath(const char *env) { @@ -120,41 +253,90 @@ static QString readEnvPath(const char *env) return path.isEmpty() ? QString::null : QFile::decodeName(path); } -static QString kdeHome() +static QString kdeHome(bool kde3=false) { - QString env(readEnvPath(getuid() ? "KDEHOME" : "KDEROOTHOME")); + static QString kdeHome[2]; + + // Execute kde-config to ascertain users KDEHOME + if(kdeHome[kde3 ? 0 : 1].isEmpty()) + { + FILE *fpipe; - return env.isEmpty() - ? QDir::homeDirPath()+"/.kde" - : env; + if (fpipe = (FILE*)popen(kde3 ? "kde-config --localprefix 2> /dev/null" : "kde4-config --localprefix 2> /dev/null", "r")) + { + char line[1024]; + + while(fgets(line, sizeof line, fpipe)) + { + kdeHome[kde3 ? 0 : 1]=QFile::decodeName(line).replace("\n", ""); + break; + } + pclose(fpipe); + } + } + + // Try env vars... + if(kdeHome[kde3 ? 0 : 1].isEmpty()) + { + kdeHome[kde3 ? 0 : 1]=readEnvPath(getuid() ? "KDEHOME" : "KDEROOTHOME"); + if (kdeHome[kde3 ? 0 : 1].isEmpty()) + { + QDir homeDir(QDir::homeDirPath()); + QString kdeConfDir("/.kde"); + if (!kde3 && homeDir.exists(".kde4")) + kdeConfDir = QString("/.kde4"); + kdeHome[kde3 ? 0 : 1] = QDir::homeDirPath() + kdeConfDir; + } + } + return kdeHome[kde3 ? 0 : 1]; } -static void getStyles(const QString &dir, QStringList &styles) +#ifdef QTC_STYLE_SUPPORT +static void getStyles(const QString &dir, const char *sub, QStringList &styles) { - QDir d(dir+QTC_THEME_DIR); + QDir d(dir+sub); - d.setNameFilter(QTC_THEME_PREFIX"*"QTC_THEME_SUFFIX); + if(d.exists()) + { + d.setNameFilter(THEME_PREFIX"*"THEME_SUFFIX); - QStringList entries(d.entryList()); - QStringList::ConstIterator it(entries.begin()), - end(entries.end()); + QStringList entries(d.entryList()); + QStringList::ConstIterator it(entries.begin()), + end(entries.end()); - for(; it!=end; ++it) - { - QString style((*it).left((*it).findRev(QTC_THEME_SUFFIX))); + for(; it!=end; ++it) + { + QString style((*it).left((*it).findRev(THEME_SUFFIX))); - if(!styles.contains(style)) - styles.append(style); + if(!styles.contains(style)) + styles.append(style); + } } } -static QString themeFile(const QString &dir, const QString &n) +static void getStyles(const QString &dir, QStringList &styles) { - QString name(dir+QTC_THEME_DIR+n+QTC_THEME_SUFFIX); + getStyles(dir, THEME_DIR, styles); + getStyles(dir, THEME_DIR4, styles); +} + +static QString themeFile(const QString &dir, const QString &n, const char *sub) +{ + QString name(dir+sub+n+THEME_SUFFIX); return QFile(name).exists() ? name : QString(); } +static QString themeFile(const QString &dir, const QString &n, bool kde3=true) +{ + QString name(themeFile(dir, n, kde3 ? THEME_DIR : THEME_DIR4)); + + if(name.isEmpty()) + name=themeFile(dir, n, kde3 ? THEME_DIR4 : THEME_DIR); + return name; +} +#endif + class QtCurveStylePlugin : public QStylePlugin { public: @@ -166,9 +348,12 @@ class QtCurveStylePlugin : public QStylePlugin QStringList list; list << "QtCurve"; - getStyles(kdeHome(), list); - getStyles(KDE_PREFIX(3), list); - getStyles(KDE_PREFIX(4), list); +#ifdef QTC_STYLE_SUPPORT + getStyles(kdeHome(useQt3Settings()), list); + getStyles(kdeHome(!useQt3Settings()), list); + getStyles(KDE_PREFIX(useQt3Settings() ? 3 : 4), list); + getStyles(KDE_PREFIX(useQt3Settings() ? 4 : 3), list); +#endif return list; } @@ -177,36 +362,42 @@ class QtCurveStylePlugin : public QStylePlugin { return "qtcurve"==s.lower() ? new QtCurveStyle - : 0==s.find(QTC_THEME_PREFIX) +#ifdef QTC_STYLE_SUPPORT + : 0==s.find(THEME_PREFIX) ? new QtCurveStyle(s) +#endif : 0; } }; Q_EXPORT_PLUGIN(QtCurveStylePlugin) -#define QTC_SKIP_TASKBAR (APP_SKIP_TASKBAR==itsThemedApp || APP_KPRINTER==itsThemedApp || APP_KDIALOG==itsThemedApp) +#define SKIP_TASKBAR (APP_SKIP_TASKBAR==itsThemedApp || APP_KPRINTER==itsThemedApp || APP_KDIALOG==itsThemedApp) -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 #include #endif -#define QTC_NO_SECT -1 +#define NO_SECT -1 + +#define VERTICAL_TB_BUTTON 0x01000000 +#define CHECK_BUTTON 0x02000000 +#define STD_TOOLBUTTON 0x04000000 +#define TOGGLE_BUTTON 0x08000000 +#define NO_ETCH_BUTTON 0x10000000 +#define DW_CLOSE_BUTTON 0x80000000 +#define LISTVIEW_ITEM 0x20000000 +#define MENU_ITEM 0x40000000 +#define WINDOWTITLE_SPACER 0x10000000 -#define QTC_VERTICAL_TB_BUTTON 0x01000000 -#define QTC_CHECK_BUTTON 0x02000000 -#define QTC_STD_TOOLBUTTON 0x04000000 -#define QTC_TOGGLE_BUTTON 0x08000000 -#define QTC_NO_ETCH_BUTTON 0x10000000 -#define QTC_LISTVIEW_ITEM 0x20000000 -#define QTC_MENU_ITEM 0x40000000 +#define DW_BGND 105 -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 // Try to read $KDEHOME/share/config/kickerrc to find out if kicker is transparent... static bool kickerIsTrans() { - QString cfgFileName(kdeHome()+"/share/config/kickerrc"); + QString cfgFileName(kdeHome(true)+"/share/config/kickerrc"); bool trans(false); QFile cfgFile(cfgFileName); @@ -223,16 +414,16 @@ static bool kickerIsTrans() if(inGen) { - if(0==line.find("Transparent=")) // Found it! + if(0==line.find("Transparent=", false)) // Found it! { - if(-1!=line.find("true")) + if(-1!=line.find("true", false)) trans=true; stop=true; } else if(line[0]==QChar('[')) // Then wasn't in General section... stop=true; } - else if(0==line.find("[General]")) + else if(0==line.find("[General]", false)) inGen=true; } cfgFile.close(); @@ -242,13 +433,6 @@ static bool kickerIsTrans() } #endif -inline QColor midColor(const QColor &a, const QColor &b, double factor=1.0) -{ - return QColor((a.red()+limit(b.red()*factor))>>1, - (a.green()+limit(b.green()*factor))>>1, - (a.blue()+limit(b.blue()*factor))>>1); -} - static bool isKhtmlWidget(const QWidget *w, int level=1) { return w && ((w->name() && 0==strcmp(w->name(), "__khtml")) || @@ -264,7 +448,7 @@ static bool isKhtmlFormWidget(const QWidget *widget) //Form widgets are in the KHTMLView, but that has 2 further inner levels //of widgets - QClipperWidget, and outside of that, QViewportWidget - QWidget *potentialClipPort(widget ? widget->parentWidget() : NULL); + QWidget *potentialClipPort(widget ? widget->parentWidget() : 0L); if (!potentialClipPort || potentialClipPort->isTopLevel()) return false; @@ -284,20 +468,118 @@ static bool isKhtmlFormWidget(const QWidget *widget) return true; } -QColor shade(const QColor &a, float k) +static bool inStackWidget(const QWidget *w) { - QColor mod; + while(w) + { + if(::qt_cast(w)) + return true; + w=w->parentWidget(); + } + + return false; +} - shade(a, &mod, k); - return mod; +static void setRgb(QColor *col, const QStringList &rgb) +{ + if(3==rgb.size()) + *col=QColor(rgb[0].toInt(), rgb[1].toInt(), rgb[2].toInt()); +} + +struct KDESettings +{ + KDESettings() + { + inactiveHighlight=false; + } + + bool inactiveHighlight; + QColor hover, + focus; +}; + +static KDESettings kdeSettings; +static bool readKdeGlobals() +{ + static int lastCheck=0; + + int now=time(0L); + + // Dont keep on reading kdeglobals file - only read if its been at least 2 seconds since the last time... + if(abs(now-lastCheck)<3) + return false; + + + QColor highlight(QApplication::palette().active().highlight()); + bool inactiveEnabled(false), + changeSelectionColor(false), + useQt3(useQt3Settings()); + QFile f(kdeHome(useQt3)+"/share/config/kdeglobals"); + + lastCheck=now; + + if(useQt3) + kdeSettings.hover=kdeSettings.focus=highlight; + else + { + kdeSettings.hover=QColor(119, 183, 255); + kdeSettings.focus=QColor( 43, 116, 199); + } + + if(f.open(IO_ReadOnly)) + { + QTextStream in(&f); + bool inPal(false), + inInactive(false), + donePal(useQt3), + doneInactive(false); + + while (!in.atEnd() && (!donePal || !doneInactive)) + { + QString line(in.readLine()); + if(inPal) + { + if(0==line.find("DecorationFocus=", false)) + setRgb(&kdeSettings.focus, QStringList::split(",", line.mid(16))); + else if(0==line.find("DecorationHover=", false)) + setRgb(&kdeSettings.hover, QStringList::split(",", line.mid(16))); + else if (-1!=line.find('[')) + { + donePal=true; + inPal=false; + } + } + else if(inInactive) + { + if(0==line.find("ChangeSelectionColor=", false)) + changeSelectionColor=line.find("=true"); + else if(0==line.find("Enable=", false)) + inactiveEnabled=line.find("=true"); + else if (-1!=line.find('[')) + { + doneInactive=true; + inInactive=false; + } + } + if(!inPal && !inInactive) + if(!useQt3 && 0==line.find("[Colors:Button]", false)) + inPal=true; + else if(!useQt3 && 0==line.find("[ColorEffects:Inactive]", false)) + inInactive=true; + } + f.close(); + } + + kdeSettings.inactiveHighlight=changeSelectionColor && inactiveEnabled; + return true; } static void drawLines(QPainter *p, const QRect &r, bool horiz, int nLines, int offset, - const QColor *cols, int startOffset, int dark, int etchedDisp=1, - bool light=true) + const QColor *cols, int startOffset, int dark, ELine type) { - int space((nLines*2)+(etchedDisp || !light ? (nLines-1) : 0)), - step(etchedDisp || !light ? 3 : 2), + int space((nLines*2)+(LINE_DASHES!=type ? (nLines-1) : 0)), + step(LINE_DASHES!=type ? 3 : 2), + etchedDisp(LINE_SUNKEN==type ? 1 : 0), x(horiz ? r.x(): r.x()+((r.width()-space)>>1)), y(horiz ? r.y()+((r.height()-space)>>1): r.y()), x2(r.x()+r.width()-1), @@ -311,13 +593,15 @@ static void drawLines(QPainter *p, const QRect &r, bool horiz, int nLines, int o p->setPen(cols[dark]); for(i=0; idrawLine(x+offset, y+i, x2-(offset+etchedDisp), y+i); + p->drawLine(x+offset, y+i, x2-offset, y+i); - if(light) + if(LINE_FLAT!=type) { + x+=etchedDisp; + x2+=etchedDisp; p->setPen(cols[0]); for(i=1; idrawLine(x+offset+etchedDisp, y+i, x2-offset, y+i); + p->drawLine(x+offset, y+i, x2-offset, y+i); } } else @@ -327,13 +611,15 @@ static void drawLines(QPainter *p, const QRect &r, bool horiz, int nLines, int o p->setPen(cols[dark]); for(i=0; idrawLine(x+i, y+offset, x+i, y2-(offset+etchedDisp)); + p->drawLine(x+i, y+offset, x+i, y2-offset); - if(light) + if(LINE_FLAT!=type) { + y+=etchedDisp; + y2+=etchedDisp; p->setPen(cols[0]); for(i=1; idrawLine(x+i, y+offset+etchedDisp, x+i, y2-offset); + p->drawLine(x+i, y+offset, x+i, y2-offset); } } } @@ -387,38 +673,28 @@ static bool onToolBar(QWidget *widget, int l=0) : false; } -enum ECacheAppearance -{ - CACHE_APPEARANCE_SELECTED=APPEARANCE_BEVELLED+1 -}; +#define PIXMAP_DIMENSION 10 -inline int app2App(EAppearance app, bool sel) +enum ECacheFlags { - return sel ? (int)CACHE_APPEARANCE_SELECTED : (int)app; -} - -#define QTC_PIXMAP_DIMENSION 10 + CACHE_STD, + CACHE_COL_SEL_TAB +}; -static int double2int(double d) { return (int)(d*100); } -static QString createKey(int size, QRgb color, bool horiz, bool increase=false, int app=0, - EWidget w=WIDGET_OTHER, double shadeTop=0.0, double shadeBot=0.0) +static QString createKey(int size, QRgb color, bool horiz, int app, ECacheFlags flags) { QString key; - if(WIDGET_DEF_BUTTON==w && !IS_GLASS(app)) // Glass uses different shading for def button... - w=WIDGET_STD_BUTTON; - - QTextOStream(&key) << size << color << horiz << increase << app << (int)w - << ' ' << double2int(shadeTop) << ' ' << double2int(shadeBot); + QTextOStream(&key) << size << '-' << color << '-' << horiz << '-' << app << '-' << flags; return key; } -static QString createKey(QRgb color) +static QString createKey(QRgb color, char type='p') { QString key; - QTextOStream(&key) << 'p' << color; + QTextOStream(&key) << type << color; return key; } @@ -432,104 +708,39 @@ static QString createKey(QRgb color, EPixmap p) return key; } -static void readPal(QString &line, QPalette::ColorGroup grp, QPalette &pal) +#ifdef SET_MDI_WINDOW_BUTTON_POSITIONS +static void parseWindowLine(const QString &line, QValueList &data) { - QStringList cols(QStringList::split(", ", line.mid(line.find("=#")+1))); - - if(17==cols.count()) - { - QStringList::ConstIterator it(cols.begin()), - end(cols.end()); - QColorGroup group; - - for(int i=0; it!=end, i<16; ++it, ++i) - { - QColor col; - - setRgb(&col, (*it).latin1()); - group.setColor((QColorGroup::ColorRole)i, col); - } + int len(line.length()); - switch(grp) + for(int i=0; i=4; -} - -static bool readQt4(QPalette &pal, QFont &font) -{ - if(useQt4Settings()) - { - QFile file(xdgConfigFolder()+QString("Trolltech.conf")); - - if(file.exists()) - return readQt4(file, pal, font); - } - return false; } +#endif static bool isCheckBoxOfGroupBox(const QObject *w) { @@ -538,108 +749,346 @@ static bool isCheckBoxOfGroupBox(const QObject *w) !qstrcmp(w->name(), "qt_groupbox_checkbox"); } -// -// OO.o 2.x checks to see whether the used theme "inherits" from HighContrastStyle, -// if so it uses the highlightedText color to draw highlighted menubar and popup menu -// items. Otherwise it uses the standard color. So faking this inheritance, solves this -// problem. -HighContrastStyle::HighContrastStyle() - : KStyle(AllowMenuTransparency, WindowsStyleScrollBar) +static void drawArrow(QPainter *p, const QRect &r, const QColor &col, QStyle::PrimitiveElement pe, const Options &opts, bool small=false) { + QPointArray a; + + if(small) + switch(pe) + { + case QStyle::PE_ArrowUp: + a.setPoints(opts.vArrows ? 6 : 3, 2,0, 0,-2, -2,0, -2,1, 0,-1, 2,1); + break; + case QStyle::PE_ArrowDown: + a.setPoints(opts.vArrows ? 6 : 3, 2,0, 0,2, -2,0, -2,-1, 0,1, 2,-1); + break; + case QStyle::PE_ArrowRight: + a.setPoints(opts.vArrows ? 6 : 3, 0,-2, 2,0, 0,2, -1,2, 1,0 -1,-2); + break; + case QStyle::PE_ArrowLeft: + a.setPoints(opts.vArrows ? 6 : 3, 0,-2, -2,0, 0,2, 1,2, -1,0, 1,-2); + break; + default: + return; + } + else // Large arrows... + switch(pe) + { + case QStyle::PE_ArrowUp: + a.setPoints(opts.vArrows ? 8 : 3, 3,1, 0,-2, -3,1, -3,2, -2,2, 0,0, 2,2, 3,2); + break; + case QStyle::PE_ArrowDown: + a.setPoints(opts.vArrows ? 8 : 3, 3,-1, 0,2, -3,-1, -3,-2, -2,-2, 0,0, 2,-2, 3,-2); + break; + case QStyle::PE_ArrowRight: + a.setPoints(opts.vArrows ? 8 : 3, -1,-3, 2,0, -1,3, -2,3, -2,2, 0,0, -2,-2, -2,-3); + break; + case QStyle::PE_ArrowLeft: + a.setPoints(opts.vArrows ? 8 : 3, 1,-3, -2,0, 1,3, 2,3, 2,2, 0,0, 2,-2, 2,-3); + break; + default: + return; + } + + if(a.isNull()) + return; + + p->save(); + a.translate((r.x()+(r.width()>>1)),(r.y()+(r.height()>>1))); + p->setBrush(col); + p->setPen(col); + p->drawPolygon(a); + p->restore(); } +#ifdef QTC_STYLE_SUPPORT QtCurveStyle::QtCurveStyle(const QString &name) - : itsSliderCols(NULL), - itsDefBtnCols(NULL), - itsMouseOverCols(NULL), - itsSidebarButtonsCols(NULL), +#else +QtCurveStyle::QtCurveStyle() +#endif + : BASE_STYLE(AllowMenuTransparency, WindowsStyleScrollBar), + itsSliderCols(0L), + itsDefBtnCols(0L), + itsMouseOverCols(0L), + itsComboBtnCols(0L), + itsCheckRadioSelCols(0L), + itsSortedLvColors(0L), + itsProgressCols(0L), + itsSidebarButtonsCols(0L), + itsActiveMdiColors(0L), + itsMdiColors(0L), itsThemedApp(APP_OTHER), itsPixmapCache(150000, 499), -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 itsIsTransKicker(false), #endif itsHover(HOVER_NONE), itsOldPos(-1, -1), itsFormMode(false), - itsHoverWidget(NULL), - itsHoverSect(QTC_NO_SECT), - itsHoverTab(NULL), - itsMactorPal(NULL), + itsHoverWidget(0L), + itsHoverSect(NO_SECT), + itsHoverTab(0L), + itsMactorPal(0L), itsActive(true), - itsIsSpecialHover(false) + itsIsSpecialHover(false), + itsDragWidget(0L), + itsDragWidgetHadMouseTracking(false) { +#ifdef QTC_STYLE_SUPPORT QString rcFile; + if(!name.isEmpty()) + { + rcFile=themeFile(kdeHome(), name, useQt3Settings()); + + if(rcFile.isEmpty()) + { + rcFile=themeFile(kdeHome(true), name); + if(rcFile.isEmpty()) + { + rcFile=themeFile(KDE_PREFIX(useQt3Settings() ? 3 : 4), name, useQt3Settings()); + if(rcFile.isEmpty()) + rcFile=themeFile(KDE_PREFIX(useQt3Settings() ? 4 : 3), name, !useQt3Settings()); + } + } + } + + readConfig(rcFile, &opts); +#else + readConfig(QString(), &opts); +#endif + + if(FRAME_LINE==opts.groupBox || opts.gbLabel&GB_LBL_BOLD) + opts.groupBox=FRAME_NONE; + + opts.contrast=QSettings().readNumEntry("/Qt/KDE/contrast", DEFAULT_CONTRAST); + if(opts.contrast<0 || opts.contrast>10) + opts.contrast=DEFAULT_CONTRAST; + + itsPixmapCache.setAutoDelete(true); + + shadeColors(QApplication::palette().active().highlight(), itsHighlightCols); + shadeColors(QApplication::palette().active().background(), itsBackgroundCols); + shadeColors(QApplication::palette().active().button(), itsButtonCols); + + setDecorationColors(true); + + switch(opts.shadeSliders) + { + default: + case SHADE_DARKEN: + case SHADE_NONE: + break; + case SHADE_SELECTED: + itsSliderCols=itsHighlightCols; + break; + case SHADE_BLEND_SELECTED: + case SHADE_CUSTOM: + if(!itsSliderCols) + itsSliderCols=new QColor [TOTAL_SHADES+1]; + shadeColors(SHADE_BLEND_SELECTED==opts.shadeSliders + ? midColor(itsHighlightCols[ORIGINAL_SHADE], + itsButtonCols[ORIGINAL_SHADE]) + : opts.customSlidersColor, + itsSliderCols); + } + + switch(opts.defBtnIndicator) + { + case IND_GLOW: + case IND_SELECTED: + itsDefBtnCols=itsHighlightCols; + break; + case IND_TINT: + itsDefBtnCols=new QColor [TOTAL_SHADES+1]; + shadeColors(tint(itsButtonCols[ORIGINAL_SHADE], + itsHighlightCols[ORIGINAL_SHADE], DEF_BNT_TINT), itsDefBtnCols); + break; + default: + break; + case IND_COLORED: + if(SHADE_BLEND_SELECTED==opts.shadeSliders) + itsDefBtnCols=itsSliderCols; + else + { + itsDefBtnCols=new QColor [TOTAL_SHADES+1]; + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], + itsButtonCols[ORIGINAL_SHADE]), itsDefBtnCols); + } + } + + switch(opts.comboBtn) + { + default: + case SHADE_DARKEN: + case SHADE_NONE: + break; + case SHADE_SELECTED: + itsComboBtnCols=itsHighlightCols; + break; + case SHADE_BLEND_SELECTED: + if(opts.shadeSliders==SHADE_BLEND_SELECTED) + { + itsComboBtnCols=itsSliderCols; + break; + } + case SHADE_CUSTOM: + if(opts.shadeSliders==SHADE_CUSTOM && opts.customSlidersColor==opts.customComboBtnColor) + { + itsComboBtnCols=itsSliderCols; + break; + } + if(!itsComboBtnCols) + itsComboBtnCols=new QColor [TOTAL_SHADES+1]; + shadeColors(SHADE_BLEND_SELECTED==opts.comboBtn + ? midColor(itsHighlightCols[ORIGINAL_SHADE], + itsButtonCols[ORIGINAL_SHADE]) + : opts.customComboBtnColor, + itsComboBtnCols); + } - defaultSettings(&opts); - if(!name.isEmpty()) + switch(opts.sortedLv) { - rcFile=themeFile(kdeHome(), name); - - if(rcFile.isEmpty()) - { - rcFile=themeFile(KDE_PREFIX(useQt4Settings() ? 4 : 3), name); - if(rcFile.isEmpty()) - rcFile=themeFile(KDE_PREFIX(useQt4Settings() ? 3 : 4), name); - } + case SHADE_DARKEN: + if(!itsSortedLvColors) + itsSortedLvColors=new QColor [TOTAL_SHADES+1]; + shadeColors(shade(opts.lvButton ? itsButtonCols[ORIGINAL_SHADE] : itsBackgroundCols[ORIGINAL_SHADE], LV_HEADER_DARK_FACTOR), itsSortedLvColors); + break; + default: + case SHADE_NONE: + break; + case SHADE_SELECTED: + itsSortedLvColors=itsHighlightCols; + break; + case SHADE_BLEND_SELECTED: + if(SHADE_BLEND_SELECTED==opts.shadeSliders) + { + itsSortedLvColors=itsSliderCols; + break; + } + else if(SHADE_BLEND_SELECTED==opts.comboBtn) + { + itsSortedLvColors=itsComboBtnCols; + break; + } + case SHADE_CUSTOM: + if(opts.shadeSliders==SHADE_CUSTOM && opts.customSlidersColor==opts.customSortedLvColor) + { + itsSortedLvColors=itsSliderCols; + break; + } + if(opts.comboBtn==SHADE_CUSTOM && opts.customComboBtnColor==opts.customSortedLvColor) + { + itsSortedLvColors=itsComboBtnCols; + break; + } + if(!itsSortedLvColors) + itsSortedLvColors=new QColor [TOTAL_SHADES+1]; + shadeColors(SHADE_BLEND_SELECTED==opts.sortedLv + ? midColor(itsHighlightCols[ORIGINAL_SHADE], + (opts.lvButton ? itsButtonCols[ORIGINAL_SHADE] : itsBackgroundCols[ORIGINAL_SHADE])) + : opts.customSortedLvColor, + itsSortedLvColors); } - readConfig(rcFile, &opts, &opts); - opts.contrast=QSettings().readNumEntry("/Qt/KDE/contrast", 7); - if(opts.contrast<0 || opts.contrast>10) - opts.contrast=7; - itsPixmapCache.setAutoDelete(true); - - if ((SHADE_CUSTOM==opts.shadeMenubars || SHADE_BLEND_SELECTED==opts.shadeMenubars) && - "soffice.bin"==QString(qApp->argv()[0]) && TOO_DARK(SHADE_CUSTOM==opts.shadeMenubars - ? opts.customMenubarsColor - : itsMenuitemCols[ORIGINAL_SHADE])) - opts.shadeMenubars=SHADE_DARKEN; - - shadeColors(QApplication::palette().active().highlight(), itsMenuitemCols); - shadeColors(QApplication::palette().active().background(), itsBackgroundCols); - shadeColors(QApplication::palette().active().button(), itsButtonCols); - if(SHADE_SELECTED==opts.shadeSliders) - itsSliderCols=itsMenuitemCols; - else if(SHADE_NONE!=opts.shadeSliders) + switch(opts.crColor) { - itsSliderCols=new QColor [TOTAL_SHADES+1]; - shadeColors(SHADE_BLEND_SELECTED==opts.shadeSliders - ? midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]) - : opts.customSlidersColor, - itsSliderCols); + default: + case SHADE_NONE: + itsCheckRadioSelCols=itsButtonCols; + break; + case SHADE_DARKEN: + if(!itsCheckRadioSelCols) + itsCheckRadioSelCols=new QColor [TOTAL_SHADES+1]; + shadeColors(shade(itsButtonCols[ORIGINAL_SHADE], LV_HEADER_DARK_FACTOR), itsCheckRadioSelCols); + break; + case SHADE_SELECTED: + itsCheckRadioSelCols=itsHighlightCols; + break; + case SHADE_CUSTOM: + if(SHADE_CUSTOM==opts.shadeSliders && opts.customSlidersColor==opts.customCrBgndColor) + itsCheckRadioSelCols=itsSliderCols; + else if(SHADE_CUSTOM==opts.comboBtn && opts.customComboBtnColor==opts.customCrBgndColor) + itsCheckRadioSelCols=itsComboBtnCols; + else if(SHADE_CUSTOM==opts.sortedLv && opts.customSortedLvColor==opts.customCrBgndColor) + itsCheckRadioSelCols=itsSortedLvColors; + else + { + if(!itsCheckRadioSelCols) + itsCheckRadioSelCols=new QColor [TOTAL_SHADES+1]; + shadeColors(opts.customCrBgndColor, itsCheckRadioSelCols); + } + break; + case SHADE_BLEND_SELECTED: + if(SHADE_BLEND_SELECTED==opts.shadeSliders) + itsCheckRadioSelCols=itsSliderCols; + else if(SHADE_BLEND_SELECTED==opts.comboBtn) + itsCheckRadioSelCols=itsComboBtnCols; + else if(SHADE_BLEND_SELECTED==opts.sortedLv) + itsCheckRadioSelCols=itsSortedLvColors; + else + { + if(!itsCheckRadioSelCols) + itsCheckRadioSelCols=new QColor [TOTAL_SHADES+1]; + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]), itsCheckRadioSelCols); + } } - if(IND_COLORED==opts.defBtnIndicator) - if(SHADE_BLEND_SELECTED==opts.shadeSliders) - itsDefBtnCols=itsSliderCols; - else - { - itsDefBtnCols=new QColor [TOTAL_SHADES+1]; - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]), itsDefBtnCols); - } - - if(opts.coloredMouseOver) - if(itsDefBtnCols) - itsMouseOverCols=itsDefBtnCols; - else - { - itsMouseOverCols=new QColor [TOTAL_SHADES+1]; - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]), itsMouseOverCols); - } + switch(opts.progressColor) + { + case SHADE_NONE: + itsProgressCols=itsBackgroundCols; + break; + default: + // Not set! + break; + case SHADE_CUSTOM: + if(SHADE_CUSTOM==opts.shadeSliders && opts.customSlidersColor==opts.customProgressColor) + itsProgressCols=itsSliderCols; + else if(SHADE_CUSTOM==opts.comboBtn && opts.customComboBtnColor==opts.customProgressColor) + itsProgressCols=itsComboBtnCols; + else if(SHADE_CUSTOM==opts.sortedLv && opts.customSortedLvColor==opts.customProgressColor) + itsProgressCols=itsSortedLvColors; + else if(SHADE_CUSTOM==opts.crColor && opts.customCrBgndColor==opts.customProgressColor) + itsProgressCols=itsCheckRadioSelCols; + else + { + if(!itsProgressCols) + itsProgressCols=new QColor [TOTAL_SHADES+1]; + shadeColors(opts.customProgressColor, itsProgressCols); + } + break; + case SHADE_BLEND_SELECTED: + if(SHADE_BLEND_SELECTED==opts.shadeSliders) + itsProgressCols=itsSliderCols; + else if(SHADE_BLEND_SELECTED==opts.comboBtn) + itsProgressCols=itsComboBtnCols; + else if(SHADE_BLEND_SELECTED==opts.sortedLv) + itsProgressCols=itsSortedLvColors; + else + { + if(!itsProgressCols) + itsProgressCols=new QColor [TOTAL_SHADES+1]; + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsBackgroundCols[ORIGINAL_SHADE]), itsProgressCols); + } + } setMenuColors(QApplication::palette().active()); - if(opts.lighterPopupMenuBgnd) + if(USE_LIGHTER_POPUP_MENU) itsLighterPopupMenuBgndCol=shade(itsBackgroundCols[ORIGINAL_SHADE], - POPUPMENU_LIGHT_FACTOR); + TO_FACTOR(opts.lighterPopupMenuBgnd)); + + if ((SHADE_CUSTOM==opts.shadeMenubars || SHADE_BLEND_SELECTED==opts.shadeMenubars || SHADE_SELECTED==opts.shadeMenubars) && + "soffice.bin"==QString(qApp->argv()[0]) && TOO_DARK(SHADE_CUSTOM==opts.shadeMenubars + ? opts.customMenubarsColor + : itsHighlightCols[ORIGINAL_SHADE])) + opts.shadeMenubars=SHADE_DARKEN; switch(opts.shadeCheckRadio) { default: - itsCheckRadioCol=QApplication::palette().active().text(); + itsCheckRadioCol=opts.crButton ? QApplication::palette().active().buttonText() + : QApplication::palette().active().text(); break; case SHADE_BLEND_SELECTED: case SHADE_SELECTED: @@ -663,12 +1112,28 @@ QtCurveStyle::~QtCurveStyle() if(itsSidebarButtonsCols!=itsSliderCols && itsSidebarButtonsCols!=itsDefBtnCols) delete [] itsSidebarButtonsCols; + if(itsActiveMdiColors && itsActiveMdiColors!=itsHighlightCols) + delete [] itsActiveMdiColors; + if(itsMdiColors && itsMdiColors!=itsBackgroundCols) + delete [] itsMdiColors; if(itsMouseOverCols && itsMouseOverCols!=itsDefBtnCols && itsMouseOverCols!=itsSliderCols) delete [] itsMouseOverCols; - if(itsDefBtnCols && itsDefBtnCols!=itsSliderCols) + if(itsDefBtnCols && itsDefBtnCols!=itsSliderCols && itsDefBtnCols!=itsFocusCols && itsDefBtnCols!=itsHighlightCols) delete [] itsDefBtnCols; - if(itsSliderCols && itsSliderCols!=itsMenuitemCols) + if(itsProgressCols && itsProgressCols!=itsHighlightCols && itsProgressCols!=itsBackgroundCols && + itsProgressCols!=itsSliderCols && itsProgressCols!=itsComboBtnCols && itsProgressCols!=itsCheckRadioSelCols && itsProgressCols!=itsSortedLvColors) + delete [] itsProgressCols; + if(itsCheckRadioSelCols && itsCheckRadioSelCols!=itsDefBtnCols && itsCheckRadioSelCols!=itsSliderCols && + itsCheckRadioSelCols!=itsComboBtnCols && itsCheckRadioSelCols!=itsSortedLvColors && + itsCheckRadioSelCols!=itsButtonCols && itsCheckRadioSelCols!=itsHighlightCols) + delete [] itsCheckRadioSelCols; + if(itsSortedLvColors && itsSortedLvColors!=itsHighlightCols && itsSortedLvColors!=itsSliderCols && + itsSortedLvColors!=itsComboBtnCols) + delete [] itsSortedLvColors; + if(itsComboBtnCols && itsComboBtnCols!=itsHighlightCols && itsComboBtnCols!=itsSliderCols) + delete [] itsComboBtnCols; + if(itsSliderCols && itsSliderCols!=itsHighlightCols) delete [] itsSliderCols; delete itsMactorPal; } @@ -689,10 +1154,13 @@ void QtCurveStyle::polish(QApplication *app) { QString appName(getFile(app->argv()[0])); + if(NULL!=getenv("QTCURVE_DEBUG")) + std::cout << "QtCurve: Application name: \"" << appName.latin1() << "\"\n"; + if ("kicker"==appName || "appletproxy"==appName) { itsThemedApp=APP_KICKER; -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 itsIsTransKicker=kickerIsTrans(); #endif } @@ -700,12 +1168,15 @@ void QtCurveStyle::polish(QApplication *app) itsThemedApp=APP_KONTACT; else if ("konqueror"==appName) itsThemedApp=APP_KONQUEROR; + else if ("kate"==appName) + itsThemedApp=APP_KATE; else if ("kpresenter"==appName) itsThemedApp=APP_KPRESENTER; else if ("soffice.bin"==appName) { itsThemedApp=APP_OPENOFFICE; - opts.framelessGroupBoxes=false; + opts.groupBox=FRAME_PLAIN; + opts.gbLabel=0; } else if ("kdefilepicker"==appName) itsThemedApp=APP_SKIP_TASKBAR; @@ -719,10 +1190,12 @@ void QtCurveStyle::polish(QApplication *app) itsThemedApp=APP_TORA; else if ("opera"==appName) itsThemedApp=APP_OPERA; + else if ("systemsettings"==appName) + itsThemedApp=APP_SYSTEMSETTINGS; else if ("korn"==appName) { itsThemedApp=APP_KORN; -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 itsIsTransKicker=kickerIsTrans(); #endif } @@ -737,12 +1210,31 @@ void QtCurveStyle::polish(QApplication *app) if(APP_OPENOFFICE==itsThemedApp) { + // + // OO.o 2.x checks to see whether the used theme "inherits" from HighContrastStyle, + // if so it uses the highlightedText color to draw highlighted menubar and popup menu + // items. Otherwise it uses the standard color. Changing the metaobject's class name + // works around this... + if(opts.useHighlightForMenu) + { + QMetaObject *meta=(QMetaObject *)metaObject(); + + meta->classname="HighContrastStyle"; + } + if(opts.scrollbarType==SCROLLBAR_NEXT) opts.scrollbarType=SCROLLBAR_KDE; else if(opts.scrollbarType==SCROLLBAR_NONE) opts.scrollbarType=SCROLLBAR_WINDOWS; setSbType(); } + + if(SHADE_NONE!=opts.menuStripe && opts.noMenuStripeApps.contains(appName)) + opts.menuStripe=SHADE_NONE; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + if(opts.fixParentlessDialogs && (opts.noDlgFixApps.contains(appName) || opts.noDlgFixApps.contains("kde"))) + opts.fixParentlessDialogs=false; +#endif } void QtCurveStyle::polish(QPalette &pal) @@ -751,16 +1243,13 @@ void QtCurveStyle::polish(QPalette &pal) pal.active().background()!=itsMactorPal->active().background()) return; - QPalette pal4; - QFont font; QSettings settings; + int contrast(settings.readNumEntry("/Qt/KDE/contrast", DEFAULT_CONTRAST)); + bool newContrast(false); - if(readQt4(pal4, font)) - { - pal=pal4; - QApplication::setFont(font); - } - else if(!opts.inactiveHighlight)// Read in Qt3 palette... Required for the inactive settings... + readKdeGlobals(); + + if(!kdeSettings.inactiveHighlight)// Read in Qt3 palette... Required for the inactive settings... { QStringList active(settings.readListEntry("/Qt/Palette/active")), inactive(settings.readListEntry("/Qt/Palette/inactive")); @@ -775,7 +1264,7 @@ void QtCurveStyle::polish(QPalette &pal) QColor(active[QColorGroup::HighlightedText])==pal.color(QPalette::Active, QColorGroup::HighlightedText)) { QColor h(inactive[QColorGroup::Highlight]), - t(inactive[QColorGroup::HighlightedText]); + t(inactive[QColorGroup::HighlightedText]); if(h!=pal.color(QPalette::Inactive, QColorGroup::Highlight) || t!=QPalette::Inactive, QColorGroup::HighlightedText) { @@ -785,40 +1274,52 @@ void QtCurveStyle::polish(QPalette &pal) } } - if(opts.inactiveHighlight) + if(contrast<0 || contrast>10) + contrast=DEFAULT_CONTRAST; + + if(contrast!=opts.contrast) { - pal.setColor(QPalette::Inactive, QColorGroup::Highlight, - midColor(pal.color(QPalette::Active, QColorGroup::Background), - pal.color(QPalette::Active, QColorGroup::Highlight), INACTIVE_HIGHLIGHT_FACTOR)); - pal.setColor(QPalette::Inactive, QColorGroup::HighlightedText, pal.color(QPalette::Active, QColorGroup::Foreground)); + opts.contrast=contrast; + newContrast=true; } - int c(settings.readNumEntry("/Qt/KDE/contrast", 7)); - bool newContrast(false); - - if(c<0 || c>10) - c=7; - - if(c!=opts.contrast) + if(kdeSettings.inactiveHighlight) { - opts.contrast=c; - newContrast=true; + pal.setColor(QPalette::Inactive, QColorGroup::Highlight, + tint(QApplication::palette().active().background(), + QApplication::palette().active().highlight(), 0.4)); + // KDE4 does not set text colour :-( + //pal.setColor(QPalette::Inactive, QColorGroup::HighlightedText, pal.color(QPalette::Active, QColorGroup::Foreground)); } bool newMenu(newContrast || - itsMenuitemCols[ORIGINAL_SHADE]!=QApplication::palette().active().highlight()), + itsHighlightCols[ORIGINAL_SHADE]!=QApplication::palette().active().highlight()), newGray(newContrast || itsBackgroundCols[ORIGINAL_SHADE]!=QApplication::palette().active().background()), newButton(newContrast || itsButtonCols[ORIGINAL_SHADE]!=QApplication::palette().active().button()), newSlider(itsSliderCols && SHADE_BLEND_SELECTED==opts.shadeSliders && (newContrast || newButton || newMenu)), - newDefBtn(itsDefBtnCols && IND_COLORED==opts.defBtnIndicator && - SHADE_BLEND_SELECTED!=opts.shadeSliders && + newDefBtn(itsDefBtnCols && /*( (IND_COLORED==opts.defBtnIndicator &&*/ + SHADE_BLEND_SELECTED!=opts.shadeSliders/*) ||*/ + /*(IND_TINT==opts.defBtnIndicator) )*/ && + IND_SELECTED!=opts.defBtnIndicator && IND_GLOW!=opts.defBtnIndicator && (newContrast || newButton || newMenu)), - newMouseOver(itsMouseOverCols && itsMouseOverCols!=itsDefBtnCols && - itsMouseOverCols!=itsSliderCols && - (newContrast || newButton || newMenu)); + newComboBtn(itsComboBtnCols && itsHighlightCols!=itsComboBtnCols && itsSliderCols!=itsComboBtnCols && + SHADE_BLEND_SELECTED==opts.comboBtn && + (newContrast || newButton || newMenu)), + newSortedLv(itsSortedLvColors && ( (SHADE_BLEND_SELECTED==opts.sortedLv && itsHighlightCols!=itsSortedLvColors && itsSliderCols!=itsSortedLvColors && + itsComboBtnCols!=itsSortedLvColors) || + SHADE_DARKEN==opts.sortedLv) && + (newContrast || (opts.lvButton ? newButton : newGray))), + newCheckRadioSelCols(itsCheckRadioSelCols && ( (SHADE_BLEND_SELECTED==opts.crColor && itsDefBtnCols!=itsCheckRadioSelCols && + itsSliderCols!=itsCheckRadioSelCols && itsComboBtnCols!=itsCheckRadioSelCols && + itsSortedLvColors!=itsCheckRadioSelCols) || + SHADE_DARKEN==opts.crColor) && + (newContrast || newButton)), + newProgressCols(itsProgressCols && SHADE_BLEND_SELECTED==opts.progressColor && + itsSliderCols!=itsProgressCols && itsComboBtnCols!=itsProgressCols && + itsSortedLvColors!=itsProgressCols && itsCheckRadioSelCols!=itsProgressCols && (newContrast || newButton)); if(newGray) shadeColors(QApplication::palette().active().background(), itsBackgroundCols); @@ -827,72 +1328,60 @@ void QtCurveStyle::polish(QPalette &pal) shadeColors(QApplication::palette().active().button(), itsButtonCols); if(newMenu) - shadeColors(QApplication::palette().active().highlight(), itsMenuitemCols); + shadeColors(QApplication::palette().active().highlight(), itsHighlightCols); + + setDecorationColors(); setMenuColors(QApplication::palette().active()); if(newSlider) - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]), itsSliderCols); + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]), itsSliderCols); - if(newDefBtn) - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]), itsDefBtnCols); + if(newComboBtn) + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]), itsComboBtnCols); + + if(newSortedLv) + if(SHADE_BLEND_SELECTED==opts.sortedLv) + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], + opts.lvButton ? itsButtonCols[ORIGINAL_SHADE] : itsBackgroundCols[ORIGINAL_SHADE]), itsSortedLvColors); + else + shadeColors(shade(opts.lvButton ? itsButtonCols[ORIGINAL_SHADE] : itsBackgroundCols[ORIGINAL_SHADE], LV_HEADER_DARK_FACTOR), itsSortedLvColors); - if(newMouseOver) - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], - itsButtonCols[ORIGINAL_SHADE]), itsMouseOverCols); + if(newDefBtn) + if(IND_TINT==opts.defBtnIndicator) + shadeColors(tint(itsButtonCols[ORIGINAL_SHADE], + itsHighlightCols[ORIGINAL_SHADE], DEF_BNT_TINT), itsDefBtnCols); + else if(IND_GLOW!=opts.defBtnIndicator) + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], + itsButtonCols[ORIGINAL_SHADE]), itsDefBtnCols); if(itsSidebarButtonsCols && SHADE_BLEND_SELECTED!=opts.shadeSliders && IND_COLORED!=opts.defBtnIndicator) - shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]), itsSidebarButtonsCols); - if(opts.lighterPopupMenuBgnd && newGray) + if(USE_LIGHTER_POPUP_MENU && newGray) itsLighterPopupMenuBgndCol=shade(itsBackgroundCols[ORIGINAL_SHADE], - POPUPMENU_LIGHT_FACTOR); - - const QColorGroup &actGroup(pal.active()), - &inactGroup(pal.inactive()), - &disGroup(pal.disabled()); - const QColor *use(backgroundColors(actGroup)); - QColorGroup newAct(actGroup.foreground(), actGroup.button(), use[0], use[QT_STD_BORDER], - actGroup.mid(), actGroup.text(), actGroup.brightText(), - actGroup.base(), actGroup.background()); - QColorGroup::ColorRole roles[]={QColorGroup::Midlight, QColorGroup::ButtonText, - QColorGroup::Shadow, QColorGroup::Highlight, - QColorGroup::HighlightedText, - QColorGroup::NColorRoles }; - int r(0); + TO_FACTOR(opts.lighterPopupMenuBgnd)); - for(r=0; roles[r]!=QColorGroup::NColorRoles; ++r) - newAct.setColor(roles[r], actGroup.color(roles[r])); - pal.setActive(newAct); - - use=backgroundColors(inactGroup); - - QColorGroup newInact(inactGroup.foreground(), inactGroup.button(), use[0], use[QT_STD_BORDER], - inactGroup.mid(), inactGroup.text(), inactGroup.brightText(), - inactGroup.base(), inactGroup.background()); - - for(r=0; roles[r]!=QColorGroup::NColorRoles; ++r) - newInact.setColor(roles[r], inactGroup.color(roles[r])); - pal.setInactive(newInact); - - use=backgroundColors(disGroup); + if(newCheckRadioSelCols) + if(SHADE_BLEND_SELECTED==opts.crColor) + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]), itsCheckRadioSelCols); + else + shadeColors(shade(itsButtonCols[ORIGINAL_SHADE], LV_HEADER_DARK_FACTOR), itsCheckRadioSelCols); - QColorGroup newDis(disGroup.foreground(), disGroup.button(), use[0], use[QT_STD_BORDER], - disGroup.mid(), disGroup.text(), disGroup.brightText(), - disGroup.base(), disGroup.background()); + if(newProgressCols) + shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsBackgroundCols[ORIGINAL_SHADE]), itsProgressCols); - for(r=0; roles[r]!=QColorGroup::NColorRoles; ++r) - newDis.setColor(roles[r], disGroup.color(roles[r])); - pal.setDisabled(newDis); + pal.setActive(setColorGroup(pal.active(), pal.active())); + pal.setInactive(setColorGroup(pal.inactive(), pal.active())); + pal.setDisabled(setColorGroup(pal.disabled(), pal.active(), true)); switch(opts.shadeCheckRadio) { default: - itsCheckRadioCol=QApplication::palette().active().text(); + itsCheckRadioCol=opts.crButton ? QApplication::palette().active().buttonText() + : QApplication::palette().active().text(); break; case SHADE_SELECTED: case SHADE_BLEND_SELECTED: @@ -904,13 +1393,56 @@ void QtCurveStyle::polish(QPalette &pal) if(itsMactorPal) *itsMactorPal=pal; + // Force this to be re-generated! + if(SHADE_BLEND_SELECTED==opts.menuStripe) + opts.customMenuStripeColor=Qt::black; + + if(APPEARANCE_STRIPED==opts.bgndAppearance) + pal.setBrush(QColorGroup::Background, QBrush(pal.active().background(), *createStripePixmap(pal.active().background(), true))); +} + +static QColor disable(const QColor &col, const QColor &bgnd) +{ + QColor c = col; + c = ColorUtils_darken(&c, 0.1, 1.0); + c = ColorUtils_mix(&c, &bgnd, 0.65); + return c; +} + +QColorGroup QtCurveStyle::setColorGroup(const QColorGroup &old, const QColorGroup &act, bool dis) +{ + QColor mid(old.mid()); + + if(dis) + mid=disable(act.foreground(), old.background()); + + const QColor *use(backgroundColors(old)); + QColorGroup newGrp(old.foreground(), old.button(), use[0], use[STD_BORDER], + mid, old.text(), old.brightText(), + old.base(), old.background()); + QColorGroup::ColorRole roles[]={QColorGroup::Midlight, QColorGroup::ButtonText, + QColorGroup::Shadow, QColorGroup::Highlight, + QColorGroup::HighlightedText, QColorGroup::Link, + QColorGroup::LinkVisited, QColorGroup::NColorRoles }; + int r(0); + + for(r=0; roles[r]!=QColorGroup::NColorRoles; ++r) + newGrp.setColor(roles[r], old.color(roles[r])); + + if(dis) + { + newGrp.setColor(QColorGroup::ButtonText, disable(act.buttonText(), old.button())); + newGrp.setColor(QColorGroup::Text, disable(act.text(), old.background())); + } + + return newGrp; } static const char * kdeToolbarWidget="kde toolbar widget"; void QtCurveStyle::polish(QWidget *widget) { - bool enableFilter(!equal(opts.highlightFactor, 1.0) || opts.coloredMouseOver); + bool enableFilter(opts.highlightFactor || opts.coloredMouseOver); if(::isKhtmlFormWidget(widget)) { @@ -918,6 +1450,15 @@ void QtCurveStyle::polish(QWidget *widget) connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(khtmlWidgetDestroyed(QObject *))); } + if(enableFilter && isSpecialHover(widget)) + connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(hoverWidgetDestroyed(QObject *))); + + if(isWindowDragWidget(widget)) + widget->installEventFilter(this); + + if(APPEARANCE_STRIPED==opts.bgndAppearance && (::qt_cast(widget) || ::qt_cast(widget))) + setBgndProp(widget, APPEARANCE_STRIPED); + if(widget->parentWidget() && ::qt_cast(widget) && ::qt_cast(widget->parentWidget())) { QPalette pal(widget->palette()); @@ -928,12 +1469,12 @@ void QtCurveStyle::polish(QWidget *widget) #if 0 if(opts.gtkComboMenus) - act.setColor(QColorGroup::Base, opts.lighterPopupMenuBgnd ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE]); + act.setColor(QColorGroup::Base, USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE]); act.setColor(QColorGroup::Background, opts.gtkComboMenus - ? opts.lighterPopupMenuBgnd ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE] + ? USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE] : QApplication::palette().active().base()); #endif - act.setColor(QColorGroup::Foreground, itsBackgroundCols[QT_STD_BORDER]); + act.setColor(QColorGroup::Foreground, itsBackgroundCols[STD_BORDER]); pal.setActive(act); widget->setPalette(pal); @@ -962,9 +1503,32 @@ void QtCurveStyle::polish(QWidget *widget) 0==qstrcmp(widget->parentWidget()->className(), "Kontact::MainWindow")) ((QHBox *)widget)->setLineWidth(0); + if(!IS_FLAT_BGND(opts.menuBgndAppearance) && ::qt_cast(widget)) + widget->installEventFilter(this); + + #if 0 + if(opts.menubarHiding && ::qt_cast(widget) && static_cast(widget)->menuBar()) + widget->installEventFilter(this); + #endif + + if ((opts.square&SQUARE_SCROLLVIEW) && widget && + (::qt_cast(widget) || + (widget->parentWidget() && ::qt_cast(widget) && + widget->parentWidget()->inherits("KateView"))) && + ((QFrame *)widget)->lineWidth()>1) + ((QFrame *)widget)->setLineWidth(opts.gtkScrollViews ? 1 : 2); + else if(!opts.popupBorder && widget && + (::qt_cast(widget) || + (widget->parentWidget() && ::qt_cast(widget) && + ::qt_cast(widget->parentWidget())))) + ((QFrame *)widget)->setLineWidth(0); + else if ((USE_LIGHTER_POPUP_MENU || !IS_FLAT_BGND(opts.menuBgndAppearance)) && !opts.borderMenuitems && + widget && ::qt_cast(widget)) + ((QFrame *)widget)->setLineWidth(1); + if (::qt_cast(widget) || ::qt_cast(widget)) { - bool framelessGroupBoxCheckBox=(opts.framelessGroupBoxes && isCheckBoxOfGroupBox(widget)); + bool framelessGroupBoxCheckBox=(NO_FRAME(opts.groupBox) && isCheckBoxOfGroupBox(widget)); if(framelessGroupBoxCheckBox || enableFilter) { @@ -998,7 +1562,7 @@ void QtCurveStyle::polish(QWidget *widget) if(enableFilter) { widget->installEventFilter(this); -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 +#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 widget->setMouseTracking(true); #endif } @@ -1018,7 +1582,7 @@ void QtCurveStyle::polish(QWidget *widget) widget->setBackgroundMode(PaletteBackground); widget->installEventFilter(this); - if(QTC_DO_EFFECT && onToolBar(widget)) + if(DO_EFFECT && onToolBar(widget)) widget->setName(kdeToolbarWidget); if(enableFilter) @@ -1027,12 +1591,52 @@ void QtCurveStyle::polish(QWidget *widget) if(((QComboBox *)widget)->listBox()) ((QComboBox *)widget)->listBox()->installEventFilter(this); } - else if(::qt_cast(widget) || ::qt_cast(widget)) + else if(::qt_cast(widget)) { if(NoBackground!=widget->backgroundMode()) widget->setBackgroundMode(PaletteBackground); if(SHADE_NONE!=opts.shadeMenubars) widget->installEventFilter(this); + if(BLEND_TITLEBAR || opts.windowBorder&WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR) + emitMenuSize(widget, widget->rect().height()); + if(SHADE_WINDOW_BORDER==opts.shadeMenubars) + { + QPalette pal(widget->palette()); + QColorGroup act(pal.active()); + QColorGroup inact(pal.inactive()); + + getMdiColors(act, true); + act.setColor(QColorGroup::Foreground, itsActiveMdiTextColor); + inact.setColor(QColorGroup::Foreground, opts.shadeMenubarOnlyWhenActive ? itsMdiTextColor : itsActiveMdiTextColor); + pal.setInactive(inact); + pal.setActive(act); + widget->setPalette(pal); + } + else if(opts.customMenuTextColor || SHADE_BLEND_SELECTED==opts.shadeMenubars || SHADE_SELECTED==opts.shadeMenubars || + (SHADE_CUSTOM==opts.shadeMenubars && TOO_DARK(itsMenubarCols[ORIGINAL_SHADE]))) + { + QPalette pal(widget->palette()); + QColorGroup act(pal.active()); + + act.setColor(QColorGroup::Foreground, opts.customMenuTextColor + ? opts.customMenuNormTextColor + : QApplication::palette().active().highlightedText()); + + if(!opts.shadeMenubarOnlyWhenActive) + { + QColorGroup inact(pal.inactive()); + inact.setColor(QColorGroup::Foreground, act.color(QColorGroup::Foreground)); + pal.setInactive(inact); + } + + pal.setActive(act); + widget->setPalette(pal); + } + } + else if(::qt_cast(widget)) + { + if(NoBackground!=widget->backgroundMode()) + widget->setBackgroundMode(PaletteBackground); } else if(::qt_cast(widget)) widget->setBackgroundMode(NoBackground); // PaletteBackground); @@ -1061,6 +1665,9 @@ void QtCurveStyle::polish(QWidget *widget) { widget->setName(kdeToolbarWidget); widget->setBackgroundMode(NoBackground); // We paint whole background. + + if(!enableFilter) + widget->installEventFilter(this); } // This bit stolen form polyester... @@ -1077,7 +1684,7 @@ void QtCurveStyle::polish(QWidget *widget) ::qt_cast(widget)) ((QFrame *)widget)->setLineWidth(0); } - else if (widget->inherits("QSplitterHandle") || widget->inherits("QDockWindowHandle")) + else if (widget->inherits("QSplitterHandle") || widget->inherits("QDockWindowHandle") || widget->inherits("QDockWindowResizeHandle")) { if(enableFilter) widget->installEventFilter(this); @@ -1120,18 +1727,16 @@ void QtCurveStyle::polish(QWidget *widget) } if(opts.animatedProgress) - { - widget->installEventFilter(this); - itsProgAnimWidgets[widget] = 0; - connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(progressBarDestroyed(QObject *))); - if (!itsAnimationTimer->isActive()) - itsAnimationTimer->start(PROGRESS_ANIMATION, false); - } + { + widget->installEventFilter(this); + itsProgAnimWidgets[widget] = 0; + connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(progressBarDestroyed(QObject *))); + if (!itsAnimationTimer->isActive()) + itsAnimationTimer->start(PROGRESS_ANIMATION, false); + } } -#ifdef QTC_HIGHLIGHT_SCROLVIEWS - else if(::qt_cast(widget)) + else if(opts.highlightScrollViews && ::qt_cast(widget)) widget->installEventFilter(this); -#endif else if(!qstrcmp(widget->className(), "KonqFrameStatusBar")) { // This disables the white background of the KonquerorFrameStatusBar. @@ -1145,15 +1750,21 @@ void QtCurveStyle::polish(QWidget *widget) pal.setColor(QColorGroup::Midlight, pal.active().background()); QApplication::setPalette(pal); } - else if(widget->inherits("KTabCtl") || (opts.framelessGroupBoxes && ::qt_cast(widget))) + else if(widget->inherits("KTabCtl")) widget->installEventFilter(this); + else if(NO_FRAME(opts.groupBox) && ::qt_cast(widget)) + { + ((QGroupBox *)widget)->setFlat(false); + ((QGroupBox *)widget)->setFrameShape(QFrame::NoFrame); + } +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT else if(opts.fixParentlessDialogs && ::qt_cast(widget)) { QDialog *dlg=(QDialog *)widget; // The parent->isShown is needed for KWord. It's insert picure file dialog is a child of // the insert picture dialog - but the file dialog is shown *before* the picture dialog! - if( (QTC_SKIP_TASKBAR && !dlg->parentWidget()) || + if( (SKIP_TASKBAR && !dlg->parentWidget()) || ( (!dlg->parentWidget() || !dlg->parentWidget()->isShown())// && /*(dlg->isModal() || ::qt_cast(widget))*/) ) widget->installEventFilter(this); @@ -1175,8 +1786,36 @@ void QtCurveStyle::polish(QWidget *widget) (index+17)==(int)cap.length())) ) widget->QWidget::setCaption(cap.left(index)); } +#endif + + if(APP_SYSTEMSETTINGS==itsThemedApp) + { + if(widget && widget->parentWidget() && widget->parentWidget()->parentWidget() && + ::qt_cast(widget) && QFrame::NoFrame!=((QFrame *)widget)->frameShape() && + ::qt_cast(widget->parentWidget()) && + ::qt_cast(widget->parentWidget()->parentWidget())) + ((QFrame *)widget)->setFrameShape(QFrame::NoFrame); + + if(widget->parentWidget() && widget->parentWidget()->parentWidget() && + ::qt_cast(widget->parentWidget()->parentWidget()) && + widget->inherits("KCMultiWidget") && widget->parentWidget()->inherits("QViewportWidget")) + ((QScrollView *)(widget->parentWidget()->parentWidget()))->setLineWidth(0); + } + + if(opts.tabBgnd && widget && widget->parentWidget() && ::qt_cast(widget) && + ::qt_cast(widget->parentWidget()) && + 0==qstrcmp(widget->name(), "tab pages")) + { + QPalette pal(widget->palette()); + + pal.setColor(QColorGroup::Background, shade(pal.active().background(), TO_FACTOR(opts.tabBgnd))); + widget->setBackgroundMode(PaletteBackground); + widget->setPalette(pal); + } - KStyle::polish(widget); + if(APPEARANCE_STRIPED==opts.bgndAppearance) + widget->setBackgroundOrigin(QWidget::WindowOrigin); + BASE_STYLE::polish(widget); } void QtCurveStyle::unPolish(QWidget *widget) @@ -1184,6 +1823,17 @@ void QtCurveStyle::unPolish(QWidget *widget) if(isFormWidget(widget)) itsKhtmlWidgets.remove(widget); + if(!IS_FLAT_BGND(opts.menuBgndAppearance) && ::qt_cast(widget)) + widget->removeEventFilter(this); + + #if 0 + if(opts.menubarHiding && ::qt_cast(widget) && static_cast(widget)->menuBar()) + widget->removeEventFilter(this); + #endif + + if(isWindowDragWidget(widget)) + widget->removeEventFilter(this); + if (::qt_cast(widget) || ::qt_cast(widget)) { #if QT_VERSION >= 0x030200 @@ -1208,7 +1858,7 @@ void QtCurveStyle::unPolish(QWidget *widget) if(NoBackground!=widget->backgroundMode()) // && onToolBar(widget)) widget->setBackgroundMode(PaletteButton); widget->removeEventFilter(this); -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 +#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 widget->setMouseTracking(false); #endif } @@ -1232,6 +1882,9 @@ void QtCurveStyle::unPolish(QWidget *widget) widget->setBackgroundMode(PaletteBackground); if(SHADE_NONE!=opts.shadeMenubars) widget->removeEventFilter(this); + if(SHADE_WINDOW_BORDER==opts.shadeMenubars || opts.customMenuTextColor || SHADE_BLEND_SELECTED==opts.shadeMenubars || + SHADE_SELECTED==opts.shadeMenubars || (SHADE_CUSTOM==opts.shadeMenubars &&TOO_DARK(itsMenubarCols[ORIGINAL_SHADE]))) + widget->setPalette(QApplication::palette()); } else if (widget->inherits("KToolBarSeparator")) { @@ -1252,17 +1905,15 @@ void QtCurveStyle::unPolish(QWidget *widget) } else if (::qt_cast(widget) || ::qt_cast(widget)) widget->removeEventFilter(this); - else if (widget->inherits("QSplitterHandle") || widget->inherits("QDockWindowHandle")) + else if (widget->inherits("QSplitterHandle") || widget->inherits("QDockWindowHandle") || widget->inherits("QDockWindowResizeHandle")) widget->removeEventFilter(this); else if (::qt_cast(widget)) { itsProgAnimWidgets.remove(widget); widget->removeEventFilter(this); } -#ifdef QTC_HIGHLIGHT_SCROLVIEWS - else if(::qt_cast(widget)) + else if(opts.highlightScrollViews && ::qt_cast(widget)) widget->removeEventFilter(this); -#endif else if(0==qstrcmp(widget->name(), kdeToolbarWidget)) { widget->removeEventFilter(this); @@ -1273,12 +1924,14 @@ void QtCurveStyle::unPolish(QWidget *widget) widget->removeEventFilter(this); widget->setBackgroundMode(PaletteBackground); // We paint whole background. } - else if(widget->inherits("KTabCtl") || (opts.framelessGroupBoxes && ::qt_cast(widget))) + else if(widget->inherits("KTabCtl")) widget->removeEventFilter(this); +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT else if(opts.fixParentlessDialogs && ::qt_cast(widget)) widget->removeEventFilter(this); +#endif - KStyle::unPolish(widget); + BASE_STYLE::unPolish(widget); } static void sendXEvent(QDialog *dlg, const char *msg) @@ -1319,14 +1972,23 @@ bool QtCurveStyle::appIsNotEmbedded(QDialog *dlg) bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) { if(itsHoverWidget && object==itsHoverWidget && (QEvent::Destroy==event->type() || QEvent::Hide==event->type())) + resetHover(); + + #if 0 + // Works for qtconfig, but k3b hangs? + if(opts.menubarHiding && QEvent::KeyRelease==event->type() && ::qt_cast(object)) { - itsOldPos.setX(-1); - itsOldPos.setY(-1); - itsHoverWidget=NULL; - itsIsSpecialHover=false; - itsHoverSect=QTC_NO_SECT; - itsHover=HOVER_NONE; + QMainWindow *window=static_cast(object); + + if(window->isVisible() && window->menuBar()) + { + QKeyEvent *k=static_cast(event); + + if(k->state()&Qt::ControlButton && k->state()&Qt::AltButton && Qt::Key_M==k->key()) + window->menuBar()->setHidden(window->menuBar()->isVisible()); + } } + #endif if(object->parent() && 0==qstrcmp(object->name(), kdeToolbarWidget)) { @@ -1371,11 +2033,11 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) } if(!::qt_cast(object) && !::qt_cast(object) && - !(QTC_DO_EFFECT && ::qt_cast(object))) + !(DO_EFFECT && ::qt_cast(object))) return false; // Now draw the contents } } - else if (opts.framelessGroupBoxes && QEvent::Move==event->type() && isCheckBoxOfGroupBox(object)) + else if (NO_FRAME(opts.groupBox) && QEvent::Move==event->type() && isCheckBoxOfGroupBox(object)) { QCheckBox *cb=static_cast(object); QRect r(cb->geometry()); @@ -1391,38 +2053,18 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) } else if (QEvent::Paint==event->type()) { - if (opts.framelessGroupBoxes && ::qt_cast(object)) + if(!IS_FLAT_BGND(opts.menuBgndAppearance) && ::qt_cast(object)) { - QGroupBox *box=static_cast(object); - - if (!box->isCheckable()) - { - QString title(box->title()); + QWidget *widget=(QWidget*)object; + QPainter painter(widget); + QColor col(USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol : widget->palette().active().background()); - if(title.length()) - { - int left, - right, - top, - bottom, - width, - height; - QPainter p(box); - QFontMetrics fm(p.fontMetrics()); - QRect r(box->rect()); - int th(fm.height()+2); - QFont f(p.font()); - - r.rect(&left, &top, &width, &height); - r.coords(&left, &top, &right, &bottom); - f.setBold(true); - p.setPen(box->colorGroup().foreground()); - p.setFont(f); - p.drawText(QRect(left, top, width, th), - (QApplication::reverseLayout() ? AlignRight : AlignLeft)|AlignVCenter|ShowPrefix|SingleLine, title); - return true; - } - } + if(APPEARANCE_STRIPED==opts.menuBgndAppearance) + painter.drawTiledPixmap(widget->rect(), *createStripePixmap(col, false)); + else + drawBevelGradientReal(col, &painter, widget->rect(), GT_HORIZ==opts.menuBgndGrad, false, + opts.menuBgndAppearance, WIDGET_OTHER); + return false; } else if (object->inherits("KToolBarSeparator")) { @@ -1446,7 +2088,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) { QWidget *widget((QWidget*)object); QObject *child(object->child("_tabbar")); - QTabBar *tb(child ? ::qt_cast(child) : NULL); + QTabBar *tb(child ? ::qt_cast(child) : 0L); QPainter painter(widget); QRect r(widget->rect()); int tbHeight(tb ? tb->height()-1 : 28); @@ -1496,7 +2138,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) r.setY(r.y()-y_offset); r.setHeight(parent->rect().height()); - drawMenuOrToolBarBackground(&p, r, parent->colorGroup(), true, true); + drawMenuOrToolBarBackground(&p, r, parent->colorGroup()); return true; } } @@ -1505,7 +2147,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) // focus highlight if (::qt_cast(object) || ::qt_cast(object)/* || ::qt_cast(object)*/) { - if((QEvent::FocusIn==event->type() || QEvent::FocusOut==event->type())) + if(QEvent::FocusIn==event->type() || QEvent::FocusOut==event->type() || QEvent::Enter==event->type() || QEvent::Leave==event->type()) { QWidget *widget(static_cast(object)); @@ -1520,22 +2162,114 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) return false; } - if(opts.shadeMenubarOnlyWhenActive && SHADE_NONE!=opts.shadeMenubars && - ::qt_cast(object)) + if(::qt_cast(object)) + { + bool useWindowCols=SHADE_WINDOW_BORDER==opts.shadeMenubars; + + if( (useWindowCols || opts.customMenuTextColor || SHADE_BLEND_SELECTED==opts.shadeMenubars || SHADE_SELECTED==opts.shadeMenubars || + SHADE_CUSTOM==opts.shadeMenubars) && QEvent::Paint==event->type()) + { + const QColor &col(((QWidget *)object)->palette().active().color(QColorGroup::Foreground)); + + // If we're relouring the menubar text, check to see if menubar palette has changed, if so set back to + // our values. This fixes opera - which seems to change the widgets palette after it is polished. + if((opts.customMenuTextColor && col!=opts.customMenuNormTextColor) || + ( (SHADE_BLEND_SELECTED==opts.shadeMenubars || SHADE_SELECTED==opts.shadeMenubars || + (SHADE_CUSTOM==opts.shadeMenubars && TOO_DARK(itsMenubarCols[ORIGINAL_SHADE]))) && + col!=QApplication::palette().active().highlightedText())) + { + QPalette pal(((QWidget *)object)->palette()); + QColorGroup act(pal.active()); + + act.setColor(QColorGroup::Foreground, useWindowCols + ? itsActiveMdiTextColor + : opts.customMenuTextColor + ? opts.customMenuNormTextColor + : QApplication::palette().active().highlightedText()); + + if(!opts.shadeMenubarOnlyWhenActive || useWindowCols) + { + QColorGroup inact(pal.inactive()); + inact.setColor(QColorGroup::Foreground, useWindowCols ? itsMdiTextColor : act.color(QColorGroup::Foreground)); + pal.setInactive(inact); + } + + pal.setActive(act); + ((QWidget *)object)->setPalette(pal); + } + } + + if(opts.shadeMenubarOnlyWhenActive && SHADE_NONE!=opts.shadeMenubars) + switch(event->type()) + { + case QEvent::WindowActivate: + itsActive=true; + ((QWidget *)object)->repaint(false); + return false; + case QEvent::WindowDeactivate: + itsActive=false; + ((QWidget *)object)->repaint(false); + return false; + default: + break; + } + if(BLEND_TITLEBAR || opts.windowBorder&WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR) + switch(event->type()) + { + case QEvent::Resize: + { + QResizeEvent *re = static_cast(event); + + if (re->size().height() != re->oldSize().height()) + emitMenuSize((QMenuBar *)object, re->size().height()); + break; + } + } + } + + if(dynamic_cast(event)) switch(event->type()) { - case QEvent::WindowActivate: - itsActive=true; - ((QWidget *)object)->repaint(false); - return false; - case QEvent::WindowDeactivate: - itsActive=false; - ((QWidget *)object)->repaint(false); - return false; - default: + case QEvent::MouseMove: // Only occurs for widgets with mouse tracking enabled + if(itsDragWidget) + { + itsDragWidget->setMouseTracking(itsDragWidgetHadMouseTracking); + bool move=isWindowDragWidget(object); + + if(move) + triggerWMMove(itsDragWidget, ((QMouseEvent *)event)->globalPos()); + itsDragWidget = 0L; + return move; + } + case QEvent::MouseButtonPress: + { + QMouseEvent *mev = (QMouseEvent *)event; + + if(isWindowDragWidget(object, mev->pos())) + { + + if(/*Qt::NoModifier==mev->modifiers() && */ Qt::LeftButton==mev->button()) + { + QWidget *wid = static_cast(object); + itsDragWidget=wid; + itsDragWidgetHadMouseTracking=itsDragWidget->hasMouseTracking(); + itsDragWidget->setMouseTracking(true); + return false; + } + } break; + } + case QEvent::MouseButtonRelease: + if(itsDragWidget) + { + itsDragWidget->setMouseTracking(itsDragWidgetHadMouseTracking); + itsDragWidget = 0L; + return false; + } + break; } +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT if(opts.fixParentlessDialogs && ::qt_cast(object)) { QDialog *dlg=(QDialog *)object; @@ -1543,7 +2277,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) switch(event->type()) { case QEvent::ShowMinimized: - if(QTC_SKIP_TASKBAR && appIsNotEmbedded(dlg)) + if(SKIP_TASKBAR && appIsNotEmbedded(dlg)) { // Ugly hack :-( Cant seem to get KWin to remove the minimize button. So when // the dialog gets minimized, restore. @@ -1552,7 +2286,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) } break; case QEvent::WindowActivate: - if(QTC_SKIP_TASKBAR && appIsNotEmbedded(dlg)) + if(SKIP_TASKBAR && appIsNotEmbedded(dlg)) { // OO.o's filepicker is a spawned process - but is not set transient :-( // --plus no reliable way of finding which widget to make it transient for... @@ -1608,6 +2342,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) } return false; } +#endif // Track show events for progress bars if (opts.animatedProgress && ::qt_cast(object)) @@ -1619,13 +2354,11 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) switch(event->type()) { -#ifdef QTC_HIGHLIGHT_SCROLVIEWS case QEvent::FocusIn: case QEvent::FocusOut: - if(object->isWidgetType() && ::qt_cast(object)) + if(opts.highlightScrollViews && object->isWidgetType() && ::qt_cast(object)) ((QWidget *)object)->repaint(false); break; -#endif case QEvent::Hide: case QEvent::Show: if(::qt_cast(object) && @@ -1646,7 +2379,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) { if(::qt_cast(object) && static_cast(object)->isEnabled()) { - itsHoverTab=NULL; + itsHoverTab=0L; itsHoverWidget->repaint(false); } else if(!itsHoverWidget->hasMouseTracking() || @@ -1657,36 +2390,16 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) } } else - itsHoverWidget=NULL; - - if(itsHoverWidget && !itsIsSpecialHover && - ( -#if QT_VERSION >= 0x030200 - ::qt_cast(itsHoverWidget) || - ::qt_cast(itsHoverWidget) || -#endif - ::qt_cast(itsHoverWidget) || -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 - ::qt_cast(itsHoverWidget) || - -#endif - ::qt_cast(itsHoverWidget) || - ::qt_cast(itsHoverWidget) || - ::qt_cast(itsHoverWidget) || - ::qt_cast(itsHoverWidget))) + itsHoverWidget=0L; + if(itsHoverWidget && !itsIsSpecialHover && isSpecialHover(itsHoverWidget)) itsIsSpecialHover=true; } break; case QEvent::Leave: if(itsHoverWidget && object==itsHoverWidget) { - itsOldPos.setX(-1); - itsOldPos.setY(-1); - itsHoverWidget=NULL; - itsHoverSect=QTC_NO_SECT; - itsHover=HOVER_NONE; - itsHoverTab=NULL; + resetHover(); ((QWidget *)object)->repaint(false); } break; @@ -1706,7 +2419,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event) break; } - return KStyle::eventFilter(object, event); + return BASE_STYLE::eventFilter(object, event); } void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect &rOrig, @@ -1719,18 +2432,26 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & br(r); bool bevelledButton(WIDGET_BUTTON(w) && APPEARANCE_BEVELLED==app), sunken(flags &(Style_Down|Style_On|Style_Sunken)), - lightBorder(QTC_DRAW_LIGHT_BORDER(sunken , w, app)), - doColouredMouseOver(doBorder && + flatWidget(WIDGET_PROGRESSBAR==w && !opts.borderProgress), + lightBorder(!flatWidget && DRAW_LIGHT_BORDER(sunken , w, app)), + draw3dfull(!flatWidget && !lightBorder && DRAW_3D_FULL_BORDER(sunken, app)), + draw3d(!flatWidget && (draw3dfull || (!lightBorder && DRAW_3D_BORDER(sunken, app)))), + doColouredMouseOver(!sunken && doBorder && opts.coloredMouseOver && flags&Style_MouseOver && - (!IS_SLIDER(w) || (WIDGET_SB_SLIDER==w && MO_PLASTIK==opts.coloredMouseOver)) && - (flags&QTC_CHECK_BUTTON || flags&QTC_TOGGLE_BUTTON || !sunken)), + WIDGET_SPIN!=w && WIDGET_COMBO_BUTTON!=w && WIDGET_SB_BUTTON!=w && + (WIDGET_SB_SLIDER!=w || !opts.colorSliderMouseOver) && + !(flags&DW_CLOSE_BUTTON) && + (opts.coloredTbarMo || !(flags&STD_TOOLBUTTON)) && + (flags&CHECK_BUTTON || flags&TOGGLE_BUTTON || !sunken)), plastikMouseOver(doColouredMouseOver && MO_PLASTIK==opts.coloredMouseOver), - colouredMouseOver(doColouredMouseOver && MO_COLORED==opts.coloredMouseOver), - doEtch(!itsFormMode && doBorder && ETCH_WIDGET(w) && !(flags&QTC_CHECK_BUTTON) && - QTC_DO_EFFECT), + colouredMouseOver(doColouredMouseOver && + (MO_COLORED==opts.coloredMouseOver || MO_COLORED_THICK==opts.coloredMouseOver || + (MO_GLOW==opts.coloredMouseOver && itsFormMode))), + doEtch(!itsFormMode && doBorder && ETCH_WIDGET(w) && !(flags&CHECK_BUTTON) && + DO_EFFECT), + glowFocus(doEtch && USE_GLOW_FOCUS(flags&Style_MouseOver) && flags&Style_HasFocus && flags&Style_Enabled), + sunkenToggleMo(sunken && !(flags&Style_Down) && flags&(Style_MouseOver|TOGGLE_BUTTON)), horiz(flags&Style_Horizontal); - int dark(bevelledButton ? 2 : 4), - c1(sunken ? dark : 0); const QColor *cols(custom ? custom : itsBackgroundCols), *border(colouredMouseOver ? borderColors(flags, cols) : cols); @@ -1738,26 +2459,44 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & if(doEtch) { - r.addCoords(0, 1, 0, -1); + r.addCoords(1, 1, -1, -1); br=r; } + // fill + if(br.width()>0 && br.height()>0) + { + // Adjust paint rect, so that gradient is drawn from the same coords as KDE4 and Gtk2 + if(WIDGET_PROGRESSBAR==w && opts.stripedProgress) + { + p->save(); + p->setClipRegion(p->clipRegion().eor(QRegion(br))); + } + br.addCoords(1, 1,-1,-1); + drawBevelGradient(fill, p, br, horiz, sunken, app, w); + br.addCoords(-1, -1, 1, 1); + if(WIDGET_PROGRESSBAR==w && opts.stripedProgress) + p->restore(); + } + if(!colouredMouseOver && lightBorder) br.addCoords(1, 1,-1,-1); - else if(colouredMouseOver || (!IS_GLASS(app) && !sunken && flags&Style_Raised)) + else if(colouredMouseOver || (draw3d && flags&Style_Raised)) { + int dark(/*bevelledButton ? */2/* : 4*/); + if(colouredMouseOver) - p->setPen(border[QTC_MO_STD_LIGHT(w, sunken)]); + p->setPen(border[MO_STD_LIGHT(w, sunken)]); else - p->setPen(border[c1]); - if(colouredMouseOver || bevelledButton || APPEARANCE_RAISED==app) + p->setPen(border[sunken ? dark : 0]); + if(colouredMouseOver || bevelledButton || draw3dfull) { //Left & top p->drawLine(br.x()+1, br.y()+2, br.x()+1, br.y()+br.height()-3); p->drawLine(br.x()+1, br.y()+1, br.x()+br.width()-2, br.y()+1); if(colouredMouseOver) - p->setPen(border[QTC_MO_STD_DARK(w)]); + p->setPen(border[MO_STD_DARK(w)]); else p->setPen(border[sunken ? 0 : dark]); //Right & bottom @@ -1785,7 +2524,7 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & br.addCoords(1,1,-1,-1); p->drawRect(br); - if(WIDGET_PROGRESSBAR==w && !IS_GLASS(app)) + if(IS_CUSTOM(app) || (WIDGET_PROGRESSBAR==w && (!IS_GLASS(app) || opts.fillProgress))) br.addCoords(1,1,-1,-1); else if(horiz) br.addCoords(1,0,-1,-1); @@ -1794,37 +2533,29 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & } // fill - if(br.width()>0 && br.height()>0) - { - drawBevelGradient(fill, !sunken, p, br, horiz, getWidgetShade(w, true, sunken, app), - getWidgetShade(w, false, sunken, app), sunken, app, w); - + if(br.width()>0 && br.height()>0 && (!sunken || sunkenToggleMo)) if(plastikMouseOver) { if(WIDGET_SB_SLIDER==w) { - int len(QTC_SB_SLIDER_MO_LEN(horiz ? r.width() : r.height())), - so(lightBorder ? QTC_SLIDER_MO_BORDER : 1), + int len(SB_SLIDER_MO_LEN(horiz ? r.width() : r.height())), + so(lightBorder ? SLIDER_MO_PLASTIK_BORDER : 1), eo(len+so), - col(QTC_SLIDER_MO_SHADE); + col(SLIDER_MO_SHADE); if(horiz) { - drawBevelGradient(itsMouseOverCols[col], !sunken, p, QRect(r.x()+so, r.y(), len, r.height()), - horiz, getWidgetShade(w, true, sunken, app), - getWidgetShade(w, false, sunken, app), sunken, app, w); - drawBevelGradient(itsMouseOverCols[col], !sunken, p, QRect(r.x()+r.width()-eo, r.y(), len, r.height()), - horiz, getWidgetShade(w, true, sunken, app), - getWidgetShade(w, false, sunken, app), sunken, app, w); + drawBevelGradient(itsMouseOverCols[col], p, QRect(r.x()+so, r.y(), len, r.height()), + horiz, sunken, app, w); + drawBevelGradient(itsMouseOverCols[col], p, QRect(r.x()+r.width()-eo, r.y(), len, r.height()), + horiz, sunken, app, w); } else { - drawBevelGradient(itsMouseOverCols[col], !sunken, p, QRect(r.x(), r.y()+so, r.width(), len), - horiz, getWidgetShade(w, true, sunken, app), - getWidgetShade(w, false, sunken, app), sunken, app, w); - drawBevelGradient(itsMouseOverCols[col], !sunken, p, QRect(r.x(), r.y()+r.height()-eo, r.width(), len), - horiz, getWidgetShade(w, true, sunken, app), - getWidgetShade(w, false, sunken, app), sunken, app, w); + drawBevelGradient(itsMouseOverCols[col], p, QRect(r.x(), r.y()+so, r.width(), len), + horiz, sunken, app, w); + drawBevelGradient(itsMouseOverCols[col], p, QRect(r.x(), r.y()+r.height()-eo, r.width(), len), + horiz, sunken, app, w); } } else @@ -1832,7 +2563,7 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & bool horizontal((horiz && WIDGET_SB_BUTTON!=w)|| (!horiz && WIDGET_SB_BUTTON==w)), thin(WIDGET_SB_BUTTON==w || WIDGET_SPIN==w || ((horiz ? r.height() : r.width())<16)); - p->setPen(itsMouseOverCols[QTC_MO_PLASTIK_DARK(w)]); + p->setPen(itsMouseOverCols[MO_PLASTIK_DARK(w)]); if(horizontal) { p->drawLine(r.x()+1, r.y()+1, r.x()+r.width()-2, r.y()+1); @@ -1845,7 +2576,7 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & } if(!thin) { - p->setPen(itsMouseOverCols[QTC_MO_PLASTIK_LIGHT(w)]); + p->setPen(itsMouseOverCols[MO_PLASTIK_LIGHT(w)]); if(horizontal) { p->drawLine(r.x()+1, r.y()+2, r.x()+r.width()-2, r.y()+2); @@ -1859,42 +2590,128 @@ void QtCurveStyle::drawLightBevel(const QColor &bgnd, QPainter *p, const QRect & } } } - } + else if(colouredMouseOver && 0!=round && FULLLY_ROUNDED) + { + p->setPen(itsMouseOverCols[MO_STD_LIGHT(w, sunken)]); + + if(round&CORNER_TL) + p->drawPoint(br.left(), br.top()); + if(round&CORNER_BL) + p->drawPoint(br.left(), br.bottom()); + if(round&CORNER_BR) + p->drawPoint(br.right(), br.bottom()); + if(round&CORNER_TR) + p->drawPoint(br.right(), br.top()); + } if(doBorder) - drawBorder(bgnd, p, r, cg, flags, round, cols, w, doCorners); + { + const QColor *borderCols=glowFocus || + (WIDGET_COMBO==w && USE_GLOW_FOCUS(flags&Style_MouseOver) && flags&Style_HasFocus && flags&Style_Enabled) + ? itsFocusCols + : (WIDGET_COMBO==w || WIDGET_COMBO_BUTTON==w) && cols==itsComboBtnCols + ? flags&Style_MouseOver && MO_GLOW==opts.coloredMouseOver && !sunken + ? itsMouseOverCols + : itsButtonCols + : cols; + + if((!sunken || sunkenToggleMo) && flags&Style_Enabled && !glowFocus && + ((((doEtch && WIDGET_OTHER!=w && WIDGET_SLIDER_TROUGH!=w) || WIDGET_COMBO==w || WIDGET_SB_SLIDER==w) && + MO_GLOW==opts.coloredMouseOver && flags&Style_MouseOver) || + (WIDGET_DEF_BUTTON==w && IND_GLOW==opts.defBtnIndicator))) + drawBorder(bgnd, p, r, cg, flags, round, + WIDGET_DEF_BUTTON==w && IND_GLOW==opts.defBtnIndicator && + (!(flags&Style_MouseOver) || !itsMouseOverCols) + ? itsDefBtnCols : itsMouseOverCols, w, doCorners); + else + drawBorder(bgnd, p, r, cg, flags, round, + colouredMouseOver && MO_COLORED_THICK==opts.coloredMouseOver ? itsMouseOverCols : borderCols, + w, doCorners); + } - if(doEtch) - drawEtch(p, rOrig, cg, true, true, EFFECT_SHADOW==opts.buttonEffect && WIDGET_BUTTON(w) && !sunken); + if(doEtch || glowFocus) + if( (!sunken || sunkenToggleMo) && + ((WIDGET_OTHER!=w && WIDGET_SLIDER_TROUGH!=w && MO_GLOW==opts.coloredMouseOver && flags&Style_MouseOver) || + glowFocus || + (WIDGET_DEF_BUTTON==w && IND_GLOW==opts.defBtnIndicator)/* || + (flags&Style_HasFocus && FOCUS_FULL==opts.focus)*/ )) + drawGlow(p, rOrig, cg, WIDGET_DEF_BUTTON==w && flags&Style_MouseOver ? WIDGET_STD_BUTTON : w, + glowFocus ? itsFocusCols : 0); + else + drawEtch(p, rOrig, cg, EFFECT_SHADOW==opts.buttonEffect && WIDGET_BUTTON(w) && !sunken, ROUNDED_NONE==round); p->restore(); } -void QtCurveStyle::drawEtch(QPainter *p, const QRect &r, const QColorGroup &cg, bool top, bool bot, bool raised) const +void QtCurveStyle::drawGlow(QPainter *p, const QRect &r, const QColorGroup &cg, EWidget w, const QColor *cols) const { - if(top && !raised) + if(itsMouseOverCols || itsDefBtnCols || cols) { - QColor darkCol(shade(cg.background(), QTC_ETCHED_DARK)); - - p->setPen(darkCol); - p->drawLine(r.x()+2, r.y(), r.x()+r.width()-3, r.y()); - p->setPen(midColor(darkCol, cg.background())); - p->drawPoint(r.x()+1, r.y()); - p->drawPoint(r.x()+r.width()-2, r.y()); - p->drawPoint(r.x(), r.y()+1); - p->drawPoint(r.x()+r.width()-1, r.y()+1); + bool def(WIDGET_DEF_BUTTON==w && IND_GLOW==opts.defBtnIndicator), + defShade=def && (!itsDefBtnCols || + (itsMouseOverCols && itsDefBtnCols[ORIGINAL_SHADE]==itsMouseOverCols[ORIGINAL_SHADE])); + QColor col(cols ? cols[GLOW_MO] + : (def && itsDefBtnCols) || !itsMouseOverCols + ? itsDefBtnCols[GLOW_DEFBTN] : itsMouseOverCols[GLOW_MO]); + + col=midColorF(cg.background(), col, 1.5-GLOW_ALPHA(defShade)); + p->setPen(col); + if(ROUND_NONE==opts.round) + p->drawRect(r); + else + { + p->drawLine(r.x()+2, r.y()+r.height()-1, r.x()+r.width()-3, r.y()+r.height()-1); + p->drawLine(r.x()+r.width()-1, r.y()+2, r.x()+r.width()-1, r.y()+r.height()-3); + p->drawLine(r.x()+3, r.y(), r.x()+r.width()-4, r.y()); + p->drawLine(r.x(), r.y()+3, r.x(), r.y()+r.height()-4); + //p->setPen(midColor(col, cg.background())); + p->drawLine(r.x()+r.width()-1, r.y()+r.height()-3, r.x()+r.width()-3, r.y()+r.height()-1); + p->drawLine(r.x(), r.y()+r.height()-3, r.x()+2, r.y()+r.height()-1); + p->drawLine(r.x(), r.y()+2, r.x()+2, r.y()); + p->drawLine(r.x()+r.width()-3, r.y(), r.x()+r.width()-1, r.y()+2); + p->setPen(midColor(col, cg.background())); + p->drawLine(r.x()+r.width()-1, r.y()+r.height()-2, r.x()+r.width()-2, r.y()+r.height()-1); + p->drawLine(r.x(), r.y()+r.height()-2, r.x()+1, r.y()+r.height()-1); + p->drawLine(r.x(), r.y()+1, r.x()+1, r.y()); + p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-1, r.y()+1); + } } - if(bot) +} + +void QtCurveStyle::drawEtch(QPainter *p, const QRect &r, const QColorGroup &cg, bool raised, bool square) const +{ + square=square || ROUND_NONE==opts.round; + + int mod(square ? 0 : 2); + { - QColor col(raised ? shade(cg.background(), QTC_ETCHED_DARK) : itsBackgroundCols[1]); + QColor col(raised ? shade(cg.background(), ETCHED_DARK) : itsBackgroundCols[1]); p->setPen(col); - p->drawLine(r.x()+2, r.y()+r.height()-1, r.x()+r.width()-3, r.y()+r.height()-1); - p->setPen(midColor(raised ? col : itsBackgroundCols[0], cg.background())); - p->drawPoint(r.x()+1, r.y()+r.height()-1); - p->drawPoint(r.x()+r.width()-2, r.y()+r.height()-1); - p->drawPoint(r.x(), r.y()+r.height()-2); - p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-2); + p->drawLine(r.x()+mod, r.y()+r.height()-1, r.x()+r.width()-(1+mod), r.y()+r.height()-1); + p->drawLine(r.x()+r.width()-1, r.y()+mod, r.x()+r.width()-1, r.y()+r.height()-(1+mod)); + if(!square) + { + p->setPen(midColor(raised ? col : itsBackgroundCols[0], cg.background())); + p->drawLine(r.x()+r.width()-1, r.y()+r.height()-3, r.x()+r.width()-3, r.y()+r.height()-1); + p->drawLine(r.x()+1, r.y()+r.height()-2, r.x()+2, r.y()+r.height()-1); + p->drawLine(r.x()+r.width()-2, r.y()+1, r.x()+r.width()-1, r.y()+2); + } + } + if(!raised) + { + QColor darkCol(shade(cg.background(), ETCHED_DARK)); + + p->setPen(darkCol); + p->drawLine(r.x()+1+mod, r.y(), r.x()+r.width()-(2+mod), r.y()); + p->drawLine(r.x(), r.y()+1+mod, r.x(), r.y()+r.height()-(2+mod)); + if(!square) + { + p->setPen(midColor(darkCol, cg.background())); + p->drawLine(r.x(), r.y()+2, r.x()+2, r.y()); + p->drawLine(r.x()+r.width()-3, r.y(), r.x()+r.width()-2, r.y()+1); + p->drawLine(r.x(), r.y()+r.height()-3, r.x()+1, r.y()+r.height()-2); + } } } @@ -1907,8 +2724,19 @@ void QtCurveStyle::drawBorder(const QColor &bgnd, QPainter *p, const QRect &r, c QColor border(flags&Style_ButtonDefault && IND_FONT_COLOR==opts.defBtnIndicator && flags&Style_Enabled ? cg.buttonText() - : cols[!(flags&Style_Enabled) && (WIDGET_BUTTON(w) || WIDGET_SLIDER_TROUGH==w || flags&QTC_CHECK_BUTTON) - ? QT_DISABLED_BORDER : borderVal]); + : cols[WIDGET_PROGRESSBAR==w + ? PBAR_BORDER + : !(flags&Style_Enabled) && (WIDGET_BUTTON(w) || WIDGET_SLIDER_TROUGH==w || + flags&CHECK_BUTTON) + ? DISABLED_BORDER + : itsMouseOverCols==cols && IS_SLIDER(w) + ? SLIDER_MO_BORDER_VAL + : borderVal]); + bool hasFocus(cols==itsFocusCols /* CPD USED TO INDICATE FOCUS! */), + hasMouseOver(cols==itsMouseOverCols && ENTRY_MO); + + if(WIDGET_TAB_BOT==w || WIDGET_TAB_TOP==w) + cols=itsBackgroundCols; switch(borderProfile) { @@ -1916,28 +2744,40 @@ void QtCurveStyle::drawBorder(const QColor &bgnd, QPainter *p, const QRect &r, c break; case BORDER_RAISED: case BORDER_SUNKEN: - p->setPen(flags&Style_Enabled && (BORDER_RAISED==borderProfile || APPEARANCE_FLAT!=app) - ? blendBorderColors - ? midColor(cg.background(), cols[BORDER_RAISED==borderProfile - ? 0 : QT_FRAME_DARK_SHADOW]) // Was base??? - : cols[BORDER_RAISED==borderProfile ? 0 : QT_FRAME_DARK_SHADOW] - : cg.background()); + case BORDER_LIGHT: + if(flags&Style_Enabled && (hasMouseOver || hasFocus) && (WIDGET_ENTRY==w || WIDGET_SCROLLVIEW==w || WIDGET_COMBO==w || WIDGET_SPIN==w)) + p->setPen(midColorF(cg.background(), cols[BORDER_RAISED==borderProfile || BORDER_LIGHT==borderProfile + ? 0 : FRAME_DARK_SHADOW], 1.5-ENTRY_INNER_ALPHA)); + else + p->setPen(flags&Style_Enabled && (BORDER_RAISED==borderProfile || BORDER_LIGHT==borderProfile || APPEARANCE_FLAT!=app) + ? blendBorderColors + ? midColor(cg.background(), cols[BORDER_RAISED==borderProfile + ? 0 : FRAME_DARK_SHADOW]) // Was base??? + : cols[BORDER_RAISED==borderProfile || BORDER_LIGHT==borderProfile ? 0 : FRAME_DARK_SHADOW] + : cg.background()); p->drawLine(r.x()+1, r.y()+1, r.x()+1, r.y()+r.height()-2); p->drawLine(r.x()+1, r.y()+1, r.x()+r.width()-2, r.y()+1); - p->setPen(flags&Style_Enabled && (BORDER_SUNKEN==borderProfile || APPEARANCE_FLAT!=app) - ? blendBorderColors - ? midColor(cg.background(), cols[BORDER_RAISED==borderProfile - ? QT_FRAME_DARK_SHADOW : 0]) // Was base??? - : cols[BORDER_RAISED==borderProfile ? QT_FRAME_DARK_SHADOW : 0] - : cg.background()); + if(!hasFocus && !hasMouseOver && BORDER_LIGHT!=borderProfile) + p->setPen(WIDGET_SCROLLVIEW==w + ? cg.background() + : WIDGET_ENTRY==w + ? cg.base() + : flags&Style_Enabled && (BORDER_SUNKEN==borderProfile || APPEARANCE_FLAT!=app || + WIDGET_TAB_TOP==w || WIDGET_TAB_BOT==w) + ? blendBorderColors + ? midColor(cg.background(), cols[BORDER_RAISED==borderProfile + ? FRAME_DARK_SHADOW : 0]) // Was base??? + : cols[BORDER_RAISED==borderProfile ? FRAME_DARK_SHADOW : 0] + : cg.background()); p->drawLine(r.x()+r.width()-2, r.y()+1, r.x()+r.width()-2, r.y()+r.height()-2); p->drawLine(r.x()+1, r.y()+r.height()-2, r.x()+r.width()-2, r.y()+r.height()-2); } - if(QTC_ROUNDED && ROUNDED_NONE!=round) + if(ROUNDED && ROUNDED_NONE!=round) { - bool largeArc(ROUND_FULL==opts.round && !(flags&QTC_CHECK_BUTTON) && - r.width()>=QTC_MIN_BTN_SIZE && r.height()>=QTC_MIN_BTN_SIZE); + bool largeArc(WIDGET_FOCUS!=w && FULLLY_ROUNDED && !(flags&CHECK_BUTTON) && + r.width()>=MIN_ROUND_FULL_SIZE && r.height()>=MIN_ROUND_FULL_SIZE && + !(flags&DW_CLOSE_BUTTON) && (WIDGET_PROGRESSBAR!=w || opts.fillProgress)); p->setPen(border); if(itsFormMode) @@ -1982,137 +2822,140 @@ void QtCurveStyle::drawBorder(const QColor &bgnd, QPainter *p, const QRect &r, c p->drawLine(r.x()+r.width()-1, r.y()+1, r.x()+r.width()-1, r.y()+r.height()-2); } - QColor largeArcMid(midColor(border, bgnd)), - aaColor(midColor(custom ? custom[3] : itsBackgroundCols[3], bgnd)); - QPixmap *pix=itsFormMode ? getPixelPixmap(border) : NULL; - - if(round&CORNER_TL) + //if(!opts.fillProgress || WIDGET_PROGRESSBAR!=w) { - if(largeArc) + QColor largeArcMid(midColor(border, bgnd)), + aaColor(midColor(custom ? custom[3] : itsBackgroundCols[3], bgnd)); + QPixmap *pix=itsFormMode ? getPixelPixmap(border) : 0L; + + if(round&CORNER_TL) { - p->drawPoint(r.x()+1, r.y()+1); - if(itsFormMode) - { - p->drawPixmap(r.x(), r.y()+1, *pix); - p->drawPixmap(r.x()+1, r.y(), *pix); - } - else + if(largeArc) { - p->setPen(largeArcMid); - p->drawLine(r.x(), r.y()+1, r.x()+1, r.y()); + p->drawPoint(r.x()+1, r.y()+1); + if(itsFormMode) + { + p->drawPixmap(r.x(), r.y()+1, *pix); + p->drawPixmap(r.x()+1, r.y(), *pix); + } + else + { + p->setPen(largeArcMid); + p->drawLine(r.x(), r.y()+1, r.x()+1, r.y()); + } } + if(doCorners) + if(itsFormMode) + { + if(!largeArc) + p->drawPixmap(r.x(), r.y(), *pix); + } + else + { + p->setPen(largeArc ? bgnd : aaColor); + p->drawPoint(r.x(), r.y()); + } } - if(doCorners) - if(itsFormMode) - { - if(!largeArc) - p->drawPixmap(r.x(), r.y(), *pix); - } - else - { - p->setPen(largeArc ? bgnd : aaColor); - p->drawPoint(r.x(), r.y()); - } - } - else - p->drawPoint(r.x(), r.y()); + else + p->drawPoint(r.x(), r.y()); - p->setPen(border); - if(round&CORNER_TR) - { - if(largeArc) + p->setPen(border); + if(round&CORNER_TR) { - p->drawPoint(r.x()+r.width()-2, r.y()+1); - if(itsFormMode) - { - p->drawPixmap(r.x()+r.width()-2, r.y(), *pix); - p->drawPixmap(r.x()+r.width()-1, r.y()+1, *pix); - } - else + if(largeArc) { - p->setPen(largeArcMid); - p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-1, r.y()+1); + p->drawPoint(r.x()+r.width()-2, r.y()+1); + if(itsFormMode) + { + p->drawPixmap(r.x()+r.width()-2, r.y(), *pix); + p->drawPixmap(r.x()+r.width()-1, r.y()+1, *pix); + } + else + { + p->setPen(largeArcMid); + p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-1, r.y()+1); + } } + if(doCorners) + if(itsFormMode) + { + if(!largeArc) + p->drawPixmap(r.x()+r.width()-1, r.y(), *pix); + } + else + { + p->setPen(largeArc ? bgnd : aaColor); + p->drawPoint(r.x()+r.width()-1, r.y()); + } } - if(doCorners) - if(itsFormMode) - { - if(!largeArc) - p->drawPixmap(r.x()+r.width()-1, r.y(), *pix); - } - else - { - p->setPen(largeArc ? bgnd : aaColor); - p->drawPoint(r.x()+r.width()-1, r.y()); - } - } - else - p->drawPoint(r.x()+r.width()-1, r.y()); + else + p->drawPoint(r.x()+r.width()-1, r.y()); - p->setPen(border); - if(round&CORNER_BR) - { - if(largeArc) + p->setPen(border); + if(round&CORNER_BR) { - p->drawPoint(r.x()+r.width()-2, r.y()+r.height()-2); - if(itsFormMode) - { - p->drawPixmap(r.x()+r.width()-2, r.y()+r.height()-1, *pix); - p->drawPixmap(r.x()+r.width()-1, r.y()+r.height()-2, *pix); - } - else + if(largeArc) { - p->setPen(largeArcMid); - p->drawLine(r.x()+r.width()-2, r.y()+r.height()-1, r.x()+r.width()-1, - r.y()+r.height()-2); + p->drawPoint(r.x()+r.width()-2, r.y()+r.height()-2); + if(itsFormMode) + { + p->drawPixmap(r.x()+r.width()-2, r.y()+r.height()-1, *pix); + p->drawPixmap(r.x()+r.width()-1, r.y()+r.height()-2, *pix); + } + else + { + p->setPen(largeArcMid); + p->drawLine(r.x()+r.width()-2, r.y()+r.height()-1, r.x()+r.width()-1, + r.y()+r.height()-2); + } } + if(doCorners) + if(itsFormMode) + { + if(!largeArc) + p->drawPixmap(r.x()+r.width()-1, r.y()+r.height()-1, *pix); + } + else + { + p->setPen(largeArc ? bgnd : aaColor); + p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-1); + } } - if(doCorners) - if(itsFormMode) - { - if(!largeArc) - p->drawPixmap(r.x()+r.width()-1, r.y()+r.height()-1, *pix); - } - else - { - p->setPen(largeArc ? bgnd : aaColor); - p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-1); - } - } - else - p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-1); + else + p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-1); - p->setPen(border); - if(round&CORNER_BL) - { - if(largeArc) + p->setPen(border); + if(round&CORNER_BL) { - p->drawPoint(r.x()+1, r.y()+r.height()-2); - if(itsFormMode) - { - p->drawPixmap(r.x(), r.y()+r.height()-2, *pix); - p->drawPixmap(r.x()+1, r.y()+r.height()-1, *pix); - } - else + if(largeArc) { - p->setPen(largeArcMid); - p->drawLine(r.x(), r.y()+r.height()-2, r.x()+1, r.y()+r.height()-1); + p->drawPoint(r.x()+1, r.y()+r.height()-2); + if(itsFormMode) + { + p->drawPixmap(r.x(), r.y()+r.height()-2, *pix); + p->drawPixmap(r.x()+1, r.y()+r.height()-1, *pix); + } + else + { + p->setPen(largeArcMid); + p->drawLine(r.x(), r.y()+r.height()-2, r.x()+1, r.y()+r.height()-1); + } } + if(doCorners) + if(itsFormMode) + { + if(!largeArc) + p->drawPixmap(r.x(), r.y()+r.height()-1, *pix); + } + else + { + p->setPen(largeArc ? bgnd : aaColor); + p->drawPoint(r.x(), r.y()+r.height()-1); + } } - if(doCorners) - if(itsFormMode) - { - if(!largeArc) - p->drawPixmap(r.x(), r.y()+r.height()-1, *pix); - } - else - { - p->setPen(largeArc ? bgnd : aaColor); - p->drawPoint(r.x(), r.y()+r.height()-1); - } + else + p->drawPoint(r.x(), r.y()+r.height()-1); } - else - p->drawPoint(r.x(), r.y()+r.height()-1); } else { @@ -2122,118 +2965,156 @@ void QtCurveStyle::drawBorder(const QColor &bgnd, QPainter *p, const QRect &r, c } } +void QtCurveStyle::drawMdiIcon(QPainter *painter, const QColor &color, const QColor &shadow, const QRect &r, bool sunken, int margin, + SubControl button) const +{ + if(!sunken) + drawWindowIcon(painter, shadow, adjusted(r, 1, 1, 1, 1), sunken, margin, button); + drawWindowIcon(painter, color, r, sunken, margin, button); +} + +void QtCurveStyle::drawWindowIcon(QPainter *painter, const QColor &color, const QRect &r, bool sunken, int margin, SubControl button) const +{ + QRect rect(r); + + // Icons look best at 22x22... + if(rect.height()>22) + { + int diff=(rect.height()-22)/2; + adjust(rect, diff, diff, -diff, -diff); + } + + if(sunken) + adjust(rect, 1, 1, 1, 1); + + if(margin) + adjust(rect, margin, margin, -margin, -margin); + + painter->setPen(color); + + switch(button) + { + case SC_TitleBarMinButton: + painter->drawLine(rect.center().x() - 2, rect.center().y() + 3, rect.center().x() + 3, rect.center().y() + 3); + painter->drawLine(rect.center().x() - 2, rect.center().y() + 4, rect.center().x() + 3, rect.center().y() + 4); + painter->drawLine(rect.center().x() - 3, rect.center().y() + 3, rect.center().x() - 3, rect.center().y() + 4); + painter->drawLine(rect.center().x() + 4, rect.center().y() + 3, rect.center().x() + 4, rect.center().y() + 4); + break; + case SC_TitleBarMaxButton: + painter->drawRect(rect); // adjusted(rect, 0, 0, -1, -1)); + painter->drawLine(rect.left() + 1, rect.top() + 1, rect.right() - 1, rect.top() + 1); + painter->drawPoint(rect.topLeft()); + painter->drawPoint(rect.topRight()); + painter->drawPoint(rect.bottomLeft()); + painter->drawPoint(rect.bottomRight()); + break; + case SC_TitleBarCloseButton: + painter->drawLine(rect.left() + 1, rect.top(), rect.right(), rect.bottom() - 1); + painter->drawLine(rect.left(), rect.top() + 1, rect.right() - 1, rect.bottom()); + painter->drawLine(rect.right() - 1, rect.top(), rect.left(), rect.bottom() - 1); + painter->drawLine(rect.right(), rect.top() + 1, rect.left() + 1, rect.bottom()); + painter->drawPoint(rect.topLeft()); + painter->drawPoint(rect.topRight()); + painter->drawPoint(rect.bottomLeft()); + painter->drawPoint(rect.bottomRight()); + painter->drawLine(rect.left() + 1, rect.top() + 1, rect.right() - 1, rect.bottom() - 1); + painter->drawLine(rect.left() + 1, rect.bottom() - 1, rect.right() - 1, rect.top() + 1); + break; + case SC_TitleBarNormalButton: + { + QRect r2 = adjusted(rect, 0, 3, -3, 0); + + painter->drawRect(r2); // adjusted(r2, 0, 0, -1, -1)); + painter->drawLine(r2.left() + 1, r2.top() + 1, r2.right() - 1, r2.top() + 1); + painter->drawPoint(r2.topLeft()); + painter->drawPoint(r2.topRight()); + painter->drawPoint(r2.bottomLeft()); + painter->drawPoint(r2.bottomRight()); + + QRect backWindowRect(adjusted(rect, 3, 0, 0, -3)); + QRegion clipRegion(backWindowRect); + + clipRegion -= r2; + if(sunken) + adjust(backWindowRect, 1, 1, 1, 1); + painter->drawRect(backWindowRect); // adjusted(backWindowRect, 0, 0, -1, -1)); + painter->drawLine(backWindowRect.left() + 1, backWindowRect.top() + 1, + backWindowRect.right() - 1, backWindowRect.top() + 1); + painter->drawPoint(backWindowRect.topLeft()); + painter->drawPoint(backWindowRect.topRight()); + painter->drawPoint(backWindowRect.bottomLeft()); + painter->drawPoint(backWindowRect.bottomRight()); + break; + } + case SC_TitleBarShadeButton: + ::drawArrow(painter, rect, color, PE_ArrowUp, opts, true); + break; + case SC_TitleBarUnshadeButton: + ::drawArrow(painter, rect, color, PE_ArrowDown, opts, true); + default: + break; + } +} + void QtCurveStyle::drawEntryField(QPainter *p, const QRect &rx, const QColorGroup &cg, - SFlags flags, bool highlight, int round, EWidget w) const + SFlags flags, EntryColor coloration, int round, EWidget w) const { - const QColor *use(highlight ? itsMenuitemCols : buttonColors(cg)); + const QColor *use(ENTRY_MOUSE_OVER==coloration && itsMouseOverCols + ? itsMouseOverCols + : ENTRY_FOCUS==coloration && itsFocusCols + ? itsFocusCols + : backgroundColors(cg)); bool isSpin(WIDGET_SPIN==w), - doEtch(!itsFormMode && QTC_DO_EFFECT); + doEtch(!itsFormMode && opts.etchEntry && (!isSpin || opts.unifySpin) && WIDGET_COMBO!=w && DO_EFFECT), + reverse(QApplication::reverseLayout()); + + if(WIDGET_SCROLLVIEW!=w && (opts.square&SQUARE_ENTRY)) + round=ROUNDED_NONE; QRect r(rx); if(doEtch) - r.addCoords(0, 1, 0, -1); + r.addCoords(1, 1, -1, -1); - if(isSpin) + if(!itsFormMode) { - if(QApplication::reverseLayout()) - r.addCoords(-1, 0, 0, 0); - - p->setPen(flags&Style_Enabled ? cg.base() : cg.background()); - p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-2, r.y()+r.height()-1); - p->drawLine(r.x()+r.width()-3, r.y(), r.x()+r.width()-3, r.y()+r.height()-1); + p->setPen(cg.background()); + p->drawRect(rx); } - if(!itsFormMode) - p->fillRect(rx, cg.background()); - p->fillRect(QRect(rx.x()+2, rx.y()+2, rx.x()+rx.width()-3, rx.y()+rx.height()-3), - flags&Style_Enabled ? cg.base() : cg.background()); + if(isSpin || WIDGET_ENTRY==w || WIDGET_COMBO==w) + { + if(reverse && isSpin) + r.addCoords(-1, 0, 0, 0); - p->setPen(APPEARANCE_FLAT!=opts.appearance || highlight - ? midColor(flags&Style_Enabled ? cg.base() : cg.background(), use[3]) - : cg.base()); - p->drawLine(r.x()+1, r.y()+1, r.x()+1, r.y()+r.height()-2); - p->drawLine(r.x()+1, r.y()+1, r.x()+r.width()-(isSpin ? 0 : 2), r.y()+1); + if(isSpin || WIDGET_COMBO==w) + p->fillRect(r, flags&Style_Enabled ? cg.base() : cg.background()); + } - p->setPen(flags&Style_Enabled ? midColor(cg.base(), use[0]) : cg.background()); - p->drawLine(r.x()+r.width()-(isSpin && highlight ? 3 : 2), r.y()+1, - r.x()+r.width()-(isSpin && highlight ? 3 : 2), r.y()+r.height()-2); - p->drawLine(r.x()+1, r.y()+r.height()-2, r.x()+r.width()-(isSpin ? 0 : 2), r.y()+r.height()-2); + if(ENTRY_NONE!=coloration && isSpin && !opts.unifySpin) + if(reverse) + r.addCoords(1, 0, 0, 0); + else + r.addCoords(0, 0, -1, 0); - if(highlight && isSpin) - { - p->setPen(use[QT_STD_BORDER]); - p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-2, r.y()+r.height()-1); - } + drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), round, use, + WIDGET_SCROLLVIEW==w ? w : WIDGET_ENTRY, true, isSpin && !(flags&Style_Enabled) ? BORDER_FLAT : BORDER_SUNKEN); - drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), round, use); if(doEtch) { - r=rx; + QRect r(rx); p->setClipRegion(r); if(!(round&CORNER_TR) && !(round&CORNER_BR)) r.addCoords(0, 0, 2, 0); if(!(round&CORNER_TL) && !(round&CORNER_BL)) r.addCoords(-2, 0, 0, 0); - drawEtch(p, r, cg, true, true, EFFECT_SHADOW==opts.buttonEffect && WIDGET_BUTTON(w) && - !(flags &(Style_Down | Style_On | Style_Sunken))); + drawEtch(p, r, cg, EFFECT_SHADOW==opts.buttonEffect && WIDGET_BUTTON(w) && + !(flags &(Style_Down | Style_On | Style_Sunken)), ROUNDED_NONE==round); p->setClipping(false); } } -static void drawArrow(QPainter *p, const QRect &r, const QColor &col, QStyle::PrimitiveElement pe, const Options &opts, bool small=false) -{ - QPointArray a; - - if(small) - switch(pe) - { - case QStyle::PE_ArrowUp: - a.setPoints(opts.vArrows ? 7 : 3, 2,0, 0,-2, -2,0, -2,1, -1,0, 1,0, 2,1); - break; - case QStyle::PE_ArrowDown: - a.setPoints(opts.vArrows ? 7 : 3, 2,0, 0,2, -2,0, -2,-1, -1,0, 1,0, 2,-1); - break; - case QStyle::PE_ArrowRight: - a.setPoints(opts.vArrows ? 7 : 3, 0,-2, 2,0, 0,2, -1,2, 0,1, 0,-1, -1,-2); - break; - case QStyle::PE_ArrowLeft: - a.setPoints(opts.vArrows ? 7 : 3, 0,-2, -2,0, 0,2, 1,2, 0,1, 0,-1, 1,-2); - break; - default: - return; - } - else // Large arrows... - switch(pe) - { - case QStyle::PE_ArrowUp: - a.setPoints(opts.vArrows ? 6 : 3, 3,1, 0,-2, -3,1, -2, 2, 0,0, 2,2); - break; - case QStyle::PE_ArrowDown: - a.setPoints(opts.vArrows ? 6 : 3, 3,-1, 0,2, -3,-1, -2,-2, 0,0, 2,-2); - break; - case QStyle::PE_ArrowRight: - a.setPoints(opts.vArrows ? 6 : 3, -1,-3, 2,0, -1,3, -2,2, 0,0, -2,-2); - break; - case QStyle::PE_ArrowLeft: - a.setPoints(opts.vArrows ? 6 : 3, 1,-3, -2,0, 1,3, 2,2, 0,0, 2,-2); - break; - default: - return; - } - - if(a.isNull()) - return; - - p->save(); - a.translate((r.x()+(r.width()>>1)),(r.y()+(r.height()>>1))); - p->setBrush(col); - p->setPen(col); - p->drawPolygon(a); - p->restore(); -} - void QtCurveStyle::drawArrow(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, PrimitiveElement pe, bool small, bool checkActive) const { @@ -2243,7 +3124,7 @@ void QtCurveStyle::drawArrow(QPainter *p, const QRect &r, const QColorGroup &cg, : cg.text() : cg.mid()); - ::drawArrow(p, r, col, pe, opts, small); + ::drawArrow(p, r, p->pen()==QPen::NoPen ? col : p->pen().color(), pe, opts, small); } void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect &r, @@ -2262,8 +3143,8 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(flags&Style_Down) flags=((flags|Style_Down)^Style_Down)| Style_Sunken; flags|=Style_Enabled; -#if KDE_VERSION >= 0x30200 -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 +#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 if(HOVER_KICKER==itsHover && itsHoverWidget) // && itsHoverWidget==p->device()) flags|=Style_MouseOver; #endif @@ -2271,15 +3152,14 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & #endif drawLightBevel(p, r, cg, flags|Style_Horizontal, ROUNDED_ALL, getFill(flags, use), use, true, false); -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 itsFormMode=false; #endif } else { - bool isFirst(false), isLast(false), isTable(false); - QHeader *header(p && p->device() ? dynamic_cast(p->device()) - : NULL); + bool isFirst(false), isLast(false), isTable(false), isSort(false); + QHeader *header(p && p->device() ? dynamic_cast(p->device()) : 0L); if (header) { @@ -2294,20 +3174,31 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & isLast=tbl->rowAt(r.y()+header->offset())==(tbl->numRows()-1); } else - isFirst = header->mapToIndex(header->sectionAt(r.x()+header->offset())) == 0; + { + int index=header->mapToIndex(header->sectionAt(r.x()+header->offset())); + isFirst = index == 0; + isSort = header->sortIndicatorSection() == index; + } } else if(0==flags) // Header on popup menu? - { + { QWidget *widget(p && p->device() ? dynamic_cast(p->device()) : 0L); + bool menuTitle(widget && 0==qstrcmp(widget->className(), "KPopupTitle")); const QColor *use(buttonColors(cg)); - - drawLightBevel(p, r, cg, flags|Style_Horizontal, ROUNDED_ALL, - getFill(flags, use), use); + QRect r2(r); + + if(menuTitle) + r2.addCoords(2, 2, -2, -2); + drawLightBevel(p, r2, cg, flags|Style_Horizontal, ROUNDED_ALL, getFill(flags, use), use); break; } + const QColor *use(flags&Style_Enabled && itsSortedLvColors && isSort + ? itsSortedLvColors + : opts.lvButton ? buttonColors(cg) : backgroundColors(cg)); + flags=((flags|Style_Sunken)^Style_Sunken)| Style_Raised; - if(QTC_NO_SECT!=itsHoverSect && HOVER_HEADER==itsHover && itsHoverWidget) + if(NO_SECT!=itsHoverSect && HOVER_HEADER==itsHover && itsHoverWidget) { QHeader *hd(::qt_cast(itsHoverWidget)); @@ -2317,70 +3208,57 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & bool sunken(flags &(Style_Down | Style_On | Style_Sunken)); - drawBevelGradient(getFill(flags, itsBackgroundCols), !sunken, p, r, flags&Style_Horizontal, - sunken ? SHADE_BEVEL_GRAD_SEL_LIGHT : SHADE_BEVEL_GRAD_LIGHT, - sunken ? SHADE_BEVEL_GRAD_SEL_DARK : SHADE_BEVEL_GRAD_DARK, + drawBevelGradient(getFill(flags, use), p, r, flags&Style_Horizontal, sunken, opts.lvAppearance, WIDGET_LISTVIEW_HEADER); if(APPEARANCE_RAISED==opts.lvAppearance) { - p->setPen(itsBackgroundCols[4]); + p->setPen(use[4]); if(flags&Style_Horizontal) p->drawLine(r.x(), r.y()+r.height()-2, r.x()+r.width()-1, r.y()+r.height()-2); else p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-2, r.y()+r.height()-1); } - const QColor *border(borderColors(flags, NULL)); - if(flags&Style_Horizontal) { - if(border) - { - p->setPen(border[ORIGINAL_SHADE]); - p->drawLine(r.x(), r.y()+r.height()-2, r.x()+r.width()-1, - r.y()+r.height()-2); - p->setPen(border[QT_STD_BORDER]); - } - else - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->drawLine(r.x(), r.y()+r.height()-1, r.x()+r.width()-1, r.y()+r.height()-1); + if(itsMouseOverCols && opts.coloredMouseOver && flags&Style_MouseOver) + drawHighlight(p, QRect(r.x(), r.y()+r.height()-2, r.width(), 2), cg, true, true); + if(!isFirst) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->drawLine(r.x(), r.y()+5, r.x(), r.y()+r.height()-6); - p->setPen(itsBackgroundCols[0]); + p->setPen(use[0]); p->drawLine(r.x()+1, r.y()+5, r.x()+1, r.y()+r.height()-6); } } else { - if(border) - { - p->setPen(border[ORIGINAL_SHADE]); - p->drawLine(r.x()+r.width()-2, r.y(), r.x()+r.width()-2, r.y()+r.height()-1); - p->setPen(border[QT_STD_BORDER]); - } - else - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->drawLine(r.x()+r.width()-1, r.y(), r.x()+r.width()-1, r.y()+r.height()-1); if(!isLast) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->drawLine(r.x()+5, r.y()+r.height()-2, r.x()+r.width()-6, r.y()+r.height()-2); - p->setPen(itsBackgroundCols[0]); + p->setPen(use[0]); p->drawLine(r.x()+5, r.y()+r.height()-1, r.x()+r.width()-6, r.y()+r.height()-1); } + + if(itsMouseOverCols && opts.coloredMouseOver && flags&Style_MouseOver) + drawHighlight(p, QRect(r.x(), r.y()+r.height()-3, r.width(), 2), cg, true, true); } } break; } case PE_HeaderArrow: - drawArrow(p, r, cg, flags, flags&Style_Up ? PE_ArrowUp : PE_ArrowDown); + ::drawArrow(p, r, MO_ARROW(cg.buttonText()), flags&Style_Up ? PE_ArrowUp : PE_ArrowDown, opts, false); break; case PE_ButtonBevel: flags|=Style_Enabled; @@ -2388,10 +3266,11 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & case PE_ButtonTool: case PE_ButtonDropDown: { - const QColor *use(buttonColors(cg)); + const QColor *use((IND_TINT==opts.defBtnIndicator || IND_SELECTED==opts.defBtnIndicator) && flags&Style_Enabled && flags&Style_ButtonDefault + ? itsDefBtnCols : buttonColors(cg)); bool glassMod(PE_ButtonTool==pe && IS_GLASS(opts.appearance) && IS_GLASS(opts.toolbarAppearance)), - mdi(!(flags&QTC_CHECK_BUTTON) && (!(flags&QTC_STD_TOOLBUTTON)||flags&QTC_NO_ETCH_BUTTON) && + mdi(!(flags&CHECK_BUTTON) && (!(flags&STD_TOOLBUTTON)||flags&NO_ETCH_BUTTON) && PE_ButtonTool==pe && r.width()<=16 && r.height()<=16), operaMdi(PE_ButtonTool==pe && APP_OPERA==itsThemedApp && r.width()==16 && r.height()==16); @@ -2399,9 +3278,9 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(!(flags&Style_Sunken)) flags|=Style_Raised; - if(PE_ButtonTool==pe && flags&QTC_VERTICAL_TB_BUTTON) + if(PE_ButtonTool==pe && flags&VERTICAL_TB_BUTTON) { - flags-=QTC_VERTICAL_TB_BUTTON; + flags-=VERTICAL_TB_BUTTON; if(flags&Style_Horizontal) flags-=Style_Horizontal; } @@ -2410,26 +3289,43 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & itsFormMode=itsFormMode || mdi || operaMdi; if(mdi || operaMdi) + { flags|=Style_Horizontal; + if(!operaMdi) + { + if(flags<0x14000000 && !(flags&(Style_Down|Style_On|Style_Sunken|Style_MouseOver))) + break; + if(flags<0x14000000) + use=getMdiColors(cg, true); + } + } - drawLightBevel(p, r, cg, glassMod ? flags : flags|Style_Horizontal, -#if KDE_VERSION >= 0x30200 + drawLightBevel(/*flags&DW_CLOSE_BUTTON + ? cg.background().dark(DW_BGND) + : */cg.background(), + p, r, cg, glassMod ? flags : flags|Style_Horizontal, +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 (APP_KORN==itsThemedApp && itsIsTransKicker && PE_ButtonTool==pe) || #endif operaMdi || mdi - ? ROUNDED_NONE - : ROUNDED_ALL, - getFill(flags, use), use, true, true, - flags&QTC_NO_ETCH_BUTTON ? WIDGET_NO_ETCH_BTN : WIDGET_STD_BUTTON); - - if(IND_COLORED==opts.defBtnIndicator && (flags&Style_ButtonDefault)) + ? ROUNDED_NONE + : ROUNDED_ALL, + getFill(flags, use, false, + flags&Style_ButtonDefault && flags&Style_Enabled && IND_DARKEN==opts.defBtnIndicator), + use, true, true, + flags&NO_ETCH_BUTTON + ? WIDGET_NO_ETCH_BTN + : flags&Style_ButtonDefault && flags&Style_Enabled && IND_COLORED!=opts.defBtnIndicator + ? WIDGET_DEF_BUTTON + : WIDGET_STD_BUTTON); + + if(IND_COLORED==opts.defBtnIndicator && flags&Style_ButtonDefault && flags&Style_Enabled) { - const QColor *cols=itsMouseOverCols && flags&Style_MouseOver ? itsMouseOverCols : itsDefBtnCols; - QRegion outer(r); - QRect r2(r); + QRegion outer(r); + QRect r2(r); - if(!itsFormMode && QTC_DO_EFFECT) - r2.addCoords(0, 1, 0, -1); + if(!itsFormMode && DO_EFFECT) + r2.addCoords(1, 1, -1, -1); r2.addCoords(COLORED_BORDER_SIZE, COLORED_BORDER_SIZE, -COLORED_BORDER_SIZE, -COLORED_BORDER_SIZE); @@ -2439,12 +3335,12 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & p->setClipRegion(outer.eor(inner)); drawLightBevel(p, r, cg, glassMod ? flags : flags|Style_Horizontal, - flags&QTC_CHECK_BUTTON -#if KDE_VERSION >= 0x30200 + flags&CHECK_BUTTON +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 || (APP_KORN==itsThemedApp && itsIsTransKicker && PE_ButtonTool==pe) #endif ? ROUNDED_NONE : ROUNDED_ALL, - cols[QTC_MO_DEF_BTN], cols, true, true, + itsDefBtnCols[MO_DEF_BTN], itsDefBtnCols, true, true, WIDGET_DEF_BUTTON); p->setClipping(false); } @@ -2457,16 +3353,17 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { case IND_CORNER: { - const QColor *use(buttonColors(cg)); QPointArray points; bool sunken(flags&Style_Down || flags&Style_Sunken); - int offset(sunken ? 4 : 3); + int offset(sunken ? 5 : 4), + etchOffset(DO_EFFECT ? 1 : 0); + const QColor *cols(itsFocusCols ? itsFocusCols : itsHighlightCols); - points.setPoints(3, r.x()+offset, r.y()+offset+1, r.x()+offset+6, r.y()+offset+1, - r.x()+offset, r.y()+offset+7); + points.setPoints(3, r.x()+offset+etchOffset, r.y()+offset+etchOffset, r.x()+offset+6+etchOffset, r.y()+offset+etchOffset, + r.x()+offset+etchOffset, r.y()+offset+6+etchOffset); - p->setBrush(use[sunken ? 0 : 4]); - p->setPen(use[sunken ? 0 : 4]); + p->setBrush(cols[sunken ? 0 : 4]); + p->setPen(cols[sunken ? 0 : 4]); p->drawPolygon(points); break; } @@ -2477,13 +3374,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & case PE_CheckMark: if(flags&Style_On) { - QPixmap *pix(getPixmap(flags&Style_Enabled - ? (flags&Style_Selected && !(flags&QTC_LISTVIEW_ITEM)) || - (flags&Style_Active && flags&QTC_MENU_ITEM) - ? cg.highlightedText() - : itsCheckRadioCol - : cg.mid(), - PIX_CHECK, 1.0)); + QPixmap *pix(getPixmap(checkRadioCol(flags, cg), PIX_CHECK, 1.0)); p->drawPixmap(r.center().x()-(pix->width()/2), r.center().y()-(pix->height()/2), *pix); @@ -2492,11 +3383,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { int x(r.center().x()), y(r.center().y()); - p->setPen(flags&Style_Enabled - ? flags&Style_Selected && !(flags&QTC_LISTVIEW_ITEM) - ? cg.highlightedText() - : itsCheckRadioCol - : cg.mid()); + p->setPen(checkRadioCol(flags, cg)); p->drawLine(x-3, y, x+3, y); p->drawLine(x-3, y+1, x+3, y+1); } @@ -2507,13 +3394,13 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(item) { - const QColor *bc(borderColors(flags, NULL)), + const QColor *bc(borderColors(flags, 0L)), *btn(buttonColors(cg)), *use(bc ? bc : btn); int x(r.x()+1), y(r.y()+2); p->drawPixmap(x, y, *getPixmap(use[opts.coloredMouseOver && flags&Style_MouseOver - ? 4 : QT_BORDER(flags&Style_Enabled)], + ? 4 : BORDER_VAL(flags&Style_Enabled)], PIX_RADIO_BORDER, 0.8)); ::drawArrow(p, QRect(r.x()-1, r.y()-1, r.width(), r.height()), use[opts.coloredMouseOver && flags&Style_MouseOver ? 4:5], PE_ArrowDown, opts); @@ -2547,13 +3434,13 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & } } - QRect checkRect(r.x()+1, r.y()+1, QTC_CHECK_SIZE, QTC_CHECK_SIZE); - drawPrimitive(PE_Indicator, p, checkRect, cg, flags|QTC_LISTVIEW_ITEM); + QRect checkRect(r.x()+1, r.y()+1, opts.crSize, opts.crSize); + drawPrimitive(PE_Indicator, p, checkRect, cg, flags|LISTVIEW_ITEM); } break; } case PE_IndicatorMask: - if(QTC_ROUNDED) + if(ROUNDED) { p->fillRect(r, color0); p->fillRect(r.x()+1, r.y(), r.width()-2, r.height(), color1); @@ -2566,38 +3453,95 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & break; case PE_Indicator: { - bool on(flags&Style_On || !(flags&Style_Off)); + bool doEtch(DO_EFFECT && !itsFormMode && !(flags&LISTVIEW_ITEM)), + on(flags&Style_On || !(flags&Style_Off)), + sunken(flags&Style_Down); + QRect rect(doEtch ? QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2) : r); SFlags sflags(!(flags&Style_Off) ? flags|Style_On : flags); - if(!itsFormMode && sflags&Style_MouseOver && HOVER_NONE==itsHover) - sflags-=Style_MouseOver; + if(sunken || (!itsFormMode && HOVER_NONE==itsHover)) + sflags&=~Style_MouseOver; - const QColor *bc(borderColors(sflags, NULL)), - *btn(buttonColors(cg)), + bool glowFocus(USE_GLOW_FOCUS(flags&Style_MouseOver) && sflags&Style_Enabled && sflags&Style_HasFocus), + glow(doEtch && sflags&Style_Enabled && ((MO_GLOW==opts.coloredMouseOver && sflags&Style_MouseOver) || glowFocus)); + const QColor *bc(glowFocus ? itsFocusCols : borderColors(sflags, 0L)), + *btn(checkRadioColors(cg, sflags)), *use(bc ? bc : btn), - &bgnd(sflags&Style_Enabled - ? sflags&Style_MouseOver - ? use[QTC_CR_MO_FILL] - : cg.base() - : cg.background()); + &bgnd(opts.crButton + ? getFill(flags, btn, true) + : sflags&Style_Enabled && !sunken + ? MO_NONE==opts.coloredMouseOver && !opts.crHighlight && sflags&Style_MouseOver + ? use[CR_MO_FILL] + : cg.base() + : cg.background()); + EWidget wid=opts.crButton ? WIDGET_STD_BUTTON : WIDGET_TROUGH; + EAppearance app=opts.crButton ? opts.appearance : APPEARANCE_INVERTED; + bool drawSunken=opts.crButton ? sunken : false, + lightBorder=DRAW_LIGHT_BORDER(drawSunken, wid, app), + draw3dFull=!lightBorder && DRAW_3D_FULL_BORDER(drawSunken, app), + draw3d=draw3dFull || (!lightBorder && DRAW_3D_BORDER(drawSunken, app)), + drawLight=opts.crButton && !drawSunken && (lightBorder || draw3d), + drawDark=drawLight && draw3dFull && !lightBorder; + + if(IS_FLAT(opts.appearance)) + p->fillRect(QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.height()-2), bgnd); + else + drawBevelGradient(bgnd, p, QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.height()-2), true, + drawSunken, app, wid); + + if(MO_NONE!=opts.coloredMouseOver && !glow && sflags&Style_MouseOver && sflags&Style_Enabled) + { + p->setPen(use[CR_MO_FILL]); + p->drawRect(QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.height()-2)); + // p->drawRect(QRect(rect.x()+2, rect.y()+2, rect.width()-4, rect.height()-4)); + } + else if(!opts.crButton || drawLight) + { + p->setPen(drawLight ? btn[LIGHT_BORDER(app)] : midColor(sflags&Style_Enabled ? cg.base() : cg.background(), use[3])); + if(lightBorder) + p->drawRect(QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.height()-2)); + else + { + p->drawLine(rect.x()+1, rect.y()+1, rect.x()+1, rect.y()+rect.height()-2); + p->drawLine(rect.x()+1, rect.y()+1, rect.x()+rect.width()-2, rect.y()+1); - if(IS_FLAT(opts.appearance)) - p->fillRect(QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2), bgnd); - else - drawBevelGradient(bgnd, false, p, QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2), true, - getWidgetShade(WIDGET_TROUGH, true, false, APPEARANCE_GRADIENT), - getWidgetShade(WIDGET_TROUGH, false, false, APPEARANCE_GRADIENT), - false, APPEARANCE_GRADIENT, WIDGET_TROUGH); + if(drawDark) + { + p->setPen(btn[2]); + p->drawLine(rect.x()+rect.width()-2, rect.y()+1, + rect.x()+rect.width()-2, rect.y()+rect.height()-2); + p->drawLine(rect.x()+1, rect.y()+rect.height()-2, + rect.x()+rect.width()-2, rect.y()+rect.height()-2); + } + } + } - p->setPen(midColor(sflags&Style_Enabled ? cg.base() : cg.background(), use[3])); - p->drawLine(r.x()+1, r.y()+1, r.x()+1, r.y()+r.height()-2); - p->drawLine(r.x()+1, r.y()+1, r.x()+r.width()-2, r.y()+1); + drawBorder(cg.background(), p, rect, cg, (SFlags)(sflags|Style_Horizontal|CHECK_BUTTON), + ROUNDED_ALL, use, WIDGET_OTHER, !(flags&LISTVIEW_ITEM)); - drawBorder(cg.background(), p, r, cg, (SFlags)(sflags|Style_Horizontal|QTC_CHECK_BUTTON), - ROUNDED_ALL, use, WIDGET_OTHER, !(flags&QTC_LISTVIEW_ITEM)); + if(doEtch) + { + QColor topCol(glow + ? glowFocus ? itsFocusCols[GLOW_MO] : itsMouseOverCols[GLOW_MO] + : shade(cg.background(), ETCHED_DARK)), + botCol(glow + ? topCol + : itsBackgroundCols[1]); + + p->setBrush(Qt::NoBrush); + p->setPen(topCol); + if(!opts.crButton || EFFECT_SHADOW!=opts.buttonEffect || drawSunken || glow) + { + p->drawLine(r.x()+1, r.y(), r.x()+r.width()-2, r.y()); + p->drawLine(r.x(), r.y()+1, r.x(), r.y()+r.height()-2); + p->setPen(botCol); + } + p->drawLine(r.x()+1, r.y()+r.height()-1, r.x()+r.width()-2, r.y()+r.height()-1); + p->drawLine(r.x()+r.width()-1, r.y()+1, r.x()+r.width()-1, r.y()+r.height()-2); + } if(on) - drawPrimitive(PE_CheckMark, p, r, cg, flags); + drawPrimitive(PE_CheckMark, p, rect, cg, flags); break; } case PE_CheckListExclusiveIndicator: @@ -2606,16 +3550,13 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(item) { - const QColor *bc(borderColors(flags, NULL)), + const QColor *bc(borderColors(flags, 0L)), *btn(buttonColors(cg)), *use(bc ? bc : btn), - &on(flags&Style_Enabled - ? itsCheckRadioCol - : cg.mid()); - + &on(checkRadioCol(flags, cg)); int x(r.x()), y(r.y()+2); - p->drawPixmap(x, y, *getPixmap(use[opts.coloredMouseOver && flags&Style_MouseOver ? 4 : QT_BORDER(flags&Style_Enabled)], + p->drawPixmap(x, y, *getPixmap(use[opts.coloredMouseOver && flags&Style_MouseOver ? 4 : BORDER_VAL(flags&Style_Enabled)], PIX_RADIO_BORDER, 0.8)); if(flags&Style_On) @@ -2625,9 +3566,6 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & } case PE_ExclusiveIndicator: case PE_ExclusiveIndicatorMask: - { - int x(r.x()), y(r.y()); - if(PE_ExclusiveIndicatorMask==pe) { p->fillRect(r, color0); @@ -2637,6 +3575,11 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & } else { + bool doEtch(DO_EFFECT && !itsFormMode), + sunken(flags&Style_Down); + QRect rect(doEtch ? QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2) : r); + int x(rect.x()), y(rect.y()); + QPointArray clipRegion; clipRegion.setPoints(8, x, y+8, x, y+4, x+4, y, x+8, y, @@ -2644,56 +3587,114 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & SFlags sflags(flags); - if(!itsFormMode && sflags&Style_MouseOver && HOVER_NONE==itsHover) - sflags-=Style_MouseOver; - - const QColor *bc(borderColors(sflags, NULL)), - *btn(buttonColors(cg)), + if(sunken || (!itsFormMode && HOVER_NONE==itsHover)) + sflags&=~Style_MouseOver; + + bool glowFocus(USE_GLOW_FOCUS(flags&Style_MouseOver) && sflags&Style_Enabled && sflags&Style_HasFocus), + glow(doEtch && sflags&Style_Enabled && ((MO_GLOW==opts.coloredMouseOver && sflags&Style_MouseOver) || + glowFocus)), + set(sflags&Style_On), + coloredMo(MO_NONE!=opts.coloredMouseOver && !glow && + sflags&Style_MouseOver && sflags&Style_Enabled); + const QColor *bc(glowFocus ? itsFocusCols : borderColors(sflags, 0L)), + *btn(checkRadioColors(cg, sflags)), *use(bc ? bc : btn); - const QColor &on(sflags&Style_Enabled - ? sflags&Style_Selected && !(flags&QTC_LISTVIEW_ITEM) - ? cg.highlightedText() - : itsCheckRadioCol - : cg.mid()), - &bgnd(sflags&Style_Enabled - ? sflags&Style_MouseOver - ? use[QTC_CR_MO_FILL] - : cg.base() - : cg.background()); - bool set(sflags&Style_On); + const QColor &on(checkRadioCol(flags, cg)), + &bgnd(opts.crButton + ? getFill(flags, btn, true) + : sflags&Style_Enabled && !sunken + ? MO_NONE==opts.coloredMouseOver && !opts.crHighlight && sflags&Style_MouseOver + ? use[CR_MO_FILL] + : cg.base() + : cg.background()); + EWidget wid=opts.crButton ? WIDGET_STD_BUTTON : WIDGET_TROUGH; + EAppearance app=opts.crButton ? opts.appearance : APPEARANCE_INVERTED; + bool drawSunken=opts.crButton ? sunken : EFFECT_NONE!=opts.buttonEffect, + lightBorder=DRAW_LIGHT_BORDER(drawSunken, wid, app), + draw3d=!lightBorder && + (DRAW_3D_BORDER(drawSunken, app) || DRAW_3D_FULL_BORDER(drawSunken, app)), + drawLight=opts.crButton && !drawSunken && (lightBorder || draw3d), + doneShadow=false; p->save(); - p->fillRect(r, cg.background()); + + if(opts.crHighlight && sflags&Style_MouseOver) + drawBevelGradient(shade(cg.background(), TO_FACTOR(opts.crHighlight)), p, r, true, + false, opts.selectionAppearance, WIDGET_SELECTION); + else + p->fillRect(r, cg.background()); + + if(doEtch && !glow && opts.crButton && !drawSunken && EFFECT_SHADOW==opts.buttonEffect) + { + p->setBrush(Qt::NoBrush); + p->setPen(shade(cg.background(), ETCHED_DARK)); + p->drawArc(QRect(r.x(), r.y(), opts.crSize, opts.crSize), 225*16, 180*16); + doneShadow=true; + } p->setClipRegion(QRegion(clipRegion)); if(IS_FLAT(opts.appearance)) - p->fillRect(QRect(x+1, y+1, r.width()-2, r.height()-2), bgnd); + p->fillRect(QRect(x+1, y+1, rect.width()-2, rect.height()-2), bgnd); else - drawBevelGradient(bgnd, false, p, QRect(x+1, y+1, r.width()-2, r.height()-2), true, - getWidgetShade(WIDGET_TROUGH, true, false, APPEARANCE_GRADIENT), - getWidgetShade(WIDGET_TROUGH, false, false, APPEARANCE_GRADIENT), - false, APPEARANCE_GRADIENT, WIDGET_TROUGH); + drawBevelGradient(bgnd, p, QRect(x+1, y+1, rect.width()-2, rect.height()-2), true, + drawSunken, app, wid); + + if(coloredMo) + { + p->setPen(use[CR_MO_FILL]); + p->drawArc(QRect(x+1, y+1, opts.crSize-2, opts.crSize-2), 0, 360*16); +// p->drawArc(QRect(x+2, y+2, opts.crSize-4, opts.crSize-4), 0, 360*16); +// p->drawArc(QRect(x+3, y+3, opts.crSize-6, opts.crSize-6), 0, 360*16); + p->drawPoint(x+2, y+4); + p->drawPoint(x+4, y+2); + p->drawPoint(x+8, y+2); + p->drawPoint(x+10, y+4); + p->drawPoint(x+2, y+8); + p->drawPoint(x+4, y+10); + p->drawPoint(x+8, y+10); + p->drawPoint(x+10, y+8); + } p->setClipping(false); - p->drawPixmap(r.x(), r.y(), - *getPixmap(use[opts.coloredMouseOver && sflags&Style_MouseOver ? 4 : QT_BORDER(flags&Style_Enabled)], - PIX_RADIO_BORDER, 0.8)); + if(doEtch && !doneShadow) + { + QColor topCol(glow + ? glowFocus ? itsFocusCols[GLOW_MO] : itsMouseOverCols[GLOW_MO] + : shade(cg.background(), ETCHED_DARK)), + botCol(glow + ? topCol + : itsBackgroundCols[1]); + + p->setBrush(Qt::NoBrush); + p->setPen(topCol); + if(drawSunken || glow) + { + p->drawArc(QRect(r.x(), r.y(), opts.crSize, opts.crSize), 45*16, 180*16); + p->setPen(botCol); + } + p->drawArc(QRect(r.x(), r.y(), opts.crSize, opts.crSize), 225*16, 180*16); + } + + p->drawPixmap(rect.x(), rect.y(), + *getPixmap(use[BORDER_VAL(flags&Style_Enabled)], PIX_RADIO_BORDER, 0.8)); if(QApplication::NormalColor!=QApplication::colorSpec() || itsFormMode) { - p->setPen(QPen(use[opts.coloredMouseOver && sflags&Style_MouseOver ? 4 : QT_BORDER(flags&Style_Enabled)], 1)); - p->drawArc(r, 0, 5760); + p->setPen(QPen(use[opts.coloredMouseOver && sflags&Style_MouseOver ? 4 : BORDER_VAL(flags&Style_Enabled)], 1)); + p->drawArc(rect, 0, 5760); } if(set) - p->drawPixmap(r.x(), r.y(), *getPixmap(on, PIX_RADIO_ON, 1.0)); - if(QApplication::NormalColor==QApplication::colorSpec() || itsFormMode) - p->drawPixmap(r.x(), r.y(), *getPixmap(btn[sflags&Style_MouseOver ? 3 : 4], PIX_RADIO_LIGHT)); + p->drawPixmap(rect.x(), rect.y(), *getPixmap(on, PIX_RADIO_ON, 1.0)); + if(!coloredMo && (!opts.crButton || drawLight) && (QApplication::NormalColor==QApplication::colorSpec() || itsFormMode)) + p->drawPixmap(rect.x(), rect.y(), + *getPixmap(btn[drawLight ? LIGHT_BORDER(app) + : (sflags&Style_MouseOver ? 3 : 4)], + lightBorder ? PIX_RADIO_INNER : PIX_RADIO_LIGHT)); p->restore(); } break; - } case PE_DockWindowSeparator: { QRect r2(r); @@ -2732,12 +3733,21 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & } } break; + case LINE_1DOT: + drawDot(p, r, itsBackgroundCols); + break; default: case LINE_DOTS: drawDots(p, r, !(flags & Style_Horizontal), 1, 5, itsBackgroundCols, 0, 5); } break; } + case PE_DockWindowResizeHandle: + if(flags&Style_Horizontal) + flags-=Style_Horizontal; + else + flags+=Style_Horizontal; + // Fall through intentional case PE_Splitter: { if(itsHoverWidget && itsHoverWidget == p->device()) @@ -2746,66 +3756,110 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & const QColor *use(buttonColors(cg)); const QColor *border(borderColors(flags, use)); - p->fillRect(r, QColor(flags&Style_MouseOver - ? shade(cg.background(), opts.highlightFactor) - : cg.background())); + QColor color(cg.background()); + + if(0!=opts.tabBgnd && p->device() && inStackWidget(dynamic_cast(p->device()))) + color=shade(color, TO_FACTOR(opts.tabBgnd)); + + if(flags&Style_MouseOver && opts.splitterHighlight) + drawBevelGradient(shade(cg.background(), TO_FACTOR(opts.splitterHighlight)), p, r, !(flags&Style_Horizontal), + false, opts.selectionAppearance, WIDGET_SELECTION); + else + p->fillRect(r, color); + switch(opts.splitters) { + case LINE_NONE: + break; default: + case LINE_1DOT: + drawDot(p, r, border); + break; case LINE_DOTS: drawDots(p, r, flags&Style_Horizontal, NUM_SPLITTER_DASHES, 1, border, 0, 5); break; - case LINE_SUNKEN: - drawLines(p, r, flags&Style_Horizontal, NUM_SPLITTER_DASHES, 1, border, 0, 3); - break; case LINE_FLAT: - drawLines(p, r, flags&Style_Horizontal, NUM_SPLITTER_DASHES, 3, border, 0, 3, 0, false); - break; + case LINE_SUNKEN: case LINE_DASHES: - drawLines(p, r, flags&Style_Horizontal, NUM_SPLITTER_DASHES, 1, border, 0, 3, 0); + drawLines(p, r, flags&Style_Horizontal, NUM_SPLITTER_DASHES, 3, border, 0, 3, opts.splitters); } break; } - case PE_DockWindowResizeHandle: - { - const QColor *use(backgroundColors(cg)); - - drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), - ROUNDED_ALL, use, WIDGET_OTHER, true, BORDER_RAISED, false); - break; - } case PE_GroupBoxFrame: case PE_PanelGroupBox: - if (!opts.framelessGroupBoxes) + if(FRAME_LINE==opts.groupBox) + { + QRect r2(r); + if(p && p->device() && dynamic_cast(p->device()) && + (!((QGroupBox *)(p->device()))->title().isEmpty() || ((QGroupBox *)(p->device()))->isCheckable())) + r2.addCoords(8, 0, -8, 0); + p->setPen(backgroundColors(cg)[STD_BORDER]); + p->drawLine(r2.x(), r2.y(), r2.x()+r2.width()-1, r2.y()); + } + else if (FRAME_NONE!=opts.groupBox) if(APP_OPENOFFICE==itsThemedApp || data.lineWidth()>0 || data.isDefault()) { const QColor *use(backgroundColors(cg)); drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), - ROUNDED_ALL, use, WIDGET_OTHER, true, BORDER_FLAT); + opts.square&SQUARE_FRAME ? ROUNDED_NONE : ROUNDED_ALL, use, WIDGET_OTHER, true, BORDER_FLAT); } else QCommonStyle::drawPrimitive(pe, p, r, cg, flags, data); break; - case PE_Panel: case PE_WindowFrame: + if(data.lineWidth()>0 || data.isDefault()) + drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), + ROUNDED_NONE, backgroundColors(cg), WIDGET_MDI_WINDOW, true, BORDER_RAISED, false); + break; + case PE_Panel: + if((APP_KICKER==itsThemedApp && data.isDefault()) || + dynamic_cast(p->device())) + break; + if(APP_OPENOFFICE==itsThemedApp || data.lineWidth()>0 || data.isDefault()) { - const QColor *use( -#ifdef QTC_HIGHLIGHT_SCROLVIEWS - flags&Style_HasFocus ? itsMenuitemCols : -#endif + const QWidget *widget=p && p->device() ? dynamic_cast(p->device()) : 0L; + bool sv(widget && ::qt_cast(widget)), + square((opts.square&SQUARE_SCROLLVIEW) && + (sv || + (widget && widget->parentWidget() && ::qt_cast(widget) && + widget->parentWidget()->inherits("KateView")))); + const QColor *use(opts.highlightScrollViews && /*!square &&*/ flags&Style_HasFocus ? itsHighlightCols : backgroundColors(cg)); - itsFormMode=itsIsTransKicker; - drawBorder(cg.background(), p, r, cg, - (SFlags)(flags|Style_Horizontal|Style_Enabled), - ROUNDED_ALL, use, WIDGET_OTHER, APP_KICKER!=itsThemedApp, itsIsTransKicker - ? BORDER_FLAT - : flags&Style_Sunken - ? BORDER_SUNKEN - : BORDER_RAISED); - itsFormMode=false; +// if(square) +// { +// p->setPen(use[STD_BORDER]); +// p->drawLine(r.bottomLeft(), r.topLeft()); +// p->drawLine(r.topLeft(), r.topRight()); +// if(!opts.gtkScrollViews) +// p->setPen(use[STD_BORDER_BR]); +// p->drawLine(r.topRight(), r.bottomRight()); +// p->drawLine(r.bottomRight(), r.bottomLeft()); +// } +// else + { + itsFormMode=itsIsTransKicker; + if(sv && !opts.highlightScrollViews) + flags&=~Style_HasFocus; + if(sv && opts.etchEntry && ((QFrame *)widget)->lineWidth()>2) + { + drawEntryField(p, r, cg, flags, flags&Style_Enabled + ? /*flags&Style_MouseOver + ? ENTRY_MOUSE_OVER + :*/ flags&Style_HasFocus + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, square ? ROUNDED_NONE : ROUNDED_ALL, WIDGET_SCROLLVIEW); + } + else + drawBorder(cg.background(), p, r, cg, + (SFlags)(flags|Style_Horizontal|Style_Enabled), + square ? ROUNDED_NONE : ROUNDED_ALL, use, sv ? WIDGET_SCROLLVIEW : WIDGET_OTHER, APP_KICKER!=itsThemedApp, + itsIsTransKicker ? BORDER_FLAT : (flags&Style_Sunken ? BORDER_SUNKEN : BORDER_RAISED) ); + itsFormMode=false; + } } else QCommonStyle::drawPrimitive(pe, p, r, cg, flags, data); @@ -2815,20 +3869,23 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & const QColor *use(backgroundColors(cg)); drawBorder(cg.background(), p, r, cg, - (SFlags)(flags|Style_Horizontal|Style_Enabled), - ROUNDED_ALL, use, WIDGET_OTHER, true, BORDER_RAISED, false); + (SFlags)(flags|Style_Horizontal|Style_Enabled), + opts.square&SQUARE_TAB_FRAME ? ROUNDED_NONE : ROUNDED_ALL, use, WIDGET_OTHER, true, + opts.borderTab ? BORDER_LIGHT : BORDER_RAISED, false); break; } case PE_PanelPopup: { const QColor *use(backgroundColors(cg)); - p->setPen(use[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->setBrush(NoBrush); p->drawRect(r); - if(opts.lighterPopupMenuBgnd) + if(!IS_FLAT_BGND(opts.menuBgndAppearance)) + ; + else if(USE_LIGHTER_POPUP_MENU) { - p->setPen(/*opts.lighterPopupMenuBgnd ? */itsLighterPopupMenuBgndCol/* : cg.background()*/); + p->setPen(/*USE_LIGHTER_POPUP_MENU ? */itsLighterPopupMenuBgndCol/* : cg.background()*/); p->drawRect(QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2)); } else @@ -2836,7 +3893,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & p->setPen(use[0]); p->drawLine(r.x()+1, r.y()+1, r.x()+r.width()-2, r.y()+1); p->drawLine(r.x()+1, r.y()+1, r.x()+1, r.y()+r.height()-2); - p->setPen(use[QT_FRAME_DARK_SHADOW]); + p->setPen(use[FRAME_DARK_SHADOW]); p->drawLine(r.x()+1, r.y()+r.height()-2, r.x()+r.width()-2, r.y()+r.height()-2); p->drawLine(r.x()+r.width()-2, r.y()+1, r.x()+r.width()-2, r.y()+r.height()-2); } @@ -2849,7 +3906,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(data.isDefault() || data.lineWidth()>1) { - p->setPen(use[QT_STD_BORDER]); + p->setPen(use[STD_BORDER]); p->setBrush(NoBrush); p->drawRect(r); qDrawShadePanel(p, r.x()+1, r.y()+1, r.width()-2, r.height()-2, @@ -2890,8 +3947,8 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(TB_NONE!=opts.toolbarBorders) { - const QColor *use=PE_PanelMenuBar==pe && itsActive - ? itsMenubarCols + const QColor *use=PE_PanelMenuBar==pe + ? menuColors(cg, itsActive) : backgroundColors(cg.background()); bool dark(TB_DARK==opts.toolbarBorders || TB_DARK_ALL==opts.toolbarBorders); @@ -2929,7 +3986,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { QRect br(r), ar(r); - const QColor *use(itsButtonCols); // buttonColors(cg)); + const QColor *use(flags&Style_Enabled ? itsButtonCols : itsBackgroundCols); // buttonColors(cg)); pe=flags&Style_Horizontal ? PE_ScrollBarAddLine==pe ? PE_ArrowRight : PE_ArrowLeft @@ -2940,7 +3997,7 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & PE_ArrowDown==pe ? ROUNDED_BOTTOM : PE_ArrowUp==pe ? ROUNDED_TOP : ROUNDED_NONE; - if(flags&Style_Down) + if(flags&Style_Down && !opts.flatSbarButtons) ar.addCoords(1, 1, 1, 1); switch(opts.scrollbarType) @@ -2954,13 +4011,15 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { round=ROUNDED_NONE; br.addCoords(0, 0, 1, 0); - ar.addCoords(1, 0, 1, 0); + if(opts.flatSbarButtons || !opts.vArrows) + ar.addCoords(1, 0, 1, 0); } else if(PE_ArrowUp==pe && r.y()>3) { round=ROUNDED_NONE; br.addCoords(0, 0, 0, 1); - ar.addCoords(0, 1, 0, 1); + if(opts.flatSbarButtons || !opts.vArrows) + ar.addCoords(0, 1, 0, 1); } break; case SCROLLBAR_NEXT: @@ -2968,20 +4027,32 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { round=ROUNDED_NONE; br.addCoords(-1, 0, 0, 0); - ar.addCoords(-1, 0, 0, -1); + if(opts.flatSbarButtons || !opts.vArrows) + ar.addCoords(-1, 0, 0, -1); } else if(PE_ArrowDown==pe) { round=ROUNDED_NONE; br.addCoords(0, -1, 0, 0); - ar.addCoords(0, -1, 0, -1); + if(opts.flatSbarButtons || !opts.vArrows) + ar.addCoords(0, -1, 0, -1); } break; } - drawLightBevel(p, br, cg, flags|Style_Raised, - round, getFill(flags, use), use, true, true, WIDGET_SB_BUTTON); + if(!opts.flatSbarButtons) +// No need to draw background here - drawn in CC_ScrollBar +// { +// if(!IS_FLAT(opts.sbarBgndAppearance) && SCROLLBAR_NONE!=opts.scrollbarType) +// drawBevelGradient(itsBackgroundCols[ORIGINAL_SHADE], p, r, flags&Style_Horizontal, false, +// opts.sbarBgndAppearance, WIDGET_SB_BGND); +// else +// p->fillRect(br, itsBackgroundCols[ORIGINAL_SHADE]); +// } +// else + drawLightBevel(p, br, cg, flags|Style_Raised, + round, getFill(flags, use), use, true, true, WIDGET_SB_BUTTON); - drawPrimitive(pe, p, ar, cg, flags); + ::drawArrow(p, ar, MO_ARROW(cg.buttonText()), pe, opts, false); break; } case PE_ScrollBarSlider: @@ -3013,40 +4084,51 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { //p->fillRect(r, Qt::black); drawMenuItem(p, r, cg, false, ROUNDED_ALL, - opts.lighterPopupMenuBgnd ? itsLighterPopupMenuBgndCol - : itsBackgroundCols[ORIGINAL_SHADE], itsMenuitemCols); + USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol + : itsBackgroundCols[ORIGINAL_SHADE], itsHighlightCols); item->paintContents(p); break; } } } #endif -#ifndef QTC_PLAIN_FOCUS_ONLY - if(opts.stdFocus) + if(FOCUS_STANDARD==opts.focus) { -#endif p->setPen(Qt::black); p->drawWinFocusRect(r); -#ifndef QTC_PLAIN_FOCUS_ONLY } else { //Figuring out in what beast we are painting... - const QColor *use(backgroundColors(cg)); - QWidget *widget(dynamic_cast(p->device())); + QWidget *widget(dynamic_cast(p->device())); + bool view(widget && (dynamic_cast(widget->parent()) || + dynamic_cast(widget->parent()))); - if(r.width()<4 || r.height()<4 || - (widget && (dynamic_cast(widget->parent()) || - dynamic_cast(widget->parent())))) + if(widget && FOCUS_GLOW==opts.focus && + (dynamic_cast(widget) || dynamic_cast(widget))) + return; + + if(FOCUS_LINE==opts.focus) + { + p->setPen(view && flags&Style_Selected + ? cg.highlightedText() + : itsFocusCols[FOCUS_SHADE(flags&Style_Selected)]); + p->drawLine(r.x(), r.y()+r.height()-1, r.x()+r.width()-1, r.y()+r.height()-1); + } + else if(r.width()<4 || r.height()<4 || view) { - p->setPen(use[QT_FOCUS]); - p->drawRect(r); +// QRect r2(r); + p->setPen(view ? (flags&Style_Selected ? cg.highlightedText() : cg.text()) + : itsFocusCols[FOCUS_SHADE(flags&Style_Selected)]); +// if(view) +// r2.addCoords(0, 0, 0, -2); + p->drawRect(r); // r2); } else drawBorder(cg.background(), p, r, cg, Style_Horizontal, - ROUNDED_ALL, use, WIDGET_OTHER, false, BORDER_FLAT, true, QT_FOCUS); + ROUNDED_ALL, itsFocusCols, WIDGET_FOCUS, false, BORDER_FLAT, true, + FOCUS_SHADE(flags&Style_Selected)); } -#endif break; case PE_ArrowUp: case PE_ArrowDown: @@ -3061,45 +4143,32 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & { QRect sr(r); const QColor *use(buttonColors(cg)); - bool reverse(QApplication::reverseLayout()), - doEtch(!itsFormMode && QTC_DO_EFFECT); - - if(doEtch) - if(PE_SpinWidgetDown==pe || PE_SpinWidgetMinus==pe) - sr.addCoords(0, 0, 0, -1); - else - sr.addCoords(0, 1, 0, 0); - - drawLightBevel(p, sr, cg, flags|Style_Horizontal, PE_SpinWidgetDown==pe || PE_SpinWidgetMinus==pe - ? reverse - ? ROUNDED_BOTTOMLEFT - : ROUNDED_BOTTOMRIGHT - : reverse - ? ROUNDED_TOPLEFT - : ROUNDED_TOPRIGHT, - getFill(flags, use), use, true, true, WIDGET_SPIN); - - if(doEtch) - { - QRect er(r); - p->setClipRegion(er); - if(reverse) - er.addCoords(0, 0, 2, 0); - else - er.addCoords(-2, 0, 0, 0); - drawEtch(p, er, cg, PE_SpinWidgetUp==pe || PE_SpinWidgetPlus==pe, - PE_SpinWidgetDown==pe || PE_SpinWidgetMinus==pe); - p->setClipping(false); - } + bool reverse(QApplication::reverseLayout()); + + if((!opts.unifySpinBtns || flags&Style_Sunken) && !opts.unifySpin) + drawLightBevel(p, sr, cg, flags|Style_Horizontal, PE_SpinWidgetDown==pe || PE_SpinWidgetMinus==pe + ? reverse + ? ROUNDED_BOTTOMLEFT + : ROUNDED_BOTTOMRIGHT + : reverse + ? ROUNDED_TOPLEFT + : ROUNDED_TOPRIGHT, + getFill(flags, use), use, true, true, WIDGET_SPIN); if(PE_SpinWidgetUp==pe || PE_SpinWidgetDown==pe) { sr.setY(sr.y()+(PE_SpinWidgetDown==pe ? -2 : 1)); - if(flags&Style_Sunken) + if(opts.unifySpin) + { + sr.addCoords(reverse ? 1 : -1, 0, reverse ? 1 : -1, 0); + if(!opts.vArrows) + sr.setY(sr.y()+(PE_SpinWidgetDown==pe ? -2 : 2)); + } + else if(flags&Style_Sunken) sr.addCoords(1, 1, 1, 1); - drawArrow(p, sr, cg, flags, PE_SpinWidgetUp==pe ? PE_ArrowUp : PE_ArrowDown, true); + ::drawArrow(p, sr, MO_ARROW(cg.buttonText()), PE_SpinWidgetUp==pe ? PE_ArrowUp : PE_ArrowDown, opts, !opts.unifySpin); } else { @@ -3110,10 +4179,10 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if(l%2 != 0) --l; - if(flags&Style_Sunken) + if(flags&Style_Sunken && !opts.unifySpin) c+=QPoint(1, 1); - p->setPen(cg.buttonText()); + p->setPen(MO_ARROW(cg.buttonText())); p->drawLine(c.x()-l, c.y(), c.x()+l, c.y()); if(PE_SpinWidgetPlus==pe) p->drawLine(c.x(), c.y()-l, c.x(), c.y()+l); @@ -3122,20 +4191,37 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & } case PE_PanelLineEdit: { + const QWidget *widget=p && p->device() ? dynamic_cast(p->device()) : 0L; + bool scrollView=widget && ::qt_cast(widget); + +// if((opts.square&SQUARE_SCROLLVIEW) && scrollView) +// { +// const QColor *use(backgroundColors(cg)); +// +// p->setPen(use[STD_BORDER]); +// p->drawLine(r.bottomLeft(), r.topLeft()); +// p->drawLine(r.topLeft(), r.topRight()); +// if(!opts.gtkScrollViews) +// p->setPen(use[STD_BORDER_BR]); +// p->drawLine(r.topRight(), r.bottomRight()); +// p->drawLine(r.bottomRight(), r.bottomLeft()); +// break; +// } + bool isReadOnly(false), isEnabled(true); // panel is highlighted by default if it has focus, but if we have access to the // widget itself we can try to avoid highlighting in case it's readOnly or disabled. - if (p->device() && dynamic_cast(p->device())) + if (!scrollView && widget && dynamic_cast(widget)) { - QLineEdit *lineEdit(dynamic_cast(p->device())); + const QLineEdit *lineEdit(dynamic_cast(widget)); isReadOnly = lineEdit->isReadOnly(); isEnabled = lineEdit->isEnabled(); if(flags&Style_Enabled && isReadOnly) flags-=Style_Enabled; } - + // HACK!! (From Plastik) // // In this place there is no reliable way to detect if we are in khtml; the @@ -3145,17 +4231,52 @@ void QtCurveStyle::drawPrimitive(PrimitiveElement pe, QPainter *p, const QRect & if (p->device() && dynamic_cast(p->device())) itsFormMode=true; - drawEntryField(p, r, cg, flags, !isReadOnly && isEnabled && (flags&Style_HasFocus), - ROUNDED_ALL); + if(scrollView && !opts.highlightScrollViews) + flags&=~Style_HasFocus; + + QRect r2(r); + r2.addCoords(1, 1, -1, -1); +// p->fillRect(r2, flags&Style_Enabled ? cg.base() : cg.background()); + drawEntryField(p, r, cg, flags, !isReadOnly && isEnabled + ? flags&Style_MouseOver && !scrollView + ? ENTRY_MOUSE_OVER + : flags&Style_HasFocus + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, + (opts.square&SQUARE_SCROLLVIEW) && scrollView ? ROUNDED_NONE : ROUNDED_ALL, + scrollView ? WIDGET_SCROLLVIEW : WIDGET_ENTRY); itsFormMode=false; break; } case PE_StatusBarSection: if(opts.drawStatusBarFrames) - KStyle::drawPrimitive(pe, p, r, cg, flags, data); + BASE_STYLE::drawPrimitive(pe, p, r, cg, flags, data); + break; + case PE_SizeGrip: + { + QPointArray a; + + if (QApplication::reverseLayout()) + { + a.setPoints(3, 0,0, SIZE_GRIP_SIZE,SIZE_GRIP_SIZE, 0,SIZE_GRIP_SIZE); + a.translate(r.x(), r.y()+(r.height()-SIZE_GRIP_SIZE)); + } + else + { + a.setPoints(3, SIZE_GRIP_SIZE,0, SIZE_GRIP_SIZE,SIZE_GRIP_SIZE, 0,SIZE_GRIP_SIZE); + a.translate(r.x()+(r.width()-SIZE_GRIP_SIZE), r.y()+(r.height()-SIZE_GRIP_SIZE)); + } + + p->save(); + p->setBrush(itsBackgroundCols[2]); + p->setPen(itsBackgroundCols[2]); + p->drawPolygon(a); + p->restore(); break; + } default: - KStyle::drawPrimitive(pe, p, r, cg, flags, data); + BASE_STYLE::drawPrimitive(pe, p, r, cg, flags, data); } } @@ -3187,42 +4308,66 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q { case KPE_ToolBarHandle: { - QRect r2(r); - r2.addCoords(-1, -1, 2, 2); - drawMenuOrToolBarBackground(p, r2, cg, false, flags&Style_Horizontal); + if(APPEARANCE_STRIPED!=opts.bgndAppearance) + { + QRect r2(r); + r2.addCoords(-1, -1, 2, 2); + drawMenuOrToolBarBackground(p, r2, cg, false, flags&Style_Horizontal); + } drawHandleMarkers(p, r, flags, true, handles); break; } case KPE_DockWindowHandle: { int x, y, w, h; + bool horizontal(flags & Style_Horizontal); r.rect(&x, &y, &w, &h); - if ((w <= 2) || (h <= 2)) - p->fillRect(r, cg.background().dark(105)); + + if(!IS_FLAT(opts.dwtAppearance)) + drawBevelGradient(cg.background(), p, r, horizontal, false, opts.dwtAppearance, WIDGET_DOCK_WIDGET_TITLE); else + p->fillRect(r, cg.background()); // .dark(DW_BGND)); +// p->setPen(itsBackgroundCols[STD_BORDER]); +// if(horizontal) +// p->drawLine(r.right(), r.top()-1, r.right(), r.bottom()); +// else +// p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); + + if (w > 2 && h > 2) { QWidget *wid(const_cast(widget)); - bool horizontal(flags & Style_Horizontal); + bool hasClose(dynamic_cast(wid->parentWidget()) && + ((QDockWindow *)(wid->parentWidget()))->area() && + ((QDockWindow *)(wid->parentWidget()))->isCloseEnabled()); QFont fnt(QApplication::font(wid)); QPixmap pix; QString title(wid->parentWidget()->caption()); QPainter p2; fnt.setPointSize(fnt.pointSize()-2); + if(hasClose) + if (horizontal) + h-=15; + else + w-=15; // Draw the item on an off-screen pixmap to preserve Xft antialiasing for // vertically oriented handles. if (horizontal) - pix.resize(h-2, w-2); + pix.resize(h, w); else - pix.resize(w-2, h-2); + pix.resize(w, h); p2.begin(&pix); - p2.fillRect(pix.rect(), cg.background().dark(105)); + p2.fillRect(pix.rect(), cg.background()); // .dark(DW_BGND)); + p2.setPen(itsBackgroundCols[STD_BORDER]); + p2.drawLine(pix.rect().left(), pix.rect().bottom(), pix.rect().right(), pix.rect().bottom()); p2.setPen(cg.text()); p2.setFont(fnt); - p2.drawText(pix.rect(), AlignCenter, + QRect textRect(pix.rect()); + textRect.addCoords(2, -3, -2, 0); + p2.drawText(textRect, AlignVCenter|(QApplication::reverseLayout() ? AlignRight : AlignLeft), elliditide(title, QFontMetrics(fnt), pix.width())); p2.end(); @@ -3232,10 +4377,10 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q m.rotate(-90.0); QPixmap vpix(pix.xForm(m)); - bitBlt(wid, r.x()+1, r.y()+1, &vpix); + bitBlt(wid, r.x(), r.y()+(hasClose ? 15 : 0), &vpix); } else - bitBlt(wid, r.x()+1, r.y()+1, &pix); + bitBlt(wid, r.x(), r.y(), &pix); } break; } @@ -3246,16 +4391,16 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q drawSliderGroove(p, r, cg, flags, widget); break; case KPE_SliderHandle: - drawSliderHandle(p, r, cg, flags, widget ? ::qt_cast(widget) : NULL); + drawSliderHandle(p, r, cg, flags, widget ? ::qt_cast(widget) : 0L); break; case KPE_ListViewExpander: { - QRect ar(r.x()+((r.width()-(QTC_LV_SIZE+4))>>1), r.y()+((r.height()-(QTC_LV_SIZE+4))>>1), QTC_LV_SIZE+4, - QTC_LV_SIZE+4); + QRect ar(r.x()+((r.width()-(LV_SIZE+4))>>1), r.y()+((r.height()-(LV_SIZE+4))>>1), LV_SIZE+4, + LV_SIZE+4); - if(opts.lvLines) + if(LV_OLD==opts.lvLines) { - int lo(QTC_ROUNDED ? 2 : 0); + int lo(ROUNDED ? 2 : 0); p->setPen(cg.mid()); p->drawLine(ar.x()+lo, ar.y(), (ar.x()+ar.width()-1)-lo, ar.y()); @@ -3265,7 +4410,7 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q p->drawLine(ar.x()+ar.width()-1, ar.y()+lo, ar.x()+ar.width()-1, (ar.y()+ar.height()-1)-lo); - if(QTC_ROUNDED) + if(ROUNDED) { p->drawPoint(ar.x()+1, ar.y()+1); p->drawPoint(ar.x()+1, ar.y()+ar.height()-2); @@ -3280,11 +4425,11 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q } } - drawArrow(p, ar, cg, flags|Style_Enabled, flags&Style_On // Collapsed = On + ::drawArrow(p, ar, flags&Style_Enabled ? cg.mid() : cg.text(), flags&Style_On // Collapsed = On ? QApplication::reverseLayout() ? PE_ArrowLeft : PE_ArrowRight - : PE_ArrowDown); + : PE_ArrowDown, opts); break; } case KPE_ListViewBranch: @@ -3302,7 +4447,7 @@ void QtCurveStyle::drawKStylePrimitive(KStylePrimitive kpe, QPainter *p, const Q } break; default: - KStyle::drawKStylePrimitive(kpe, p, widget, r, cg, flags, opt); + BASE_STYLE::drawKStylePrimitive(kpe, p, widget, r, cg, flags, opt); } } @@ -3319,7 +4464,8 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge { const QTabBar *tb((const QTabBar *)widget); int tabIndex(tb->indexOf(data.tab()->identifier())), - dark(APPEARANCE_FLAT==opts.appearance ? ORIGINAL_SHADE : QT_FRAME_DARK_SHADOW); + dark(APPEARANCE_FLAT==opts.appearance ? ORIGINAL_SHADE : FRAME_DARK_SHADOW), + moOffset(ROUNDED_NONE==opts.round || TAB_MO_TOP!=opts.tabMouseOver ? 1 : opts.round); bool cornerWidget(false), bottomCornerWidget(false), reverse(QApplication::reverseLayout()), @@ -3331,8 +4477,17 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge active(flags & Style_Selected), itsHover(itsHoverTab && itsHoverTab->isEnabled() && data.tab()==itsHoverTab && !(flags&Style_Selected) && - tb->currentTab()!=tabIndex); + tb->currentTab()!=tabIndex), + glowMo(!active && itsHover && opts.coloredMouseOver && TAB_MO_GLOW==opts.tabMouseOver); + int sizeAdjust(!active && TAB_MO_GLOW==opts.tabMouseOver ? 1 : 0); const QColor &fill(getTabFill(flags&Style_Selected, itsHover, itsBackgroundCols)); + EBorder borderProfile(active || opts.borderInactiveTab + ? opts.borderTab + ? BORDER_LIGHT + : opts.colorSelTab && active + ? BORDER_FLAT + : BORDER_RAISED + : BORDER_FLAT); if(reverse) { @@ -3356,6 +4511,17 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge QRect tr(r); bool top(QTabBar::TriangularAbove==tb->shape() || QTabBar::RoundedAbove==tb->shape()); + if(active && opts.tabBgnd) + { + QRect rx(tr); + + if(top) + rx.addCoords(1, 6, -1, 0); + else + rx.addCoords(1, 0, -1, -6); + p->fillRect(rx, shade(cg.background(), TO_FACTOR(opts.tabBgnd))); + } + if(!active) if(top) tr.addCoords(0, 2, 0, 0); @@ -3365,60 +4531,68 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge if(!firstTab && top && (APP_TORA==itsThemedApp || (APP_OPENOFFICE==itsThemedApp && !active))) tr.addCoords(-1, 0, 0, 0); - p->setClipRect(QRect(tr.x(), top ? tr.y() : tr.y()+2, tr.width(), top ? tr.height()-2 : tr.height()), + QRect glowTr(tr); + + if(!active && TAB_MO_GLOW==opts.tabMouseOver) + glowTr.addCoords(sizeAdjust, 0, -sizeAdjust, 0); + + p->setClipRect(QRect(tr.x(), top ? tr.y()-sizeAdjust : tr.y()+2, tr.width(), top ? tr.height()-2+(2*sizeAdjust) : tr.height()), QPainter::CoordPainter); - if(APPEARANCE_INVERTED==opts.appearance && active) - p->fillRect(tr, cg.background()); + + bool invertedSel=APPEARANCE_INVERTED==opts.appearance && active; + QColor col(invertedSel ? cg.background() : fill); + + if(opts.tabBgnd) + col=shade(col, TO_FACTOR(opts.tabBgnd)); + + if(invertedSel) + p->fillRect(glowTr, col); else - drawBevelGradient(fill, top, p, tr, true, - top || (active && opts.colorSelTab) ? SHADE_TAB_SEL_LIGHT - : SHADE_BOTTOM_TAB_SEL_DARK, - top || (active && opts.colorSelTab) ? SHADE_TAB_SEL_DARK - : SHADE_BOTTOM_TAB_SEL_LIGHT, - active, active ? QTC_SEL_TAB_APP : QTC_NORM_TAB_APP, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT); - - drawBorder(cg.background(), p, tr, cg, flags|Style_Horizontal|Style_Enabled, - active + drawBevelGradient(col, p, glowTr, true, + active, active ? SEL_TAB_APP : NORM_TAB_APP, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT); + + drawBorder(cg.background(), p, glowTr, cg, flags|Style_Horizontal|Style_Enabled, + active || TAB_MO_GLOW==opts.tabMouseOver || opts.roundAllTabs ? (top ? ROUNDED_TOP : ROUNDED_BOTTOM) : firstTab ? (top ? ROUNDED_TOPLEFT : ROUNDED_BOTTOMLEFT) : lastTab ? (top ? ROUNDED_TOPRIGHT : ROUNDED_BOTTOMRIGHT) - : ROUNDED_NONE, NULL, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, true, - active && !opts.colorSelTab ? BORDER_RAISED : BORDER_FLAT, false); + : ROUNDED_NONE, glowMo ? itsMouseOverCols : 0L, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, true, + borderProfile, false); + if(glowMo) + { + glowTr.addCoords(-1, -1, 1, 1); + drawGlow(p, glowTr, cg, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT); + } p->setClipping(false); if(top) { if(active) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawPoint(r.x(), r.y()+r.height()-2); p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-2); p->setPen(itsBackgroundCols[0]); p->drawLine(r.x()+1, r.y()+r.height()-3, r.x()+1, r.y()+r.height()-1); //p->drawPoint(r.x()+r.width()-2, r.y()+r.height()-1); - p->setPen(itsBackgroundCols[QT_FRAME_DARK_SHADOW]); + p->setPen(itsBackgroundCols[opts.borderTab ? 0 : FRAME_DARK_SHADOW]); p->drawPoint(r.x()+r.width()-2, r.y()+r.height()-2); } else { p->setPen(itsBackgroundCols[0]); p->drawLine(r.x(), r.y()+r.height()-1, r.x()+r.width()-1, r.y()+r.height()-1); - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawLine(r.x(), r.y()+r.height()-2, r.x()+r.width()-1, r.y()+r.height()-2); - if(opts.coloredMouseOver && itsHover) - { - p->setPen(itsMouseOverCols[ORIGINAL_SHADE]); - p->drawLine(tr.x()+(firstTab ? opts.round : 1), tr.y()+1, - tr.x()+tr.width()-((lastTab ? opts.round : 0)+1), tr.y()+1); - - p->setPen(itsMouseOverCols[QT_STD_BORDER]); - p->drawLine(tr.x()+(firstTab ? opts.round : 1), tr.y(), - tr.x()+tr.width()-((lastTab ? opts.round : 0)+1), tr.y()); - } + if(opts.coloredMouseOver && itsHover && TAB_MO_GLOW!=opts.tabMouseOver) + drawHighlight(p, QRect(tr.x()+(firstTab ? moOffset : 1), + tr.y()+(TAB_MO_TOP==opts.tabMouseOver ? 0 : tr.height()-3), + tr.width()-(firstTab || lastTab ? moOffset : 1), 2), + cg, true, !TAB_MO_TOP==opts.tabMouseOver); } if(((!reverse && firstTab) || (lastTab && reverse)) && !cornerWidget) @@ -3426,35 +4600,38 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge int x(reverse ? r.x()+r.width()-1 : r.x()), x2(reverse ? x-1 : x+1); - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[!active && TAB_MO_GLOW==opts.tabMouseOver && opts.round>ROUND_SLIGHT && !(opts.square&SQUARE_TAB_FRAME) + ? ORIGINAL_SHADE : STD_BORDER]); p->drawLine(x, r.y()+r.height()-1, x, r.height()-2); if(active) { p->setPen(itsBackgroundCols[reverse ? dark : 0]); - p->drawLine(x2, r.y()+r.height()-1, x2, r.height()-2); + p->drawLine(x2, r.y()+r.height()-1, x2, r.y()+r.height()-2); } } if(active && opts.highlightTab) { - p->setPen(itsMenuitemCols[0]); + p->setPen(itsHighlightCols[0]); p->drawLine(tr.left(), tr.top()+1, tr.right(), tr.top()+1); - p->setPen(midColor(fill, itsMenuitemCols[0], IS_FLAT(opts.tabAppearance) ? 1.0 : 1.2)); + p->setPen(midColor(fill, itsHighlightCols[0])); // , IS_FLAT(opts.activeTabAppearance) ? 1.0 : 1.2)); p->drawLine(tr.left(), tr.top()+2, tr.right(), tr.top()+2); p->setClipRect(QRect(tr.x(), tr.y(), tr.width(), 3), QPainter::CoordPainter); drawBorder(cg.background(), p, tr, cg, flags|Style_Horizontal|Style_Enabled, - ROUNDED_ALL, itsMenuitemCols, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, + ROUNDED_ALL, itsHighlightCols, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, true, BORDER_FLAT, false, 3); p->setClipping(false); } // Round top-left corner... - if(ROUND_FULL==opts.round && APP_TORA!=itsThemedApp && firstTab && !active && !cornerWidget && !reverse) // && !isFirstKTabCtlTab) + if(!(opts.square&SQUARE_TAB_FRAME) && FULLLY_ROUNDED && APP_TORA!=itsThemedApp && firstTab && !active && !cornerWidget && !reverse) // && !isFirstKTabCtlTab) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawPoint(r.x()+1, r.y()+r.height()-1); - p->setPen(midColor(itsBackgroundCols[QT_STD_BORDER], cg.background())); + p->setPen(TAB_MO_GLOW==opts.tabMouseOver + ? itsBackgroundCols[STD_BORDER] + : midColor(itsBackgroundCols[STD_BORDER], cg.background())); p->drawPoint(r.x()+1, r.y()+r.height()-2); } } @@ -3462,56 +4639,57 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge { if(active) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawPoint(r.x(), r.y()+1); p->drawPoint(r.x()+r.width()-1, r.y()+1); p->setPen(itsBackgroundCols[0]); p->drawLine(r.x()+1, r.y()+2, r.x()+1, r.y()); - p->setPen(itsBackgroundCols[QT_FRAME_DARK_SHADOW]); + p->setPen(itsBackgroundCols[opts.borderTab ? 0 : FRAME_DARK_SHADOW]); p->drawLine(r.x()+r.width()-2, r.y()+1, r.x()+r.width()-2, r.y()); p->drawPoint(r.x()+r.width()-1, r.y()); } else { - p->setPen(itsBackgroundCols[dark]); + p->setPen(itsBackgroundCols[opts.borderTab ? 0 : dark]); p->drawLine(r.x(), r.y(), r.x()+r.width()-1, r.y()); - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawLine(r.x(), r.y()+1, r.x()+r.width()-1, r.y()+1); - - if(opts.coloredMouseOver && itsHover) - { - p->setPen(itsMouseOverCols[ORIGINAL_SHADE]); - p->drawLine(tr.x()+(firstTab ? opts.round : 1), tr.y()+tr.height()-2, - tr.x()+tr.width()-((lastTab ? opts.round : 0)+1), tr.y()+tr.height()-2); - - p->setPen(itsMouseOverCols[3]); - p->drawLine(tr.x()+(firstTab ? opts.round : 1), tr.y()+tr.height()-1, - tr.x()+tr.width()-((lastTab ? opts.round : 0)+1), tr.y()+tr.height()-1); - } + + if(opts.coloredMouseOver && itsHover && TAB_MO_GLOW!=opts.tabMouseOver) + drawHighlight(p, QRect(tr.x()+(firstTab ? moOffset : 1), + tr.y()+(TAB_MO_TOP==opts.tabMouseOver ? tr.height()-2 : 1), + tr.width()-(firstTab || lastTab ? moOffset : 1), 2), + cg, true, TAB_MO_TOP==opts.tabMouseOver); } + if(TAB_MO_GLOW==opts.tabMouseOver && opts.round<=ROUND_SLIGHT && !(opts.square&SQUARE_TAB_FRAME) && !reverse && firstTab && !cornerWidget) + { + p->setPen(itsBackgroundCols[STD_BORDER]); + p->drawPoint(r.x(), r.y()); + } + if(active && opts.highlightTab) { - p->setPen(itsMenuitemCols[0]); + p->setPen(itsHighlightCols[0]); p->drawLine(tr.left(), tr.bottom()-1, tr.right(), tr.bottom()-1); - p->setPen(midColor(fill, itsMenuitemCols[0])); + p->setPen(midColor(fill, itsHighlightCols[0])); p->drawLine(tr.left(), tr.bottom()-2, tr.right(), tr.bottom()-2); p->setClipRect(QRect(tr.x(), tr.y()+r.height()-3, tr.width(), 3), QPainter::CoordPainter); drawBorder(cg.background(), p, tr, cg, flags|Style_Horizontal|Style_Enabled, - ROUNDED_ALL, itsMenuitemCols, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, + ROUNDED_ALL, itsHighlightCols, top ? WIDGET_TAB_TOP : WIDGET_TAB_BOT, true, BORDER_FLAT, false, 3); p->setClipping(false); } - if(ROUND_FULL==opts.round && APP_TORA!=itsThemedApp && firstTab && !bottomCornerWidget)// && !isFirstKTabCtlTab) + if(!(opts.square&SQUARE_TAB_FRAME) && FULLLY_ROUNDED && APP_TORA!=itsThemedApp && firstTab && !bottomCornerWidget)// && !isFirstKTabCtlTab) { - p->setPen(itsBackgroundCols[QT_STD_BORDER]); + p->setPen(itsBackgroundCols[STD_BORDER]); p->drawPoint(r.x(), reverse ? r.y()+r.width()-1 : r.y()); // Round bottom-left corner... if(!active&& !reverse) { p->drawPoint(r.x()+1, r.y()-1); - p->setPen(midColor(itsBackgroundCols[QT_STD_BORDER], cg.background())); + p->setPen(midColor(itsBackgroundCols[STD_BORDER], cg.background())); p->drawPoint(r.x()+1, r.y()); } } @@ -3583,7 +4761,7 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge #endif case CE_PushButtonLabel: // Taken from Highcolor and Plastik... { - int x, y, w, h; + int x, y, w, h, arrowOffset=DO_EFFECT ? 1 : 0; r.rect(&x, &y, &w, &h); @@ -3612,10 +4790,9 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge //the widget else { - drawPrimitive(PE_ArrowDown, p, - visualRect(QRect((x + w) - (dx + margin), y, dx, h), r), cg, - flags, data); - w-=dx; + ::drawArrow(p, visualRect(QRect((x + w) - (dx + margin + arrowOffset), y, dx, h), r), + MO_ARROW(cg.buttonText()), PE_ArrowDown, opts); + w-=(dx+arrowOffset); } } @@ -3656,8 +4833,8 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge } if (cornArrow) //Draw over the icon - drawPrimitive(PE_ArrowDown, p, visualRect(QRect(x + w - 6, x + h - 6, 7, 7), r), - cg, flags, data); + ::drawArrow(p, visualRect(QRect(x + w - (6+arrowOffset), y + h - (6+arrowOffset), 7, 7), r), + MO_ARROW(cg.buttonText()), PE_ArrowDown, opts); if(xo && iw) { @@ -3674,9 +4851,11 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge // Make the label indicate if the button is a default button or not int i, j(opts.embolden && button->isDefault() ? 2 : 1); - const QColor &textCol(!opts.stdSidebarButtons && button->isFlat() && - button->inherits("KMultiTabBarTab") && - (button->isOn() || flags&Style_On) + bool sidebar(!opts.stdSidebarButtons && + ((button->isFlat() && button->inherits("KMultiTabBarTab")) || + (button->parentWidget() && button->inherits("Ideal::Button") && + button->parentWidget()->inherits("Ideal::ButtonBar")))); + const QColor &textCol(sidebar && (button->isOn() || flags&Style_On) ? QApplication::palette().active().highlightedText() : button->colorGroup().buttonText()); @@ -3686,7 +4865,8 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge button->pixmap(), button->text(), -1, &textCol); // Draw a focus rect if the button has focus - if (flags & Style_HasFocus) + if (flags&Style_HasFocus && FOCUS_GLOW!=opts.focus && + !(flags&Style_MouseOver && FOCUS_FULL==opts.focus && MO_NONE!=opts.coloredMouseOver)) drawPrimitive(PE_FocusRect, p, visualRect(subRect(SR_PushButtonFocusRect, widget), widget), cg, flags); break; @@ -3701,34 +4881,46 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge int tab(data.tabWidth()), maxpmw(data.maxIconWidth()), x, y, w, h; + bool reverse(QApplication::reverseLayout()); + maxpmw=QMAX(maxpmw, constMenuPixmapWidth); r.rect(&x, &y, &w, &h); - if((flags & Style_Active)&&(flags & Style_Enabled)) - drawMenuItem(p, r, cg, false, ROUNDED_ALL, - opts.lighterPopupMenuBgnd ? itsLighterPopupMenuBgndCol - : itsBackgroundCols[ORIGINAL_SHADE], itsMenuitemCols); - else if(widget->erasePixmap() && !widget->erasePixmap()->isNull()) + if(widget->erasePixmap() && !widget->erasePixmap()->isNull()) p->drawPixmap(x, y, *widget->erasePixmap(), x, y, w, h); else - p->fillRect(r, opts.lighterPopupMenuBgnd ? itsLighterPopupMenuBgndCol - : itsBackgroundCols[ORIGINAL_SHADE]); + { + if(IS_FLAT_BGND(opts.menuBgndAppearance)) + p->fillRect(r, USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol + : itsBackgroundCols[ORIGINAL_SHADE]); + + if(opts.menuStripe) + drawBevelGradient(menuStripeCol(), p, + QRect(reverse ? r.right()-maxpmw : r.x(), + r.y(), maxpmw, r.height()), false, + false, opts.menuStripeAppearance, WIDGET_OTHER); + } + + if((flags&Style_Active) && (flags&Style_Enabled)) + drawMenuItem(p, r, flags, cg, false, ROUNDED_ALL, + USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol + : itsBackgroundCols[ORIGINAL_SHADE], + opts.useHighlightForMenu ? itsHighlightCols : itsBackgroundCols); if(!mi) break; if(mi->isSeparator()) { - y=r.y()+((r.height()/2)-1); - p->setPen(itsBackgroundCols[QT_STD_BORDER]); - p->drawLine(r.x()+4, y, r.x()+r.width()-5, y); + y=r.y()+(r.height()>>1); + p->setPen(itsBackgroundCols[MENU_SEP_SHADE]); + p->drawLine(r.x()+3+(!reverse && opts.menuStripe ? maxpmw : 0), y, + r.x()+r.width()-4-(reverse && opts.menuStripe ? maxpmw : 0), y); // p->setPen(itsBackgroundCols[0]); // p->drawLine(r.x()+4, y+1, r.x()+r.width()-5, y+1); break; } - maxpmw=QMAX(maxpmw, 16); - QRect cr, ir, tr, sr; // check column cr.setRect(r.left(), r.top(), maxpmw, r.height()); @@ -3739,8 +4931,6 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge // item column ir.setCoords(cr.right()+4, r.top(), tr.right()-4, r.bottom()); - bool reverse(QApplication::reverseLayout()); - if(reverse) { cr=visualRect(cr, r); @@ -3749,7 +4939,7 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge ir=visualRect(ir, r); } - if(mi->iconSet()) + if(mi->iconSet() && opts.menuIcons) { // Select the correct icon from the iconset QIconSet::Mode mode=flags & Style_Active @@ -3761,7 +4951,7 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge // Then draw a "pressed" background behind the icon if(popupmenu->isCheckable() && mi->isChecked()) drawLightBevel((flags & Style_Active)&&(flags & Style_Enabled) - ? itsMenuitemCols[ORIGINAL_SHADE] + ? itsHighlightCols[ORIGINAL_SHADE] : cg.background(), p, QRect(cr.x()+1, cr.y()+2, cr.width()-2, cr.height()-4), cg, flags|Style_Sunken|Style_Horizontal, ROUNDED_ALL, getFill(flags|Style_Sunken|Style_Enabled, itsBackgroundCols), @@ -3776,47 +4966,19 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge } else if(popupmenu->isCheckable() && mi->isChecked()) drawPrimitive(PE_CheckMark, p, cr, cg, - (flags &(Style_Enabled|Style_Active))| Style_On|QTC_MENU_ITEM); + (flags &(Style_Enabled|(opts.useHighlightForMenu ? Style_Active : 0)))| Style_On|MENU_ITEM); - QColor textcolor, - embosscolor; + QColor textCol(flags&Style_Enabled + ? flags&Style_Active && opts.useHighlightForMenu + ? cg.highlightedText() + : cg.foreground() + : cg.mid()); - if(flags&Style_Active) - { - if(!(flags & Style_Enabled)) - { - textcolor=cg.text(); - embosscolor=cg.light(); - } - else - { - textcolor=cg.highlightedText(); - embosscolor=cg.midlight().light(); - } - } - else if(!(flags & Style_Enabled)) - { - textcolor=cg.text(); - embosscolor=cg.light(); - } - else - { - textcolor=cg.foreground(); - embosscolor=cg.light(); - } - p->setPen(textcolor); + p->setPen(textCol); if(mi->custom()) { p->save(); - if(!(flags & Style_Enabled)) - { - p->setPen(cg.light()); - mi->custom()->paint(p, cg,(flags & Style_Enabled)?(flags & Style_Active): 0, - flags & Style_Enabled, ir.x()+1, ir.y()+1, ir.width()-1, - ir.height()-1); - p->setPen(textcolor); - } mi->custom()->paint(p, cg,(flags & Style_Enabled)?(flags & Style_Active): 0, flags & Style_Enabled, ir.x(), ir.y(), ir.width(), ir.height()); p->restore(); @@ -3830,37 +4992,10 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge // draw accelerator/tab-text if(t>=0) - { - int alignFlag(AlignVCenter | ShowPrefix | DontClip | SingleLine); - - alignFlag |=(reverse ? AlignLeft : AlignRight); - - if(!(flags & Style_Enabled)) - { - p->setPen(embosscolor); - tr.moveBy(1, 1); - p->drawText(tr, alignFlag, text.mid(t +1)); - tr.moveBy(-1,-1); - p->setPen(textcolor); - } - - p->drawText(tr, alignFlag, text.mid(t +1)); - } - - int alignFlag(AlignVCenter | ShowPrefix | DontClip | SingleLine); - - alignFlag |=(reverse ? AlignRight : AlignLeft); - - if(!(flags & Style_Enabled)) - { - p->setPen(embosscolor); - ir.moveBy(1, 1); - p->drawText(ir, alignFlag, text, t); - ir.moveBy(-1,-1); - p->setPen(textcolor); - } + p->drawText(tr, AlignVCenter|ShowPrefix|DontClip|SingleLine|(reverse ? AlignLeft : AlignRight), + text.mid(t+1)); - p->drawText(ir, alignFlag, text, t); + p->drawText(ir, AlignVCenter|ShowPrefix|DontClip|SingleLine|(reverse ? AlignRight : AlignLeft), text, t); } else if(mi->pixmap()) { @@ -3876,7 +5011,7 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge } if(mi->popup()) - drawArrow(p, sr, cg, flags, reverse ? PE_ArrowLeft : PE_ArrowRight, false, true); + ::drawArrow(p, sr, textCol, reverse ? PE_ArrowLeft : PE_ArrowRight, opts); break; } case CE_MenuBarItem: @@ -3897,9 +5032,10 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge } if(active) - drawMenuItem(p, r, cg, true, down && opts.roundMbTopOnly ? ROUNDED_TOP : ROUNDED_ALL, + drawMenuItem(p, r, flags, cg, true, down && opts.roundMbTopOnly ? ROUNDED_TOP : ROUNDED_ALL, itsMenubarCols[ORIGINAL_SHADE], - opts.colorMenubarMouseOver || down ? itsMenuitemCols : itsBackgroundCols); + opts.useHighlightForMenu && (opts.colorMenubarMouseOver || down) + ? itsHighlightCols : itsBackgroundCols); if(data.isDefault()) break; @@ -3911,16 +5047,10 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge mi->pixmap(), QString::null); else { - const QColor *col=(opts.colorMenubarMouseOver && active) || (!opts.colorMenubarMouseOver && down) - ? opts.customMenuTextColor - ? &opts.customMenuSelTextColor - : &cg.highlightedText() - : itsActive + const QColor *col=((opts.colorMenubarMouseOver && active) || (!opts.colorMenubarMouseOver && down)) ? opts.customMenuTextColor - ? &opts.customMenuNormTextColor - : SHADE_BLEND_SELECTED==opts.shadeMenubars || - (SHADE_CUSTOM==opts.shadeMenubars && - TOO_DARK(itsMenubarCols[ORIGINAL_SHADE])) + ? &opts.customMenuSelTextColor + : opts.useHighlightForMenu ? &cg.highlightedText() : &cg.foreground() : &cg.foreground(); @@ -3942,25 +5072,49 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge drawMenuOrToolBarBackground(p, r, cg, false, Qt::Horizontal==wind->orientation()); } else - KStyle::drawControl(control, p, widget, r, cg, flags, data); + BASE_STYLE::drawControl(control, p, widget, r, cg, flags, data); break; case CE_ProgressBarGroove: { - if(opts.gradientPbGroove) - drawBevelGradient(flags & Style_Enabled ? cg.base() : cg.background(), false, p, r, true, - getWidgetShade(WIDGET_TROUGH, true, false, opts.progressAppearance), - getWidgetShade(WIDGET_TROUGH, false, false, opts.progressAppearance), - false, APPEARANCE_GRADIENT, WIDGET_TROUGH); - else + QRect rx(r); + bool doEtch(DO_EFFECT && opts.borderProgress); + QColor col; + + if(doEtch) + rx.addCoords(1, 1, -1, -1); + + switch(opts.progressGrooveColor) { - p->setBrush(flags & Style_Enabled ? cg.base() : cg.background()); - p->drawRect(r); + default: + case ECOLOR_BASE: + col=cg.base(); + break; + case ECOLOR_BACKGROUND: + col=cg.background(); + break; + case ECOLOR_DARK: + col=itsBackgroundCols[2]; } + drawBevelGradient(col, p, rx, true, + false, opts.progressGrooveAppearance, WIDGET_PBAR_TROUGH); + const QColor *use(backgroundColors(cg)); - drawBorder(cg.background(), p, r, cg, (SFlags)(flags|Style_Horizontal), - ROUNDED_ALL, use, WIDGET_OTHER, true, BORDER_SUNKEN); + if(opts.borderProgress) + drawBorder(cg.background(), p, rx, cg, (SFlags)(flags|Style_Horizontal), + (opts.square&SQUARE_PROGRESS) ? ROUNDED_NONE : ROUNDED_ALL, use, WIDGET_OTHER, true, + IS_FLAT(opts.progressGrooveAppearance) && ECOLOR_DARK!=opts.progressGrooveColor ? BORDER_SUNKEN : BORDER_FLAT); + else + { + p->setPen(itsBackgroundCols[STD_BORDER]); + p->drawLine(r.topLeft(), r.topRight()); + p->drawLine(r.bottomLeft(), r.bottomRight()); + } + + if(doEtch) + drawEtch(p, r, cg, false, (opts.square&SQUARE_PROGRESS)); + break; } case CE_ProgressBarContents: @@ -3970,7 +5124,7 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge if(0==steps)//Busy indicator { - static const int barWidth(10); + static const int barWidth(PROGRESS_CHUNK_WIDTH*3.4); int progress(pb->progress() % (2*(r.width()-barWidth))); @@ -3979,10 +5133,8 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge else if(progress > r.width()-barWidth) progress = (r.width()-barWidth)-(progress-(r.width()-barWidth)); - p->fillRect(r, flags & Style_Enabled ? cg.base() : cg.background()); - drawLightBevel(cg.background(), p, QRect(r.x()+progress, r.y(), barWidth, - r.height()), cg, flags, ROUNDED_ALL, itsMenuitemCols[ORIGINAL_SHADE], - itsMenuitemCols, true, true, WIDGET_PROGRESSBAR); + drawProgress(p, QRect(r.x()+progress, r.y(), barWidth, r.height()), cg, flags, + (opts.square&SQUARE_PROGRESS) ? ROUNDED_NONE : ROUNDED_ALL, widget); } else { @@ -3996,24 +5148,71 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge if(QApplication::reverseLayout()) drawProgress(p, QRect(cr.x()+(cr.width()-width), cr.y(), width, cr.height()), cg, flags, - width==cr.width() ? ROUNDED_NONE : ROUNDED_LEFT, widget); + width==cr.width() || (opts.square&SQUARE_PROGRESS) ? ROUNDED_NONE : ROUNDED_ALL, widget); else drawProgress(p, QRect(cr.x(), cr.y(), width, cr.height()), cg, flags, - width==cr.width() ? ROUNDED_NONE : ROUNDED_RIGHT, widget); + width==cr.width() || (opts.square&SQUARE_PROGRESS) ? ROUNDED_NONE : ROUNDED_ALL, widget); } } break; } + case CE_ProgressBarLabel: + { + const QProgressBar* pb = (const QProgressBar*)widget; + QRect cr = subRect(SR_ProgressBarContents, widget); + double progress = pb->progress(); + bool reverse = QApplication::reverseLayout(); + int steps = pb->totalSteps(); + + if (!cr.isValid()) + return; + + if(opts.boldProgress) // This is the only change fro the KStyle code! + { + QFont font = p->font(); + font.setBold(true); + p->setFont(font); + } + + // Draw label + if (progress > 0 || steps == 0) + { + double pg = (steps == 0) ? 1.0 : progress / steps; + int width = QMIN(cr.width(), (int)(pg * cr.width())); + QRect crect; + if (reverse) + crect.setRect(cr.x()+(cr.width()-width), cr.y(), cr.width(), cr.height()); + else + crect.setRect(cr.x()+width, cr.y(), cr.width(), cr.height()); + + p->save(); + p->setPen(pb->isEnabled() ? (reverse ? cg.text() : cg.highlightedText()) : cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + p->setClipRect(crect); + p->setPen(reverse ? cg.highlightedText() : cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + p->restore(); + } + else + { + p->setPen(cg.text()); + p->drawText(r, AlignCenter, pb->progressString()); + } + break; + } case CE_PushButton: { const QPushButton *button(static_cast(widget)); - bool sidebar(button->isFlat() && button->inherits("KMultiTabBarTab")); + bool sidebar(!opts.stdSidebarButtons && + ((button->isFlat() && button->inherits("KMultiTabBarTab")) || + (button->parentWidget() && button->inherits("Ideal::Button") && + button->parentWidget()->inherits("Ideal::ButtonBar")))); - if(!opts.stdSidebarButtons && sidebar) + if(sidebar) { QRect r2(r); - flags|=QTC_TOGGLE_BUTTON; + flags|=TOGGLE_BUTTON; if(button->isOn()) flags|=Style_On; @@ -4066,10 +5265,10 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge flags|=Style_ButtonDefault; if(button->isToggleButton()) - flags|=QTC_TOGGLE_BUTTON; + flags|=TOGGLE_BUTTON; if(sidebar) - flags|=QTC_NO_ETCH_BUTTON; + flags|=NO_ETCH_BUTTON; drawPrimitive(PE_ButtonCommand, p, r, cg, flags); if (button->isDefault() && IND_CORNER==opts.defBtnIndicator) @@ -4083,13 +5282,91 @@ void QtCurveStyle::drawControl(ControlElement control, QPainter *p, const QWidge drawPrimitive(PE_Indicator, p, r, cg, flags, data); itsFormMode = false; break; + case CE_CheckBoxLabel: + if(opts.crHighlight || FOCUS_GLOW==opts.focus) + { + const QCheckBox *checkbox((const QCheckBox *)widget); + + if(flags&Style_MouseOver && opts.crHighlight && +#if QT_VERSION >= 0x030200 + HOVER_CHECK==itsHover && itsHoverWidget && itsHoverWidget==widget && +#endif + !isFormWidget(widget)) + { +#if QT_VERSION >= 0x030200 + QRect cr(checkbox->rect()); + QRegion r(QRect(cr.x(), cr.y(), visualRect(subRect(SR_CheckBoxFocusRect, widget), + widget).width()+ + pixelMetric(PM_IndicatorWidth)+4, + cr.height())); + +#else + QRegion r(checkbox->rect()); +#endif + r-=visualRect(subRect(SR_CheckBoxIndicator, widget), widget); + p->setClipRegion(r); + drawBevelGradient(shade(cg.background(), TO_FACTOR(opts.crHighlight)), p, checkbox->rect(), true, + false, opts.selectionAppearance, WIDGET_SELECTION); + p->setClipping(false); + } + int alignment(QApplication::reverseLayout() ? AlignRight : AlignLeft); + + drawItem(p, r, alignment | AlignVCenter | ShowPrefix, cg, + flags & Style_Enabled, checkbox->pixmap(), checkbox->text()); + + if(checkbox->hasFocus() && FOCUS_GLOW!=opts.focus) + drawPrimitive(PE_FocusRect, p, visualRect(subRect(SR_CheckBoxFocusRect, widget), + widget), cg, flags); + } + else + BASE_STYLE::drawControl(control, p, widget, r, cg, flags, data); + break; case CE_RadioButton: itsFormMode=isFormWidget(widget); drawPrimitive(PE_ExclusiveIndicator, p, r, cg, flags, data); itsFormMode=false; break; + case CE_RadioButtonLabel: + if(opts.crHighlight || FOCUS_GLOW==opts.focus) + { + const QRadioButton *radiobutton((const QRadioButton *)widget); + + if(flags&Style_MouseOver && opts.crHighlight && +#if QT_VERSION >= 0x030200 + HOVER_RADIO==itsHover && itsHoverWidget && itsHoverWidget==widget && +#endif + !isFormWidget(widget)) + { +#if QT_VERSION >= 0x030200 + QRect rb(radiobutton->rect()); + QRegion r(QRect(rb.x(), rb.y(), + visualRect(subRect(SR_RadioButtonFocusRect, widget), + widget).width()+ + pixelMetric(PM_ExclusiveIndicatorWidth)+4, + rb.height())); +#else + QRegion r(radiobutton->rect()); +#endif + r-=visualRect(subRect(SR_RadioButtonIndicator, widget), widget); + p->setClipRegion(r); + drawBevelGradient(shade(cg.background(), TO_FACTOR(opts.crHighlight)), p, radiobutton->rect(), true, + false, opts.selectionAppearance, WIDGET_SELECTION); + p->setClipping(false); + } + + int alignment(QApplication::reverseLayout() ? AlignRight : AlignLeft); + + drawItem(p, r, alignment | AlignVCenter | ShowPrefix, cg, flags & Style_Enabled, + radiobutton->pixmap(), radiobutton->text()); + + if(radiobutton->hasFocus() && FOCUS_GLOW!=opts.focus) + drawPrimitive(PE_FocusRect, p, visualRect(subRect(SR_RadioButtonFocusRect, + widget), widget), cg, flags); + break; + } + // Fall through intentional! default: - KStyle::drawControl(control, p, widget, r, cg, flags, data); + BASE_STYLE::drawControl(control, p, widget, r, cg, flags, data); } } @@ -4101,7 +5378,7 @@ void QtCurveStyle::drawControlMask(ControlElement control, QPainter *p, const QW case CE_PushButton: case CE_MenuBarItem: { - int offset(r.width()fillRect(r, color0); p->fillRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2, color1); @@ -4115,7 +5392,7 @@ void QtCurveStyle::drawControlMask(ControlElement control, QPainter *p, const QW break; } default: - KStyle::drawControlMask(control, p, widget, r, data); + BASE_STYLE::drawControlMask(control, p, widget, r, data); } } @@ -4130,7 +5407,7 @@ void QtCurveStyle::drawComplexControlMask(ComplexControl control, QPainter *p, c drawControlMask(CE_PushButton, p, widget, r, data); break; default: - KStyle::drawComplexControlMask(control, p, widget, r, data); + BASE_STYLE::drawComplexControlMask(control, p, widget, r, data); } } @@ -4143,35 +5420,54 @@ QRect QtCurveStyle::subRect(SubRect subrect, const QWidget *widget)const { case SR_PushButtonFocusRect: { - int dbw1(pixelMetric(PM_ButtonDefaultIndicator, widget)), - dbw2(dbw1*2), - border(3), - border2=(border*2); - - rect.setRect(wrect.x()+border +dbw1, wrect.y()+border +dbw1, - wrect.width()-border2-dbw2, - wrect.height()-border2-dbw2); - - - if(!isFormWidget(widget) && QTC_DO_EFFECT) - rect.addCoords(0, 1, 0, -1); + if(FOCUS_FULL==opts.focus) + rect=wrect; + else + { + int dbw1(pixelMetric(PM_ButtonDefaultIndicator, widget)), + dbw2(dbw1*2), + border(3), + border2=(border*2); + + rect.setRect(wrect.x()+border +dbw1, wrect.y()+border +dbw1, + wrect.width()-border2-dbw2, + wrect.height()-border2-dbw2); + } - break; + if(!isFormWidget(widget) && DO_EFFECT) + rect.addCoords(1, 1, -1, -1); + return rect; } - case SR_ProgressBarGroove: - rect=QRect(widget->rect()); - break; + case SR_ProgressBarContents: + return opts.fillProgress + ? DO_EFFECT && opts.borderProgress + ? wrect + : QRect(wrect.left()-1, wrect.top()-1, wrect.width()+2, wrect.height()+2) + : DO_EFFECT && opts.borderProgress + ? QRect(wrect.left()+2, wrect.top()+2, wrect.width()-4, wrect.height()-4) + : QRect(wrect.left()+1, wrect.top()+1, wrect.width()-2, wrect.height()-2); case SR_ProgressBarLabel: - rect=QRect(wrect.left()+2, wrect.top()+2, wrect.width()-4, wrect.height()-4); - break; + case SR_ProgressBarGroove: + return wrect; + case SR_DockWindowHandleRect: + return wrect; default: - rect=KStyle::subRect(subrect, widget); + return BASE_STYLE::subRect(subrect, widget); } return rect; } +// This is a hack, as QTitleBar is private!!! +class QTitleBar : public QWidget +{ + public: + + bool isActive() const; + QWidget *window() const; +}; + void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags flags, SCFlags controls, SCFlags active, @@ -4188,7 +5484,7 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const QRect button(querySubControlMetrics(control, widget, SC_ToolButton, data)), menuarea(querySubControlMetrics(control, widget, SC_ToolButtonMenu, data)); - SFlags bflags(flags|QTC_STD_TOOLBUTTON), + SFlags bflags(flags|STD_TOOLBUTTON), mflags(flags); if (APP_KORN==itsThemedApp) @@ -4198,12 +5494,23 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } const QToolBar *tb(widget->parentWidget() - ? ::qt_cast(widget->parentWidget()) : NULL); + ? ::qt_cast(widget->parentWidget()) : 0L); bool onControlButtons(false), onExtender(!tb && widget->parentWidget() && widget->parentWidget()->inherits( "QToolBarExtensionWidget") && - ::qt_cast(widget->parentWidget()->parentWidget())); + ::qt_cast(widget->parentWidget()->parentWidget())), + isDWClose(!tb && !onExtender && + widget->parentWidget() && + widget->parentWidget()->inherits( "QDockWindowHandle")); + + if(isDWClose) + { + p->fillRect(r, cg.background());//.dark(DW_BGND)); + if(!(flags&Style_MouseOver) && !(active & SC_ToolButton)) + break; + bflags|=DW_CLOSE_BUTTON; + } if (!tb && !onExtender && widget->parentWidget() && !qstrcmp(widget->parentWidget()->name(), "qt_maxcontrols")) @@ -4221,10 +5528,10 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if(onControlButtons || (toolbutton->parentWidget() && toolbutton->parentWidget()->parentWidget() && ::qt_cast(toolbutton->parentWidget()->parentWidget()))) - bflags|=QTC_NO_ETCH_BUTTON; + bflags|=NO_ETCH_BUTTON; // If we're pressed, on, or raised... -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 if(bflags &(Style_Down | Style_On | Style_Raised) || onControlButtons) #else if(bflags &(Style_Down | Style_On | Style_Raised | Style_MouseOver) || @@ -4237,12 +5544,12 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if(tb) if(Qt::Vertical==tb->orientation()) - bflags|=QTC_VERTICAL_TB_BUTTON; + bflags|=VERTICAL_TB_BUTTON; else bflags|=Style_Horizontal; if(toolbutton->isToggleButton()) - bflags|=QTC_TOGGLE_BUTTON; + bflags|=TOGGLE_BUTTON; drawPrimitive(PE_ButtonTool, p, button, cg, bflags, data); } @@ -4255,7 +5562,7 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const toolbutton->pos()); else if(widget->parent()) { - QToolBar *tb(NULL); + QToolBar *tb(0L); if(::qt_cast(widget->parent())) tb=(QToolBar*)widget->parent(); @@ -4286,13 +5593,16 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const { if(mflags &(Style_Down | Style_On | Style_Raised)) drawPrimitive(PE_ButtonDropDown, p, menuarea, cg, mflags, data); - drawPrimitive(PE_ArrowDown, p, menuarea, cg, mflags, data); + ::drawArrow(p, menuarea, MO_ARROW(cg.buttonText()), PE_ArrowDown, opts, true); } if(toolbutton->hasFocus() && !toolbutton->focusProxy()) { QRect fr(toolbutton->rect()); - fr.addCoords(3, 3,-3,-3); + if(FOCUS_FULL!=opts.focus) + fr.addCoords(2, 2,-2,-2); + if(DO_EFFECT) + fr.addCoords(1, 1,-1,-1); drawPrimitive(PE_FocusRect, p, fr, cg); } @@ -4301,6 +5611,11 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } case CC_ComboBox: { + if(APP_OPENOFFICE==itsThemedApp) + flags&=~Style_MouseOver; + + itsFormMode = isFormWidget(widget); + const QComboBox *combobox((const QComboBox *)widget); QRect frame(QStyle::visualRect(querySubControlMetrics(CC_ComboBox, widget, SC_ComboBoxFrame, @@ -4315,9 +5630,14 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const bool editable(combobox->editable()), sunken(combobox->listBox() ? combobox->listBox()->isShown() : false), reverse(QApplication::reverseLayout()); - SFlags fillFlags(flags); + SFlags fillFlags(flags), + doEtch(!itsFormMode && DO_EFFECT && (!editable || opts.etchEntry)); - itsFormMode = isFormWidget(widget); + if(doEtch) + { + frame.addCoords(1, 1, -1, -1); + field.addCoords(reverse ? -1 : 1, 1, reverse ? -1 : 0, -1); + } if(sunken) { @@ -4326,7 +5646,7 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const fillFlags-=Style_MouseOver; } - if(editable ||(!itsFormMode && QTC_DO_EFFECT && qstrcmp(widget->name(), kdeToolbarWidget))) + if(editable ||(!itsFormMode && DO_EFFECT && qstrcmp(widget->name(), kdeToolbarWidget))) { p->setPen(cg.background()); p->drawRect(r); @@ -4334,41 +5654,73 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if(controls&SC_ComboBoxFrame && frame.isValid()) { - if(editable && HOVER_CB_ARROW!=itsHover && fillFlags&Style_MouseOver) - fillFlags-=Style_MouseOver; + if(editable && opts.unifyCombo) + { + if(reverse) + frame.addCoords(0, 1, 2, -1); + else + frame.addCoords(-1, 1, -1, -1); + p->fillRect(frame, flags&Style_Enabled ? cg.base() : cg.background()); + } + else + { + const QColor *cols=itsComboBtnCols && editable && flags&Style_Enabled ? itsComboBtnCols : use; - if(opts.coloredMouseOver && fillFlags&Style_MouseOver && editable && !sunken) - frame.addCoords(reverse ? 0 : 1, 0, reverse ? 1 : 0, 0); + if(editable && HOVER_CB_ARROW!=itsHover) + fillFlags&=~Style_MouseOver; - drawLightBevel(p, frame, cg, fillFlags|Style_Raised|Style_Horizontal, - controls&SC_ComboBoxEditField && field.isValid() && editable - ? (reverse ? ROUNDED_LEFT : ROUNDED_RIGHT) : ROUNDED_ALL, - getFill(fillFlags, use), use, true, true, WIDGET_STD_BUTTON); - } + // if(opts.coloredMouseOver && fillFlags&Style_MouseOver && editable && !sunken) + // frame.addCoords(reverse ? 0 : 1, 0, reverse ? 1 : 0, 0); - if(controls&SC_ComboBoxArrow && arrow.isValid()) - { - if(sunken) - arrow.addCoords(1, 1, 1, 1); - drawPrimitive(PE_ArrowDown, p, arrow, cg, flags & ~Style_MouseOver); + drawLightBevel(p, frame, cg, fillFlags|Style_Raised|Style_Horizontal, + controls&SC_ComboBoxEditField && field.isValid() && editable + ? (reverse ? ROUNDED_LEFT : ROUNDED_RIGHT) : ROUNDED_ALL, + getFill(fillFlags, cols, false, (SHADE_DARKEN==opts.comboBtn || + (SHADE_NONE!=opts.comboBtn && !(flags&Style_Enabled))) && + editable), + cols, true, true, editable ? WIDGET_COMBO_BUTTON : WIDGET_COMBO); + } } if(controls&SC_ComboBoxEditField && field.isValid()) { if(editable) { - field.addCoords(-1,-1, 0, 1); + if(opts.unifyCombo) + { + field=r; + if(DO_EFFECT) + field.addCoords(1, 1, -1, -1); + } + else + field.addCoords(-1,-1, 0, 1); p->setPen(flags&Style_Enabled ? cg.base() : cg.background()); p->drawRect(field); - field.addCoords(-2,-2, 2, 2); - drawEntryField(p, field, cg, fillFlags, flags&Style_Enabled && - (flags&Style_HasFocus), reverse ? ROUNDED_RIGHT : ROUNDED_LEFT, - WIDGET_STD_BUTTON); + if(!opts.unifyCombo) + field.addCoords(-2,-2, 2, 2); + SFlags fieldFlags(flags); + if(!opts.unifyCombo && HOVER_CB_ENTRY!=itsHover) + fieldFlags&=~Style_MouseOver; + drawEntryField(p, field, cg, fillFlags, fieldFlags&Style_Enabled + ? fieldFlags&Style_MouseOver + ? ENTRY_MOUSE_OVER + : fieldFlags&Style_HasFocus + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, + (opts.square&SQUARE_ENTRY) + ? ROUNDED_NONE + : opts.unifyCombo + ? ROUNDED_ALL + : reverse + ? ROUNDED_RIGHT + : ROUNDED_LEFT, + WIDGET_COMBO); } - else + else if(opts.comboSplitter && !(SHADE_DARKEN==opts.comboBtn || itsComboBtnCols)) { field.addCoords(1, sunken ? 2 : 1, sunken ? 2 : 1, -1); - p->setPen(use[QT_BORDER(flags&Style_Enabled)]); + p->setPen(use[BORDER_VAL(flags&Style_Enabled)]); p->drawLine(reverse ? field.left()-3 : field.right(), field.top(), reverse ? field.left()-3 : field.right(), field.bottom()); if(!sunken) @@ -4379,49 +5731,155 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } } - if((flags & Style_HasFocus) && !editable) + if(flags&Style_HasFocus && !editable && FOCUS_GLOW!=opts.focus) { - QRect fr(QStyle::visualRect(subRect(SR_ComboBoxFocusRect, widget), widget)); + QRect fr; - if(reverse) - fr.addCoords(3, 0, 0, 0); + if(FOCUS_FULL==opts.focus) + fr=frame; + else if(opts.comboSplitter) + { + fr=QStyle::visualRect(subRect(SR_ComboBoxFocusRect, widget), widget); + if(reverse) + fr.addCoords(3, 0, 0, 0); + else + fr.addCoords(0, 0, -2, 0); + if(!itsFormMode && DO_EFFECT) + fr.addCoords(1, 1, -1, -1); + } else - fr.addCoords(0, 0, -2, 0); + { + fr=frame; + fr.addCoords(3, 3, -3, -3); + } - if(!itsFormMode && QTC_DO_EFFECT) - fr.addCoords(0, 1, 0, -1); - drawPrimitive(PE_FocusRect, p, fr, cg, flags | Style_FocusAtBorder, - QStyleOption(cg.highlight())); + if(!(flags&Style_MouseOver && FOCUS_FULL==opts.focus && MO_NONE!=opts.coloredMouseOver)) + drawPrimitive(PE_FocusRect, p, fr, cg, flags | Style_FocusAtBorder, + QStyleOption(cg.highlight())); } } - p->setPen(flags & Style_Enabled ? cg.buttonText() : cg.mid()); + if(controls&SC_ComboBoxArrow && arrow.isValid()) + { + if(!editable && (SHADE_DARKEN==opts.comboBtn || itsComboBtnCols)) + { + SFlags btnFlags(flags); + QRect btn(arrow.x(), frame.y(), arrow.width()+1, frame.height()); + const QColor *cols=SHADE_DARKEN==opts.comboBtn || !(flags&Style_Enabled) ? use : itsComboBtnCols; + if(!sunken) + btnFlags|=Style_Raised; + p->save(); + p->setClipRect(btn); + if(!opts.comboSplitter) + btn.addCoords(reverse ? 0 : -2, 0, reverse ? 2 : 0, 0); + if(!DO_EFFECT) + btn.addCoords(0, 0, 1, 0); + drawLightBevel(p, btn, cg, btnFlags|Style_Horizontal, reverse ? ROUNDED_LEFT : ROUNDED_RIGHT, + getFill(btnFlags, cols, false, SHADE_DARKEN==opts.comboBtn || + (SHADE_NONE!=opts.comboBtn && !(flags&Style_Enabled))), + cols, true, true, WIDGET_COMBO); + p->restore(); + } + + SFlags arrowFlags(flags); + if(sunken && !opts.unifyCombo) + arrow.addCoords(1, 1, 1, 1); + if(editable && HOVER_CB_ARROW!=itsHover) + arrowFlags&=~Style_MouseOver; + ::drawArrow(p, arrow, MO_ARROW_X(arrowFlags, cg.buttonText()), PE_ArrowDown, opts); + } + + if(doEtch) + { + bool glowFocus(USE_GLOW_FOCUS(flags&Style_MouseOver) && flags&Style_HasFocus && flags&Style_Enabled); + + if(!sunken && !editable && + ((MO_GLOW==opts.coloredMouseOver && flags&Style_MouseOver)/* || + (FOCUS_FULL==opts.focus && flags&Style_HasFocus)*/ || glowFocus)) + drawGlow(p, widget ? widget->rect() : r, cg, WIDGET_COMBO, glowFocus ? itsFocusCols : NULL); + else + drawEtch(p, widget ? widget->rect() : r, cg, + !editable && EFFECT_SHADOW==opts.buttonEffect && !sunken, editable && (opts.square&SQUARE_ENTRY)); + } + + p->setPen(cg.buttonText()); itsFormMode = false; break; } case CC_SpinWidget: { + itsFormMode = isFormWidget(widget); + const QSpinWidget *spinwidget((const QSpinWidget *)widget); QRect frame(querySubControlMetrics(CC_SpinWidget, widget, SC_SpinWidgetFrame, data)), up(spinwidget->upRect()), - down(spinwidget->downRect()); + down(spinwidget->downRect()), + all(frame.unite(up).unite(down)); bool hw(itsHoverWidget && itsHoverWidget==spinwidget), reverse(QApplication::reverseLayout()), - doFrame((controls&SC_SpinWidgetFrame) && frame.isValid()); + doFrame((controls&SC_SpinWidgetFrame) && frame.isValid()), + doEtch(!itsFormMode && DO_EFFECT && opts.etchEntry); + + if(doEtch) + { + down.addCoords(reverse ? 1 : 0, 0, reverse ? 0 : -1, -1); + up.addCoords(reverse ? 1 : 0, 1, reverse ? 0 : -1, 0); + frame.addCoords(reverse ? 0 : 1, 1, reverse ? -1 : 0, -1); + } if(flags&Style_MouseOver) flags-=Style_MouseOver; - if(!reverse && doFrame) + if(opts.unifySpin) + drawEntryField(p, all, cg, flags, spinwidget && flags&Style_Enabled + ? flags&Style_MouseOver || hw + ? ENTRY_MOUSE_OVER + : flags&Style_HasFocus || spinwidget->hasFocus() + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, + ROUNDED_ALL, WIDGET_SPIN); + else { - itsFormMode = isFormWidget(widget); - frame.setWidth(frame.width()+1); + if(!reverse && doFrame) + { + frame.setWidth(frame.width()+1); + + drawEntryField(p, frame, cg, flags, + spinwidget && flags&Style_Enabled + ? flags&Style_MouseOver || hw + ? ENTRY_MOUSE_OVER + : flags&Style_HasFocus || spinwidget->hasFocus() + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, + ROUNDED_LEFT, WIDGET_SPIN); + } - drawEntryField(p, frame, cg, flags, - spinwidget ? spinwidget->hasFocus() && (flags&Style_Enabled) : false, - ROUNDED_LEFT, WIDGET_SPIN); - itsFormMode=false; + if(opts.unifySpinBtns) + { + QRect btns=up.unite(down); + const QColor *use(buttonColors(cg)); + int btnFlags=flags; + + btnFlags&=~(Style_Sunken|Style_MouseOver); + btnFlags|=Style_Horizontal; + + drawLightBevel(p, btns, cg, btnFlags, reverse ? ROUNDED_LEFT : ROUNDED_RIGHT, getFill(btnFlags, use), + use, true, true, WIDGET_SPIN); + if(hw && (HOVER_SW_DOWN==itsHover || HOVER_SW_UP==itsHover) && flags&Style_Enabled && !(flags&Style_Sunken)) + { + btnFlags|=Style_MouseOver; + p->save(); + p->setClipRect(HOVER_SW_UP==itsHover ? up : down); + drawLightBevel(p, btns, cg, btnFlags, reverse ? ROUNDED_LEFT : ROUNDED_RIGHT, getFill(btnFlags, use), + use, true, true, WIDGET_SPIN); + p->restore(); + } + p->setPen(use[BORDER_VAL(style&Style_Enabled)]); + p->drawLine(down.x()+2, down.y(), down.x()+down.width()-3, down.y()); + } } if((controls&SC_SpinWidgetUp) && up.isValid()) @@ -4435,8 +5893,8 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if(spinwidget->buttonSymbols()==QSpinWidget::PlusMinus) pe=PE_SpinWidgetPlus; if(!spinwidget->isUpEnabled()) - upflags^=Style_Enabled; - drawPrimitive(pe, p, up, cg, + upflags&=~Style_Enabled; + drawPrimitive(pe, p, up, !(upflags&Style_Enabled) && spinwidget ? spinwidget->palette().disabled() : cg, upflags |((active==SC_SpinWidgetUp) ? Style_On | Style_Sunken : Style_Raised)); } @@ -4451,21 +5909,32 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if(spinwidget->buttonSymbols()==QSpinWidget::PlusMinus) pe=PE_SpinWidgetMinus; if(!spinwidget->isDownEnabled()) - downflags^=Style_Enabled; - drawPrimitive(pe, p, down, cg, + downflags&=~Style_Enabled; + drawPrimitive(pe, p, down, !(downflags&Style_Enabled) && spinwidget ? spinwidget->palette().disabled() : cg, downflags |((active==SC_SpinWidgetDown) ? Style_On | Style_Sunken : Style_Raised)); } - if(reverse && doFrame) + if(!opts.unifySpin) { - itsFormMode = isFormWidget(widget); - frame.setWidth(frame.width()+1); - drawEntryField(p, frame, cg, flags, - spinwidget ? spinwidget->hasFocus() && (flags&Style_Enabled) : false, - ROUNDED_RIGHT, WIDGET_SPIN); - itsFormMode=false; + if(reverse && doFrame) + { + frame.setWidth(frame.width()+1); + drawEntryField(p, frame, cg, flags, + spinwidget && flags&Style_Enabled + ? flags&Style_MouseOver || hw + ? ENTRY_MOUSE_OVER + : flags&Style_HasFocus || spinwidget->hasFocus() + ? ENTRY_FOCUS + : ENTRY_NONE + : ENTRY_NONE, + ROUNDED_RIGHT, WIDGET_SPIN); + } + + if(doEtch) + drawEtch(p, spinwidget ? spinwidget->rect() : r, cg, false, (opts.square&SQUARE_ENTRY)); } + itsFormMode=false; break; } case CC_ScrollBar: @@ -4478,7 +5947,7 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const atMin(maxed || sb->value()==sb->minValue()), atMax(maxed || sb->value()==sb->maxValue()); SFlags sflags((horiz ? Style_Horizontal : Style_Default) | - (maxed ? Style_Default : Style_Enabled)); + (maxed || !widget->isEnabled() ? Style_Default : Style_Enabled)); QRect subline(querySubControlMetrics(control, widget, SC_ScrollBarSubLine, data)), addline(querySubControlMetrics(control, widget, SC_ScrollBarAddLine, @@ -4526,8 +5995,8 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const sbRect.addCoords(0, 0, -1, 0); } -#ifndef QTC_SIMPLE_SCROLLBARS - if(sbRect.isValid() && SCROLLBAR_NONE==opts.scrollbarType) +#ifndef SIMPLE_SCROLLBARS + if(sbRect.isValid() && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons)) if(horiz) sbRect.addCoords(0, 0, -1, 0); else @@ -4535,40 +6004,98 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const #endif } - if (useThreeButtonScrollBar) + else if (useThreeButtonScrollBar) if (horiz) subline2.moveBy(-addline.width(), 0); else subline2.moveBy(0, -addline.height()); + if(opts.flatSbarButtons) + switch(opts.scrollbarType) + { + case SCROLLBAR_KDE: + if(horiz) + sbRect.addCoords(subline.width(), 0, -(addline.width()+subline2.width()), 0); + else + sbRect.addCoords(0, subline.height(), 0, -(addline.height()+subline2.height())); + break; + case SCROLLBAR_WINDOWS: + if(horiz) + sbRect.addCoords(subline.width(), 0, -(addline.width()), 0); + else + sbRect.addCoords(0, subline.height(), 0, -(addline.height())); + break; + case SCROLLBAR_NEXT: + if(horiz) + sbRect.addCoords(subline.width()+subline2.width(), 0, 0, 0); + else + sbRect.addCoords(0, subline.height()+subline2.height(), 0, 0); + break; + case SCROLLBAR_PLATINUM: + if(horiz) + sbRect.addCoords(0, 0, -(addline.width()+subline2.width()), 0); + else + sbRect.addCoords(0, 0, 0, -(addline.height()+subline2.height())); + default: + break; + } + // Draw trough... const QColor *trough(itsBackgroundCols); // backgroundColors(cg)); - bool noButtons(SCROLLBAR_NONE==opts.scrollbarType); + bool noButtons((SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons) && ROUNDED); QRect s2(subpage), a2(addpage); -#ifndef QTC_SIMPLE_SCROLLBARS +#ifndef SIMPLE_SCROLLBARS if(noButtons) { // Increase clipping to allow trough to "bleed" into slider corners... - a2.addCoords(-3, -3, 3, 3); - s2.addCoords(-3, -3, 3, 3); + a2.addCoords(-2, -2, 2, 2); + s2.addCoords(-2, -2, 2, 2); } #endif + p->save(); + if(opts.flatSbarButtons) + p->setClipRegion(QRegion(s2)+QRegion(addpage)+QRegion(addline)+QRegion(subline)+QRegion(subline2)); + else + p->setClipRegion(QRegion(s2)+QRegion(addpage)); + + if(opts.flatSbarButtons && SCROLLBAR_NONE!=opts.scrollbarType && ROUNDED && !IS_FLAT(opts.sbarBgndAppearance)) + drawBevelGradient(itsBackgroundCols[ORIGINAL_SHADE], p, r, flags&Style_Horizontal, false, + opts.sbarBgndAppearance, WIDGET_SB_BGND); + else if(opts.thinSbarGroove && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons) && IS_FLAT(opts.sbarBgndAppearance)) + { + QColor color(cg.background()); + + if(0!=opts.tabBgnd && inStackWidget(widget)) + color=shade(color, TO_FACTOR(opts.tabBgnd)); + p->fillRect(sbRect, cg.background()); + } + + sflags&=~(Style_Down|Style_On|Style_Sunken); + + if(opts.thinSbarGroove && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons)) + if(horiz) + sbRect.addCoords(0, THIN_SBAR_MOD, 0, -THIN_SBAR_MOD); + else + sbRect.addCoords(THIN_SBAR_MOD, 0, -THIN_SBAR_MOD, 0); - p->setClipRegion(QRegion(s2)+QRegion(addpage)); - drawLightBevel(p, sbRect, cg, sflags|Style_Down, -#ifndef QTC_SIMPLE_SCROLLBARS - SCROLLBAR_NONE==opts.scrollbarType ? ROUNDED_ALL : + drawLightBevel(p, sbRect, cg, sflags/*|Style_Down*/, +#ifndef SIMPLE_SCROLLBARS + !(opts.square&SQUARE_SB_SLIDER) && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons) + ? ROUNDED_ALL : #endif ROUNDED_NONE, - trough[2], trough, true, true, WIDGET_TROUGH); - p->setClipping(false); + trough[2], trough, true, true, + opts.thinSbarGroove && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons) + ? WIDGET_SLIDER_TROUGH : WIDGET_TROUGH); + p->restore(); if(/*(controls&SC_ScrollBarSubLine) && */subline.isValid()) { - bool enable=(!maxed && sb->value()!=sb->minValue()); + bool enable=!atMin; - drawPrimitive(PE_ScrollBarSubLine, p, subline, cg, sflags | + drawPrimitive(PE_ScrollBarSubLine, p, subline, !enable && sb ? sb->palette().disabled() : cg, + sflags | //(enable ? Style_Enabled : Style_Default) | (enable && hw && HOVER_SB_SUB==itsHover ? Style_MouseOver : Style_Default) | @@ -4576,16 +6103,21 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const && SC_ScrollBarSubLine==active ? Style_Down : Style_Default)); if (useThreeButtonScrollBar && subline2.isValid()) - drawPrimitive(PE_ScrollBarSubLine, p, subline2, cg, sflags | + { + if(IS_FLAT(opts.sbarBgndAppearance)) + p->fillRect(subline2, cg.background()); + drawPrimitive(PE_ScrollBarSubLine, p, subline2, !enable && sb ? sb->palette().disabled() : cg, + sflags | //(enable ? Style_Enabled : Style_Default) | (enable && hw && HOVER_SB_SUB2==itsHover ? Style_MouseOver : Style_Default) | (enable && (!hw || HOVER_SB_SUB2==itsHover || HOVER_NONE==itsHover) && SC_ScrollBarSubLine==active ? Style_Down : Style_Default)); + } } if(/*(controls&SC_ScrollBarAddLine) && */addline.isValid()) { - bool enable=(!maxed && sb->value()!=sb->maxValue()); + bool enable=!atMax; // See KHTML note at top of file if(itsFormMode && SCROLLBAR_NEXT!=opts.scrollbarType) @@ -4594,7 +6126,8 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const else addline.addCoords(0, 0, 0, -1); - drawPrimitive(PE_ScrollBarAddLine, p, addline, cg, sflags | + drawPrimitive(PE_ScrollBarAddLine, p, addline, !enable && sb ? sb->palette().disabled() : cg, + sflags | //(enable ? Style_Enabled : Style_Default) | (enable && hw && HOVER_SB_ADD==itsHover ? Style_MouseOver : Style_Default) | @@ -4619,8 +6152,8 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const // region... if(!(controls&SC_ScrollBarSlider)) p->setClipRegion(QRegion(s2)+QRegion(addpage)); -#ifdef QTC_INCREASE_SB_SLIDER - else +#ifdef INCREASE_SB_SLIDER + else if(!opts.flatSbarButtons) { if(atMax) switch(opts.scrollbarType) @@ -4651,6 +6184,14 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } #endif + if(opts.thinSbarGroove) + if(opts.flatSbarButtons && SCROLLBAR_NONE!=opts.scrollbarType && ROUNDED) + drawBevelGradient(itsBackgroundCols[ORIGINAL_SHADE], p, slider, flags&Style_Horizontal, false, + opts.sbarBgndAppearance, WIDGET_SB_BGND); + else if(opts.thinSbarGroove && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons) && + IS_FLAT(opts.sbarBgndAppearance)) + p->fillRect(slider, cg.background()); + drawPrimitive(PE_ScrollBarSlider, p, slider, cg, sflags | //(maxed ? Style_Default : Style_Enabled) | (!maxed && hw && HOVER_SB_SLIDER==itsHover @@ -4663,10 +6204,10 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const drawPrimitive(PE_FocusRect, p, QRect(slider.x()+2, slider.y()+2, slider.width()-5, slider.height()-5), cg, Style_Default); -#ifndef QTC_SIMPLE_SCROLLBARS - if(noButtons && (!atMin || !atMax)) +#ifndef SIMPLE_SCROLLBARS + if(noButtons && (!atMin || !atMax) && !opts.thinSbarGroove) { - p->setPen(backgroundColors(cg)[QT_STD_BORDER]); + p->setPen(backgroundColors(cg)[STD_BORDER]); if(horiz) { @@ -4708,8 +6249,8 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } } #endif - if(!(controls&SC_ScrollBarSlider)) - p->setClipping(false); +// if(!(controls&SC_ScrollBarSlider)) +// p->setClipping(false); } break; } @@ -4741,12 +6282,12 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const if((controls & SC_SliderGroove)&& groove.isValid()) drawSliderGroove(paint, groove, cg, flags, widget); if((controls & SC_SliderHandle)&& handle.isValid()) - drawSliderHandle(paint, handle, cg, flags, widget ? ::qt_cast(widget) : NULL, tb); + drawSliderHandle(paint, handle, cg, flags, widget ? ::qt_cast(widget) : 0L, tb); if(controls & SC_SliderTickmarks) QCommonStyle::drawComplexControl(control, paint, widget, r, cg, flags, SC_SliderTickmarks, active, data); - if(flags & Style_HasFocus) + if(flags&Style_HasFocus && FOCUS_GLOW!=opts.focus) drawPrimitive(PE_FocusRect, paint, groove, cg); if(!tb) @@ -4756,8 +6297,139 @@ void QtCurveStyle::drawComplexControl(ComplexControl control, QPainter *p, const } break; } + case CC_TitleBar: + { + const int buttonMargin(3); + const QTitleBar *tb((const QTitleBar *)widget); + bool isActive((tb->isActive() && widget->isActiveWindow()) || + (!tb->window() && widget->topLevelWidget()->isActiveWindow())); + QColorGroup cgroup(isActive + ? widget->palette().active() + : widget->palette().inactive()); + const QColor *cols(getMdiColors(cg, isActive)); + QColor textCol(isActive ? itsActiveMdiTextColor : itsMdiTextColor), + shdCol(shadowColor(textCol)), + shadowCol(midColor(cols[ORIGINAL_SHADE], shdCol)); + + if (controls&SC_TitleBarLabel) + { + int alignment=AlignVCenter|SingleLine; + bool full=false; + + switch(opts.titlebarAlignment) + { + default: + case ALIGN_LEFT: + alignment|=Qt::AlignLeft; + break; + case ALIGN_CENTER: + alignment|=Qt::AlignHCenter; + break; + case ALIGN_FULL_CENTER: + alignment|=Qt::AlignHCenter; + full=true; + break; + case ALIGN_RIGHT: + alignment|=Qt::AlignRight; + } + + QRect ir(visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarLabel), widget)), + textRect(full ? tb->rect().x() : ir.x(), ir.y(), full ? tb->rect().width() : ir.width(), ir.height()); + EAppearance app=isActive ? opts.titlebarAppearance : opts.inactiveTitlebarAppearance; + + drawBevelGradient(cols[ORIGINAL_SHADE], p, r, true, false, app, WIDGET_MDI_WINDOW); + ir.addCoords(2, 0, -4, 0); + + QFontMetrics fm(QFontMetrics(widget->font())); + QString titleString(elliditide(widget->caption(), fm, textRect.width())); + + if(full) + { + int textWidth=fm.boundingRect(titleString).width(); + if(ir.left()>((textRect.width()-textWidth)>>1)) + { + alignment=Qt::AlignVCenter|Qt::AlignLeft; + textRect=ir; + full=false; + } + else if(ir.right()<((textRect.width()+textWidth)>>1)) + { + alignment=Qt::AlignVCenter|Qt::AlignRight; + textRect=ir; + full=false; + } + else + p->setClipRect(ir); + } + + p->setPen(shadowCol); + p->drawText(textRect.x()+1, textRect.y()+1, textRect.width(), textRect.height(), alignment, titleString); + p->setPen(textCol); + p->drawText(textRect.x(), textRect.y(), textRect.width(), textRect.height(), alignment, titleString); + if(full) + p->setClipping(false); + + //controls-=SC_TitleBarLabel; + } + QRect ir; + bool down(false); + QPixmap pm; + + if (controls&SC_TitleBarCloseButton) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarCloseButton), widget); + down = active & SC_TitleBarCloseButton; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawMdiIcon(p, textCol, shadowCol, ir, down, buttonMargin, SC_TitleBarCloseButton); + } + + if (tb->window()) + { + if (controls &SC_TitleBarMaxButton) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarMaxButton), widget); + down = active & SC_TitleBarMaxButton; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawMdiIcon(p, textCol, shadowCol, ir, down, buttonMargin, SC_TitleBarMaxButton); + } + + if (controls&SC_TitleBarNormalButton || controls&SC_TitleBarMinButton) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarMinButton), widget); + QStyle::SubControl ctrl = (controls & SC_TitleBarNormalButton ? + SC_TitleBarNormalButton : + SC_TitleBarMinButton); + down = active & ctrl; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawMdiIcon(p, textCol, shadowCol, ir, down, buttonMargin, ctrl); + } + + if (controls&SC_TitleBarShadeButton) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarShadeButton), widget); + down = active & SC_TitleBarShadeButton; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawMdiIcon(p, textCol, shadowCol, ir, down, buttonMargin, SC_TitleBarShadeButton); + } + if (controls&SC_TitleBarUnshadeButton) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarUnshadeButton), widget); + down = active & SC_TitleBarUnshadeButton; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawMdiIcon(p, textCol, shadowCol, ir, down, buttonMargin, SC_TitleBarUnshadeButton); + } + } + if (controls&SC_TitleBarSysMenu && tb->icon()) + { + ir = visualRect(querySubControlMetrics(CC_TitleBar, widget, SC_TitleBarSysMenu), widget); + down = active & SC_TitleBarSysMenu; + drawPrimitive(PE_ButtonTool, p, ir, tb->colorGroup(), down ? Style_Down : Style_Raised); + drawItem(p, ir, AlignCenter, tb->colorGroup(), true, tb->icon(), QString::null); + } + break; + } default: - KStyle::drawComplexControl(control, p, widget, r, cg, flags, controls, active, data); + BASE_STYLE::drawComplexControl(control, p, widget, r, cg, flags, controls, active, data); } } @@ -4779,7 +6451,7 @@ QRect QtCurveStyle::querySubControlMetrics(ComplexControl control, const QWidget bs.setHeight(widget->height()>>1); if(bs.height()< 8) bs.setHeight(8); - bs.setWidth(15); + bs.setWidth(DO_EFFECT ? 16 : 15); bs=bs.expandedTo(QApplication::globalStrut()); int extra(bs.height()*2==widget->height()? 0 : 1), @@ -4808,17 +6480,17 @@ QRect QtCurveStyle::querySubControlMetrics(ComplexControl control, const QWidget } case CC_ComboBox: { - QRect r(KStyle::querySubControlMetrics(control, widget, sc, data)); + QRect r(BASE_STYLE::querySubControlMetrics(control, widget, sc, data)); if(SC_ComboBoxFrame==sc) { const QComboBox *cb(::qt_cast(widget)); if(cb && cb->editable()) - r=QRect((r.x()+r.width()-1)-18, r.y(), 19, r.height()); + r=QRect(r.x()+r.width()-19, r.y(), 19, r.height()); } - else if (reverse && SC_ComboBoxEditField==sc) - r.addCoords(-1, 0, -2, 0); + else if (SC_ComboBoxEditField==sc && !DO_EFFECT) + r.addCoords(0, 0, -1, 0); return r; } case CC_ScrollBar: @@ -4965,17 +6637,103 @@ QRect QtCurveStyle::querySubControlMetrics(ComplexControl control, const QWidget } return ret; } +#ifdef SET_MDI_WINDOW_BUTTON_POSITIONS // TODO + case CC_TitleBar: + if (widget) + { + bool isMinimized(tb->titleBarState&Qt::WindowMinimized), + isMaximized(tb->titleBarState&Qt::WindowMaximized); + + if( (isMaximized && SC_TitleBarMaxButton==subControl) || + (isMinimized && SC_TitleBarMinButton==subControl) || + (isMinimized && SC_TitleBarShadeButton==subControl) || + (!isMinimized && SC_TitleBarUnshadeButton==subControl)) + return QRect(); + + readMdiPositions(); + + const int windowMargin(2); + const int controlSize(tb->rect.height() - windowMargin *2); + + QList::ConstIterator it(itsMdiButtons[0].begin()), + end(itsMdiButtons[0].end()); + int sc(SC_TitleBarUnshadeButton==subControl + ? SC_TitleBarShadeButton + : SC_TitleBarNormalButton==subControl + ? isMaximized + ? SC_TitleBarMaxButton + : SC_TitleBarMinButton + : subControl), + pos(0), + totalLeft(0), + totalRight(0); + bool rhs(false), + found(false); + + for(; it!=end; ++it) + if(SC_TitleBarCloseButton==(*it) || WINDOWTITLE_SPACER==(*it) || tb->titleBarFlags&(toHint(*it))) + { + totalLeft+=WINDOWTITLE_SPACER==(*it) ? controlSize/2 : controlSize; + if(*it==sc) + found=true; + else if(!found) + pos+=WINDOWTITLE_SPACER==(*it) ? controlSize/2 : controlSize; + } + + if(!found) + { + pos=0; + rhs=true; + } + + it=itsMdiButtons[1].begin(); + end=itsMdiButtons[1].end(); + for(; it!=end; ++it) + if(SC_TitleBarCloseButton==(*it) || WINDOWTITLE_SPACER==(*it) || tb->titleBarFlags&(toHint(*it))) + { + if(WINDOWTITLE_SPACER!=(*it) || totalRight) + totalRight+=WINDOWTITLE_SPACER==(*it) ? controlSize/2 : controlSize; + if(rhs) + if(*it==sc) + { + pos+=controlSize; + found=true; + } + else if(found) + pos+=WINDOWTITLE_SPACER==(*it) ? controlSize/2 : controlSize; + } + + totalLeft+=(windowMargin*(totalLeft ? 2 : 1)); + totalRight+=(windowMargin*(totalRight ? 2 : 1)); + + if(SC_TitleBarLabel==subControl) + r.adjust(totalLeft, 0, -totalRight, 0); + else if(!found) + return QRect(); + else if(rhs) + r.setRect(r.right()-(pos+windowMargin), + r.top()+windowMargin, + controlSize, controlSize); + else + r.setRect(r.left()+windowMargin+pos, r.top()+windowMargin, + controlSize, controlSize); + return visualRect(tb->direction, tb->rect, r); + } + } +#endif default: break; // Remove compiler warnings... } - return KStyle::querySubControlMetrics(control, widget, sc, data); + return BASE_STYLE::querySubControlMetrics(control, widget, sc, data); } int QtCurveStyle::pixelMetric(PixelMetric metric, const QWidget *widget) const { switch(metric) { + case PM_MenuBarFrameWidth: + return TB_NONE==opts.toolbarBorders ? 0 : 1; case PM_MenuButtonIndicator: return 7; case PM_ButtonMargin: @@ -4989,7 +6747,7 @@ int QtCurveStyle::pixelMetric(PixelMetric metric, const QWidget *widget) const ? QTabBar::RoundedAbove==tb->shape() || QTabBar::TriangularAbove==tb->shape() ? 1 : -1 - : KStyle::pixelMetric(metric, widget); + : BASE_STYLE::pixelMetric(metric, widget); } case PM_TabBarTabShiftHorizontal: return 0; @@ -5000,49 +6758,63 @@ int QtCurveStyle::pixelMetric(PixelMetric metric, const QWidget *widget) const case PM_ButtonDefaultIndicator: return 0; case PM_DefaultFrameWidth: - if(QTC_DO_EFFECT && widget && !isFormWidget(widget) && - (::qt_cast(widget) || ::qt_cast(widget) || - ::qt_cast(widget))) + if(APP_KATE==itsThemedApp && widget && widget->parentWidget() && widget->parentWidget()->parentWidget() && + ::qt_cast(widget) && + ::qt_cast(widget->parentWidget()) && + ::qt_cast(widget->parentWidget()->parentWidget())) + return 0; + + if ((opts.square&SQUARE_SCROLLVIEW) && widget && ::qt_cast(widget)) + return (opts.gtkScrollViews || opts.thinSbarGroove) && !opts.highlightScrollViews ? 1 : 2; + + if(DO_EFFECT && opts.etchEntry && widget && !isFormWidget(widget) && + (::qt_cast(widget) || ::qt_cast(widget) || + ::qt_cast(widget) || ::qt_cast(widget))) return 3; else return 2; case PM_SpinBoxFrameWidth: - return QTC_DO_EFFECT && !isFormWidget(widget) ? 3 : 2; + return DO_EFFECT && !isFormWidget(widget) ? 3 : 2; case PM_IndicatorWidth: case PM_IndicatorHeight: - return QTC_CHECK_SIZE; + return DO_EFFECT && widget && !isFormWidget(widget) ? opts.crSize+2 : opts.crSize; case PM_ExclusiveIndicatorWidth: case PM_ExclusiveIndicatorHeight: - return QTC_RADIO_SIZE; + return DO_EFFECT && widget && !isFormWidget(widget) ? opts.crSize+2 : opts.crSize; case PM_TabBarTabOverlap: - return 1; + return TAB_MO_GLOW==opts.tabMouseOver ? 0 : 1; case PM_ProgressBarChunkWidth: - return 4; + return PROGRESS_CHUNK_WIDTH*3.4; case PM_DockWindowSeparatorExtent: return 4; case PM_DockWindowHandleExtent: return 10; case PM_SplitterWidth: - return 6; + return widget && widget->inherits("QDockWindowResizeHandle") + ? 9 + : LINE_1DOT==opts.splitters + ? 7 + : 6; case PM_ScrollBarSliderMin: - return 16; + return opts.sliderWidth+1; case PM_SliderThickness: - return SLIDER_TRIANGULAR==opts.sliderStyle ? 22 : 18; + return SLIDER_TRIANGULAR==opts.sliderStyle ? 22 : (SLIDER_SIZE+(ROTATED_SLIDER ? 8 : 3)); case PM_SliderControlThickness: - return SLIDER_TRIANGULAR==opts.sliderStyle ? 19 : 15; // This equates to 13, as we draw the handle 2 pix smaller for focus rect... + return SLIDER_TRIANGULAR==opts.sliderStyle ? 19 : (SLIDER_SIZE+(ROTATED_SLIDER ? 8 : 0)); // This equates to 13, as we draw the handle 2 pix smaller for focus rect... case PM_SliderLength: - return SLIDER_TRIANGULAR==opts.sliderStyle ? 11 : 21; + return SLIDER_TRIANGULAR==opts.sliderStyle ? 11 : (SLIDER_SIZE+(ROTATED_SLIDER ? -2 : 6)); case PM_ScrollBarExtent: // See KHTML note at top of file - return APP_KPRESENTER==itsThemedApp || + return opts.sliderWidth+ + (APP_KPRESENTER==itsThemedApp || ((APP_KONQUEROR==itsThemedApp || APP_KONTACT==itsThemedApp) && (!widget || isFormWidget(widget))) - ? 16 : 15; + ? 1 : 0); case PM_MaximumDragDistance: return -1; case PM_TabBarTabVSpace: return opts.highlightTab ? 11 : 9; default: - return KStyle::pixelMetric(metric, widget); + return BASE_STYLE::pixelMetric(metric, widget); } } @@ -5053,7 +6825,7 @@ int QtCurveStyle::kPixelMetric(KStylePixelMetric kpm, const QWidget *widget) con case KPM_MenuItemSeparatorHeight: return 2; default: - return KStyle::kPixelMetric(kpm, widget); + return BASE_STYLE::kPixelMetric(kpm, widget); } } @@ -5068,14 +6840,9 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge if (button && !button->text().isEmpty()) { - bool allowEtch(QTC_DO_EFFECT && !isFormWidget(widget)); - - const int constMinH(allowEtch ? 29 : 27); - int margin(2*pixelMetric(PM_ButtonMargin, widget)), mbi(button->isMenuButton() ? pixelMetric(PM_MenuButtonIndicator, widget) : 0), - w(contentsSize.width() + margin + mbi + 16), - h(contentsSize.height() + margin); + w(contentsSize.width() + margin + mbi + 16); // if(button->text()=="...") // w+=24; @@ -5090,26 +6857,15 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge w=constMinW; } - if(allowEtch) - h+=2; - - return QSize(w, h < constMinH ? constMinH : h); + return QSize(w, contentsSize.height() + margin+(DO_EFFECT && !isFormWidget(widget) && !opts.thinnerBtns + ? 6 : 4)); } break; } case CT_ComboBox: { - bool allowEtch(QTC_DO_EFFECT && !isFormWidget(widget)); - - const int constMinH(allowEtch ? 26 : 24); - - QSize sz(KStyle::sizeFromContents(contents, widget, contentsSize, data)); - int h(sz.height()); - - if(allowEtch) - h+=2; - - return QSize(sz.width(), hisSeparator()) { w = 10; - h = opts.thinnerMenuItems ? 6 : 8; + h = 7; } else { @@ -5155,7 +6911,7 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge // check | 4 pixels | item | 8 pixels | accel | 4 pixels | check // check is at least 16x16 - maxpmw=QMAX(maxpmw, 16); + maxpmw=QMAX(maxpmw, constMenuPixmapWidth); w += (maxpmw * 2) + 8; if (! mi->text().isNull() && mi->text().find('\t') >= 0) @@ -5165,7 +6921,7 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge } case CT_SpinBox: { - QSize size(KStyle::sizeFromContents(contents, widget, contentsSize, data)); + QSize size(BASE_STYLE::sizeFromContents(contents, widget, contentsSize, data)); if(!(size.height()%2)) size.setHeight(size.height()+1); @@ -5182,7 +6938,7 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge break; // Remove compiler warnings... } - return KStyle::sizeFromContents(contents, widget, contentsSize, data); + return BASE_STYLE::sizeFromContents(contents, widget, contentsSize, data); } int QtCurveStyle::styleHint(StyleHint stylehint, const QWidget *widget, const QStyleOption &option, @@ -5190,18 +6946,22 @@ int QtCurveStyle::styleHint(StyleHint stylehint, const QWidget *widget, const QS { switch(stylehint) { + case SH_PopupMenu_SubMenuPopupDelay: + return opts.menuDelay; case SH_ScrollView_FrameOnlyAroundContents: return opts.gtkScrollViews; case SH_EtchDisabledText: + return 0; case SH_Slider_SnapToValue: case SH_PrintDialog_RightAlignButtons: case SH_FontDialog_SelectAssociatedText: - case SH_MenuBar_AltKeyNavigation: case SH_PopupMenu_MouseTracking: case SH_PopupMenu_SpaceActivatesItem: case SH_ComboBox_ListMouseTracking: case SH_ScrollBar_MiddleClickAbsolutePosition: return 1; + case SH_MenuBar_AltKeyNavigation: + return 0; case SH_LineEdit_PasswordCharacter: if(opts.passwordChar) { @@ -5221,23 +6981,167 @@ int QtCurveStyle::styleHint(StyleHint stylehint, const QWidget *widget, const QS return 0; case SH_MenuBar_MouseTracking: return opts.menubarMouseOver ? 1 : 0; + case SH_TabBar_Alignment: + return AlignLeft; default: - return KStyle::styleHint(stylehint, widget, option, returnData); + return BASE_STYLE::styleHint(stylehint, widget, option, returnData); + } +} + +void QtCurveStyle::drawItem(QPainter *p, const QRect &r, int flags, const QColorGroup &cg, bool enabled, + const QPixmap *pixmap, const QString &text, int len, const QColor *penColor) const +{ + QRect r2(r); + + if((opts.gbLabel&GB_LBL_BOLD) && text.length() && p->device() && dynamic_cast(p->device())) + { + QGroupBox *box=static_cast(p->device()); + + if (!box->isCheckable()) + { + int left, + top, + width, + height; + QFontMetrics fm(p->fontMetrics()); + QRect rb(box->rect()); + int th(fm.height()+2); + QFont f(p->font()); + + rb.rect(&left, &top, &width, &height); + //rb.coords(&left, &top, &right, &bottom); + f.setBold(true); + p->setPen(box->colorGroup().foreground()); + p->setFont(f); + p->drawText(QRect(left, top, width, th), (QApplication::reverseLayout() + ? AlignRight + : AlignLeft)|AlignVCenter|ShowPrefix|SingleLine, + text); + return; + } + } + + int x = r.x(), + y = r.y(), + w = r.width(), + h = r.height(); + + p->setPen(penColor ? *penColor : cg.foreground()); + if (pixmap) + { + QPixmap pm(*pixmap); + bool clip = (flags&Qt::DontClip) == 0; + if (clip) + { + if (pm.width() < w && pm.height() < h) + clip = false; + else + { + p->save(); + QRegion cr = QRect(x, y, w, h); + if (p->hasClipping()) + cr &= p->clipRegion(QPainter::CoordPainter); + p->setClipRegion(cr); + } + } + if ((flags&Qt::AlignVCenter) == Qt::AlignVCenter) + y += h/2 - pm.height()/2; + else if ((flags&Qt::AlignBottom) == Qt::AlignBottom) + y += h - pm.height(); + if ((flags&Qt::AlignRight) == Qt::AlignRight) + x += w - pm.width(); + else if ((flags&Qt::AlignHCenter) == Qt::AlignHCenter) + x += w/2 - pm.width()/2; + else if (((flags&Qt::AlignLeft) != Qt::AlignLeft) && QApplication::reverseLayout()) // AlignAuto && rightToLeft + x += w - pm.width(); + + if (!enabled) + { + if (pm.mask()) // pixmap with a mask + { + if (!pm.selfMask()) // mask is not pixmap itself + { + QPixmap pmm(*pm.mask()); + pmm.setMask(*((QBitmap *)&pmm)); + pm = pmm; + } + } + else if (pm.depth() == 1) // monochrome pixmap, no mask + { + pm.setMask(*((QBitmap *)&pm)); +#ifndef QT_NO_IMAGE_HEURISTIC_MASK + } + else // color pixmap, no mask + { + QString k; + k.sprintf("$qt-drawitem-%x", pm.serialNumber()); + QPixmap *mask = QPixmapCache::find(k); + bool del=false; + if (!mask) + { + mask = new QPixmap(pm.createHeuristicMask()); + mask->setMask(*((QBitmap*)mask)); + del = !QPixmapCache::insert(k, mask); + } + pm = *mask; + if (del) + delete mask; +#endif + } + p->setPen(cg.text()); + } + p->drawPixmap(x, y, pm); + if (clip) + p->restore(); + } + else if (!text.isNull()) + { + if (!enabled) + p->setPen(cg.text()); + p->drawText(x, y, w, h, flags, text, len); } } -void QtCurveStyle::drawMenuItem(QPainter *p, const QRect &r, const QColorGroup &cg, +void QtCurveStyle::drawMenuItem(QPainter *p, const QRect &r, int flags, const QColorGroup &cg, bool mbi, int round, const QColor &bgnd, const QColor *cols) const { - if(opts.borderMenuitems) + int fill=opts.useHighlightForMenu && (!mbi || itsHighlightCols==cols) ? ORIGINAL_SHADE : 4, + border=opts.borderMenuitems ? 0 : fill; + + if(itsHighlightCols!=cols && mbi && !((flags&Style_Enabled) && (flags&Style_Active) && (flags&Style_Down)) && + !opts.colorMenubarMouseOver && (opts.borderMenuitems || !IS_FLAT(opts.menuitemAppearance))) + fill=ORIGINAL_SHADE; + + if(!mbi && APPEARANCE_FADE==opts.menuitemAppearance) + { + bool reverse=QApplication::reverseLayout(); + int roundOffet=ROUNDED ? 1 : 0; + QRect main(r.x()+(reverse ? 1+MENUITEM_FADE_SIZE : roundOffet+1), r.y()+roundOffet+1, + r.width()-(1+MENUITEM_FADE_SIZE), r.height()-(2+(roundOffet*2))), + fade(reverse ? r.x()+1 : r.width()-MENUITEM_FADE_SIZE, r.y()+1, MENUITEM_FADE_SIZE, r.height()-2); + + p->fillRect(main, cols[fill]); + if(ROUNDED) + { + main.addCoords(-1, -1, 1, 1); + drawBorder(USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE], p, main, + cg, Style_Horizontal|Style_Raised, reverse ? ROUNDED_RIGHT : ROUNDED_LEFT, + cols, WIDGET_MENU_ITEM, false, BORDER_FLAT, false, fill); + } + + QColor bgnd(USE_LIGHTER_POPUP_MENU ? itsLighterPopupMenuBgndCol : itsBackgroundCols[ORIGINAL_SHADE]); + drawGradient(reverse ? bgnd : cols[fill], reverse ? cols[fill] : bgnd, p, fade, false); + } + else if(mbi || opts.borderMenuitems) { int flags(Style_Raised); - bool stdColor(!mbi || SHADE_BLEND_SELECTED!=opts.shadeMenubars); + bool stdColor(!mbi || (SHADE_BLEND_SELECTED!=opts.shadeMenubars && SHADE_SELECTED!=opts.shadeMenubars)); + itsFormMode=true; flags|=Style_Horizontal; - if(stdColor) - drawLightBevel(bgnd, p, r, cg, flags, round, cols[ORIGINAL_SHADE], + if(stdColor && opts.borderMenuitems) + drawLightBevel(bgnd, p, r, cg, flags, round, cols[fill], cols, stdColor, !(mbi && IS_GLASS(opts.menubarAppearance)), WIDGET_MENU_ITEM); else { @@ -5246,31 +7150,32 @@ void QtCurveStyle::drawMenuItem(QPainter *p, const QRect &r, const QColorGroup & fr.addCoords(1, 1, -1, -1); if(fr.width()>0 && fr.height()>0) - drawBevelGradient(cols[ORIGINAL_SHADE], true, p, fr, true, - getWidgetShade(WIDGET_MENU_ITEM, true, false, opts.menuitemAppearance), - getWidgetShade(WIDGET_MENU_ITEM, false, false, opts.menuitemAppearance), - false, opts.menuitemAppearance, WIDGET_MENU_ITEM); - drawBorder(bgnd, p, r, cg, flags, round, cols, WIDGET_OTHER, false, BORDER_FLAT, false, 0); + drawBevelGradient(cols[fill], p, fr, true, false, opts.menuitemAppearance, WIDGET_MENU_ITEM); + drawBorder(bgnd, p, r, cg, flags, round, cols, WIDGET_OTHER, false, BORDER_FLAT, false, border); } + itsFormMode=false; } else - drawBevelGradient(cols[ORIGINAL_SHADE], true, p, r, true, - getWidgetShade(WIDGET_MENU_ITEM, true, false, opts.menuitemAppearance), - getWidgetShade(WIDGET_MENU_ITEM, false, false, opts.menuitemAppearance), - false, opts.menuitemAppearance, WIDGET_MENU_ITEM); + drawBevelGradient(cols[fill], p, r, true, false, opts.menuitemAppearance, WIDGET_MENU_ITEM); } -void QtCurveStyle::drawProgress(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, +void QtCurveStyle::drawProgress(QPainter *p, const QRect &rx, const QColorGroup &cg, SFlags flags, int round, const QWidget *widget) const { - if(r.width()<1) + if(rx.width()<1) return; + QRect r=opts.borderProgress + ? QRect(rx.x()+1, rx.y()+1, rx.width()-2, rx.height()-2) + : rx; int minWidth(3); bool drawFull(r.width()>minWidth), drawStripe(r.width()>(minWidth*1.5)); QRegion outer(r); + if(r.width()<3) + r.setWidth(3); + if(drawStripe) { int animShift=-PROGRESS_CHUNK_WIDTH; @@ -5317,200 +7222,155 @@ void QtCurveStyle::drawProgress(QPainter *p, const QRect &r, const QColorGroup & } } - if(drawFull) - { - flags|=Style_Raised|Style_Horizontal; + const QColor *use=flags&Style_Enabled || ECOLOR_BACKGROUND==opts.progressGrooveColor + ? itsProgressCols + ? itsProgressCols + : itsHighlightCols + : itsBackgroundCols; - drawLightBevel(cg.background(), p, r, cg, flags, round, itsMenuitemCols[ORIGINAL_SHADE], - itsMenuitemCols, true, true, WIDGET_PROGRESSBAR); + flags|=Style_Raised|Style_Horizontal; - if(drawStripe && opts.stripedProgress) - { - p->setClipRegion(outer); - drawLightBevel(cg.background(), p, r, cg, flags, round, itsMenuitemCols[1], - itsMenuitemCols, true, true, WIDGET_PROGRESSBAR); - p->setClipping(false); - } - } - else + drawLightBevel(cg.background(), p, r, cg, flags, round, use[ORIGINAL_SHADE], + use, false, true, WIDGET_PROGRESSBAR); + + if(drawStripe && opts.stripedProgress) { - p->setPen(itsMenuitemCols[QT_STD_BORDER]); - p->setBrush(itsMenuitemCols[ORIGINAL_SHADE]); - p->drawRect(r); + p->setClipRegion(outer); + drawLightBevel(cg.background(), p, r, cg, flags, round, use[1], + use, false, true, WIDGET_PROGRESSBAR); + p->setClipping(false); } - if(QTC_ROUNDED && r.width()>2 && ROUNDED_ALL!=round) + + if(opts.borderProgress) + drawBorder(cg.background(), p, r, cg, flags, !(opts.square&SQUARE_PROGRESS) && opts.fillProgress ? ROUNDED_ALL : round, + use, WIDGET_PROGRESSBAR, false, BORDER_FLAT, false, PBAR_BORDER); + else { - p->setPen(midColor(cg.background(), itsMenuitemCols[QT_STD_BORDER])); - if(!(round&CORNER_TL) || !drawFull) - p->drawPoint(r.x(), r.y()); - if(!(round&CORNER_BL) || !drawFull) - p->drawPoint(r.x(), r.y()+r.height()-1); - if(!(round&CORNER_TR) || !drawFull) - p->drawPoint(r.x()+r.width()-1, r.y()); - if(!(round&CORNER_BR) || !drawFull) - p->drawPoint(r.x()+r.width()-1, r.y()+r.height()-1); + r.addCoords(1, 1, -1, -1); + p->setPen(use[PBAR_BORDER]); + p->drawLine(r.topLeft(), r.topRight()); + p->drawLine(r.bottomLeft(), r.bottomRight()); } } -void QtCurveStyle::drawBevelGradient(const QColor &base, bool increase, QPainter *p, - const QRect &origRect, bool horiz, double shadeTop, - double shadeBot, bool sel, EAppearance bevApp, EWidget w) const +void QtCurveStyle::drawBevelGradient(const QColor &base, QPainter *p, const QRect &origRect, bool horiz, bool sel, EAppearance bevApp, EWidget w) const { + if(IS_FLAT(bevApp) && opts.colorSelTab && sel) + bevApp=APPEARANCE_GRADIENT; + if(IS_FLAT(bevApp)) p->fillRect(origRect, base); else { - EAppearance app(APPEARANCE_BEVELLED!=bevApp || WIDGET_BUTTON(w) || WIDGET_LISTVIEW_HEADER==w - ? bevApp - : APPEARANCE_GRADIENT); - - bool selected(opts.colorSelTab && (WIDGET_TAB_TOP==w || WIDGET_TAB_BOT==w) ? false : sel); - QRect r(0, 0, horiz ? QTC_PIXMAP_DIMENSION : origRect.width(), - horiz ? origRect.height() : QTC_PIXMAP_DIMENSION); - QString key(createKey(horiz ? r.height() : r.width(), base.rgb(), horiz, increase, - app2App(app, sel), w, shadeTop, shadeBot)); - QPixmap *pix(itsPixmapCache.find(key)); + bool tab(WIDGET_TAB_TOP==w || WIDGET_TAB_BOT==w), + selected(tab ? false : sel); + EAppearance app(selected + ? opts.sunkenAppearance + : WIDGET_LISTVIEW_HEADER==w && APPEARANCE_BEVELLED==bevApp + ? APPEARANCE_LV_BEVELLED + : APPEARANCE_BEVELLED!=bevApp || WIDGET_BUTTON(w) || WIDGET_LISTVIEW_HEADER==w || + WIDGET_NO_ETCH_BTN==w || WIDGET_MENU_BUTTON==w + ? bevApp + : APPEARANCE_GRADIENT); + QRect r(0, 0, horiz ? PIXMAP_DIMENSION : origRect.width(), + horiz ? origRect.height() : PIXMAP_DIMENSION); + QString key(createKey(horiz ? r.height() : r.width(), base.rgb(), horiz, app, + tab && sel && opts.colorSelTab ? CACHE_COL_SEL_TAB : CACHE_STD)); + QPixmap *pix(itsPixmapCache.find(key)); + bool inCache(true); if(!pix) { pix=new QPixmap(r.width(), r.height()); - QPainter pixPainter(pix); - - if(!selected && (IS_GLASS(app) || APPEARANCE_SPLIT_GRADIENT==app)) - { - if(WIDGET_TAB_BOT==w) - { - double t(shadeTop); - shadeTop=shadeBot; - shadeBot=t; - } + QPainter pixPainter(pix); - double shadeTopA(WIDGET_TAB_BOT==w - ? 1.0 - : APPEARANCE_SPLIT_GRADIENT==app - ? shadeTop - : shadeTop*SHADE_GLASS_TOP_A(app, w)), - shadeTopB(WIDGET_TAB_BOT==w - ? 1.0 - : APPEARANCE_SPLIT_GRADIENT==app - ? shadeTop-((shadeTop-shadeBot)*SPLIT_GRADIENT_FACTOR) - : shadeTop*SHADE_GLASS_TOP_B(app, w)), - shadeBotA(WIDGET_TAB_TOP==w - ? 1.0 - : APPEARANCE_SPLIT_GRADIENT==app - ? shadeBot+((shadeTop-shadeBot)*SPLIT_GRADIENT_FACTOR) - : shadeBot*SHADE_GLASS_BOT_A(app)), - shadeBotB(WIDGET_TAB_TOP==w - ? 1.0 - : APPEARANCE_SPLIT_GRADIENT==app - ? shadeBot - : shadeBot*SHADE_GLASS_BOT_B(app)); - - QColor topA, topB, botA, botB; - QRect r1(r), r2(r), r3(r); - - shade(base, &topA, shadeTopA); - shade(base, &topB, shadeTopB); - shade(base, &botA, shadeBotA); - shade(base, &botB, shadeBotB); + drawBevelGradientReal(base, &pixPainter, r, horiz, sel, app, w); + pixPainter.end(); + int cost(pix->width()*pix->height()*(pix->depth()/8)); - if(horiz) - { - r1.setHeight(r1.height()/2); - r2.setY(r2.y()+r1.height()); - } - else - { - r1.setWidth(r1.width()/2); - r2.setX(r2.x()+r1.width()); - } - drawGradient(topA, topB, increase, &pixPainter, r1, horiz); - drawGradient(botA, botB, increase, &pixPainter, r2, horiz); - } - else if(!selected && APPEARANCE_BEVELLED==app && - ((horiz ? r.height() - : r.width()) > (((WIDGET_BUTTON(w) ? 2 : 1)*BEVEL_BORDER(w))+4))) - { - if(WIDGET_LISTVIEW_HEADER==w) - { - QColor bot; - QRect r1(r), r2(r); + if(costdrawTiledPixmap(origRect, *pix); + if(!inCache) + delete pix; + } +} - if(horiz) - { - r1.setHeight(BEVEL_BORDER(w)); - r3.setHeight(BEVEL_BORDER(w)); - r2.setHeight(r.height()-(r1.height()+r3.height())); - r2.moveTop(r.y()+r1.height()); - r3.moveTop(r.y()+r1.height()+r2.height()); - } - else - { - r1.setWidth(BEVEL_BORDER(w)); - r3.setWidth(BEVEL_BORDER(w)); - r2.setWidth(r.width()-(r1.width()+r3.width())); - r2.moveLeft(r.x()+r1.width()); - r3.moveLeft(r.x()+r1.width()+r2.width()); - } +void QtCurveStyle::drawBevelGradientReal(const QColor &base, QPainter *p, const QRect &r, bool horiz, bool sel, EAppearance app, EWidget w) const +{ - shade(base, &top, SHADE_BEVEL_TOP); - shade(base, &midTop, SHADE_BEVEL_MID_TOP); - shade(base, &midBot, SHADE_BEVEL_MID_BOT); - shade(base, &bot, SHADE_BEVEL_BOT(w)); - drawGradient(top, midTop, true, &pixPainter, r1, horiz); - drawGradient(midTop, midBot, true, &pixPainter, r2, horiz); - drawGradient(midBot, bot, true, &pixPainter, r3, horiz); - } - } + const Gradient *grad=getGradient(app, &opts); + int numStops(grad->stops.size()), + lastPos(0), + size(horiz ? r.height() : r.width()); + bool topTab(WIDGET_TAB_TOP==w), + botTab(WIDGET_TAB_BOT==w); + QColor prev; + + if(botTab) + { + GradientStopCont::reverse_iterator it(grad->stops.rbegin()), + end(grad->stops.rend()); + + for(int i=0; it!=end; ++it, ++i) + { + QColor col; + int pos((int)(((1.0-(*it).pos)*size)+0.5)); + + if(sel && 0==i) + col=base; else - { - QColor top, - bot, - baseTopCol(opts.colorSelTab && sel && (WIDGET_TAB_TOP==w || WIDGET_TAB_BOT==w) - ? midColor(base, itsMenuitemCols[0], QTC_COLOR_SEL_TAB_FACTOR) : base); + shade(base, &col, opts.invertBotTab ? QMAX(INVERT_SHADE((*it).val), 0.9) : (*it).val); + + if(/*sel && */opts.colorSelTab && i>0) + col=tint(col, itsHighlightCols[0], (1.0-(*it).pos)*(0.2+TO_ALPHA(opts.colorSelTab))); + + if(i) + drawGradient(prev, col, p, + horiz + ? QRect(r.x(), lastPos, r.width(), pos-lastPos) + : QRect(lastPos, r.y(), pos-lastPos, r.height()), + horiz); + prev=col; + lastPos=pos; + } + } + else + { + GradientStopCont::const_iterator it(grad->stops.begin()), + end(grad->stops.end()); - if(equal(1.0, shadeTop)) - top=baseTopCol; - else - shade(baseTopCol, &top, shadeTop); - if(equal(1.0, shadeBot)) - bot=base; - else - shade(base, &bot, shadeBot); + for(int i=0; it!=end; ++it, ++i) + { + QColor col; + int pos((int)(((*it).pos*size)+0.5)); - drawGradient(top, bot, sel || APPEARANCE_INVERTED!=app ? increase : !increase, - &pixPainter, r, horiz); - } - pixPainter.end(); - itsPixmapCache.insert(key, pix, pix->width()*pix->height()*(pix->depth()/8)); + if(/*sel && */topTab && i==numStops-1) + col=base; + else + shade(base, &col, WIDGET_TAB_BOT==w ? QMAX((*it).val, 0.9) : (*it).val); + + if(sel && opts.colorSelTab && topTab && idrawTiledPixmap(origRect, *pix); } } -void QtCurveStyle::drawGradient(const QColor &top, const QColor &bot, bool increase, +void QtCurveStyle::drawGradient(const QColor &top, const QColor &bot, QPainter *p, QRect const &r, bool horiz) const { if(r.width()>0 && r.height()>0) @@ -5535,48 +7395,26 @@ void QtCurveStyle::drawGradient(const QColor &top, const QColor &bot, bool incre dg(((1<<16) * (bot.green() - gTop)) / size), db(((1<<16) * (bot.blue() - bTop)) / size); - if(increase) - if(horiz) + if(horiz) + { + for (i=0; i < size; i++) { - for (i=0; i < size; i++) - { - p->setPen(QColor(rl>>16, gl>>16, bl>>16)); - p->drawLine(rx, ry+i, rx2, ry+i); - rl += dr; - gl += dg; - bl += db; - } + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx, ry+i, rx2, ry+i); + rl += dr; + gl += dg; + bl += db; } - else - for(i=0; i < size; i++) - { - p->setPen(QColor(rl>>16, gl>>16, bl>>16)); - p->drawLine(rx+i, ry, rx+i, ry2); - rl += dr; - gl += dg; - bl += db; - } + } else - if(horiz) + for(i=0; i < size; i++) { - for(i=size-1; i>=0; i--) - { - p->setPen(QColor(rl>>16, gl>>16, bl>>16)); - p->drawLine(rx, ry+i, rx2, ry+i); - rl += dr; - gl += dg; - bl += db; - } + p->setPen(QColor(rl>>16, gl>>16, bl>>16)); + p->drawLine(rx+i, ry, rx+i, ry2); + rl += dr; + gl += dg; + bl += db; } - else - for(i=size-1; i>=0; i--) - { - p->setPen(QColor(rl>>16, gl>>16, bl>>16)); - p->drawLine(rx+i, ry, rx+i, ry2); - rl += dr; - gl += dg; - bl += db; - } } } } @@ -5596,34 +7434,44 @@ void QtCurveStyle::drawSbSliderHandle(QPainter *p, const QRect &orig, const QCol flags|=Style_Horizontal; flags|=Style_Raised; - drawLightBevel(p, r, cg, flags, slider -#ifndef QTC_SIMPLE_SCROLLBARS - || SCROLLBAR_NONE==opts.scrollbarType + drawLightBevel(p, r, cg, flags, (slider && !(opts.square&SQUARE_SLIDER)) +#ifndef SIMPLE_SCROLLBARS + || (!slider && !(opts.square&SQUARE_SB_SLIDER) && (SCROLLBAR_NONE==opts.scrollbarType || opts.flatSbarButtons)) #endif ? ROUNDED_ALL : ROUNDED_NONE, - getFill(flags, use), use, true, false, WIDGET_SB_SLIDER); - - const QColor *markers(/*opts.coloredMouseOver && flags&Style_MouseOver - ? SHADE_NONE==shade ? itsMouseOverCols : itsBackgroundCols - : */use); - if(flags & Style_Horizontal) - r.setX(r.x()+1); - else - r.setY(r.y()+1); + getFill(flags, use, false, SHADE_DARKEN==opts.shadeSliders), use, true, false, WIDGET_SB_SLIDER); if(LINE_NONE!=opts.sliderThumbs && (slider || ((flags & Style_Horizontal && r.width()>=min)|| r.height()>=min))) + { + const QColor *markers(/*opts.coloredMouseOver && flags&Style_MouseOver + ? itsMouseOverCols + : */use); + bool horiz(flags&Style_Horizontal); + + if(LINE_SUNKEN==opts.sliderThumbs) + if(horiz) + r.addCoords(0, -1, 0, 0); + else + r.addCoords(-1, 0, 0, 0); + else + r.addCoords(horiz ? 1 : 0, horiz ? 0 : 1, 0, 0); + switch(opts.sliderThumbs) { case LINE_FLAT: - drawLines(p, r, !(flags & Style_Horizontal), 3, 5, markers, 0, 5, 0, false); + drawLines(p, r, !horiz, 3, 5, markers, 0, 5, opts.sliderThumbs); break; case LINE_SUNKEN: - drawLines(p, r, !(flags & Style_Horizontal), 4, 3, markers, 0, 3); + drawLines(p, r, !horiz, 4, 3, markers, 0, 3, opts.sliderThumbs); + break; + case LINE_1DOT: + drawDot(p, r, markers); break; case LINE_DOTS: default: - drawDots(p, r, !(flags & Style_Horizontal), slider ? 3 : 5, slider ? 5 : 2, markers, 0, 5); + drawDots(p, r, !horiz, slider ? 3 : 5, slider ? 5 : 2, markers, 0, 5); } + } } void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGroup &cg, @@ -5631,24 +7479,29 @@ void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGro { bool horiz(SLIDER_TRIANGULAR==opts.sliderStyle ? r.height()>r.width() : r.width()>r.height()); - if(SLIDER_TRIANGULAR==opts.sliderStyle || (SLIDER_ROUND==opts.sliderStyle && ROUND_FULL==opts.round)) + if(SLIDER_TRIANGULAR==opts.sliderStyle || ((SLIDER_ROUND==opts.sliderStyle || SLIDER_ROUND_ROTATED==opts.sliderStyle) && FULLLY_ROUNDED)) { - const QColor *use(sliderColors(/*cg, */flags)); - const QColor &fill(getFill(flags, use)); + const QColor *use(sliderColors(/*cg, */flags)), + *border(flags&Style_MouseOver && (MO_GLOW==opts.coloredMouseOver || + MO_COLORED==opts.coloredMouseOver) + ? itsMouseOverCols : use); + const QColor &fill(getFill(flags, use, false, SHADE_DARKEN==opts.shadeSliders)); int x(r.x()), y(r.y()), xo(horiz ? 8 : 0), yo(horiz ? 0 : 8); PrimitiveElement direction(horiz ? PE_ArrowDown : PE_ArrowRight); bool drawLight(MO_PLASTIK!=opts.coloredMouseOver || !(flags&Style_MouseOver) || - (SLIDER_ROUND==opts.sliderStyle && + ((SLIDER_ROUND==opts.sliderStyle || SLIDER_ROUND_ROTATED)==opts.sliderStyle && (SHADE_BLEND_SELECTED==opts.shadeSliders || SHADE_SELECTED==opts.shadeSliders))); - int size(SLIDER_TRIANGULAR==opts.sliderStyle ? 15 : 13); + int size(SLIDER_TRIANGULAR==opts.sliderStyle ? 15 : 13), + borderVal(itsMouseOverCols==border ? SLIDER_MO_BORDER_VAL : BORDER_VAL(flags&Style_Enabled)); - if(horiz) - y++; - else - x++; + if(SLIDER_ROUND_ROTATED!=opts.sliderStyle) + if(horiz) + y++; + else + x++; QPointArray clipRegion; @@ -5694,13 +7547,13 @@ void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGro if(!tb) p->fillRect(QRect(x, y, r.width()-(horiz ? 0 : 2), r.height()-(horiz ? 2 : 0)), cg.background()); p->setClipRegion(QRegion(clipRegion)); // , QPainter::CoordPainter); - if(IS_FLAT(opts.appearance)) + if(IS_FLAT(opts.sliderAppearance)) { p->fillRect(r, fill); - if(MO_PLASTIK==opts.coloredMouseOver && flags&Style_MouseOver) + if(MO_PLASTIK==opts.coloredMouseOver && flags&Style_MouseOver && !opts.colorSliderMouseOver) { - int col(QTC_SLIDER_MO_SHADE), - len(QTC_SLIDER_MO_LEN); + int col(SLIDER_MO_SHADE), + len(SLIDER_MO_LEN); if(horiz) { @@ -5716,28 +7569,31 @@ void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGro } else { - drawBevelGradient(fill, true, p, QRect(x, y, horiz ? r.width()-1 : size, horiz ? size : r.height()-1), - horiz, SHADE_BEVEL_GRAD_LIGHT, SHADE_BEVEL_GRAD_DARK, - false, opts.sliderAppearance); + drawBevelGradient(fill, p, QRect(x, y, horiz ? r.width()-1 : size, horiz ? size : r.height()-1), + horiz, false, opts.sliderAppearance); - if(MO_PLASTIK==opts.coloredMouseOver && flags&Style_MouseOver) + if(MO_PLASTIK==opts.coloredMouseOver && flags&Style_MouseOver && !opts.colorSliderMouseOver) { - int col(QTC_SLIDER_MO_SHADE), - len(QTC_SLIDER_MO_LEN); + int col(SLIDER_MO_SHADE), + len(SLIDER_MO_LEN); if(horiz) { - drawBevelGradient(itsMouseOverCols[col], true, p, QRect(x+1, y+1, len, size-2), - horiz, SHADE_BEVEL_GRAD_LIGHT, SHADE_BEVEL_GRAD_DARK, false, opts.sliderAppearance); - drawBevelGradient(itsMouseOverCols[col], true, p, QRect(x+r.width()-(1+len), y+1, len, size-2), - horiz,SHADE_BEVEL_GRAD_LIGHT, SHADE_BEVEL_GRAD_DARK, false, opts.sliderAppearance); + drawBevelGradient(itsMouseOverCols[col], p, QRect(x+1, y+1, len, size-2), + horiz, false, opts.sliderAppearance); + drawBevelGradient(itsMouseOverCols[col], p, + QRect(x+r.width()-((SLIDER_ROUND_ROTATED==opts.sliderStyle ? 3 : 1)+len), + y+1, len, size-2), + horiz, false, opts.sliderAppearance); } else { - drawBevelGradient(itsMouseOverCols[col], true, p, QRect(x+1, y+1, size-2, len), - horiz, SHADE_BEVEL_GRAD_LIGHT, SHADE_BEVEL_GRAD_DARK, false, opts.sliderAppearance); - drawBevelGradient(itsMouseOverCols[col], true, p, QRect(x+1, y+r.height()-(1+len), size-2, len), - horiz, SHADE_BEVEL_GRAD_LIGHT, SHADE_BEVEL_GRAD_DARK, false, opts.sliderAppearance); + drawBevelGradient(itsMouseOverCols[col], p, QRect(x+1, y+1, size-2, len), + horiz, false, opts.sliderAppearance); + drawBevelGradient(itsMouseOverCols[col], p, + QRect(x+1, y+r.height()-((SLIDER_ROUND_ROTATED==opts.sliderStyle ? 3 : 1)+len), + size-2, len), + horiz, false, opts.sliderAppearance); } } } @@ -5769,20 +7625,20 @@ void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGro light.setPoints(3, x+1, y+8, x+1, y+1, x+9, y+1); } - p->setPen(midColor(use[QT_STD_BORDER], cg.background())); + p->setPen(midColor(border[borderVal], cg.background())); p->drawPolygon(aa); if(drawLight) { p->setPen(use[APPEARANCE_DULL_GLASS==opts.sliderAppearance ? 1 : 0]); p->drawPolyline(light); } - p->setPen(use[QT_STD_BORDER]); + p->setPen(border[borderVal]); p->drawPolygon(clipRegion); } else { p->drawPixmap(x, y, - *getPixmap(use[opts.coloredMouseOver && flags&Style_MouseOver ? 4 : QT_BORDER(flags&Style_Enabled)], + *getPixmap(border[borderVal], horiz ? PIX_SLIDER : PIX_SLIDER_V, 0.8)); if(drawLight) p->drawPixmap(x, y, *getPixmap(use[0], horiz ? PIX_SLIDER_LIGHT : PIX_SLIDER_LIGHT_V)); @@ -5793,10 +7649,11 @@ void QtCurveStyle::drawSliderHandle(QPainter *p, const QRect &r, const QColorGro { QRect sr(r); - if(horiz) - sr.addCoords(0, 1, 0, 0); - else - sr.addCoords(1, 0, 0, 0); + if(!ROTATED_SLIDER) + if(horiz) + sr.addCoords(0, 1, 0, 0); + else + sr.addCoords(1, 0, 0, 0); drawSbSliderHandle(p, sr, cg, flags|(horiz ? Style_Horizontal : 0), true); } @@ -5809,77 +7666,75 @@ void QtCurveStyle::drawSliderGroove(QPainter *p, const QRect &r, const QColorGro QRect groove(r); bool horiz(Qt::Horizontal==sliderWidget->orientation()), reverse(QApplication::reverseLayout()); - const QColor &usedCol=itsSliderCols - ? itsSliderCols[ORIGINAL_SHADE] - : itsMouseOverCols - ? itsMouseOverCols[ORIGINAL_SHADE] - : itsMenuitemCols[1]; + flags&=~Style_MouseOver; if(horiz) { int dh=(groove.height()-5)>>1; groove.addCoords(0, dh, 0, -dh); flags|=Style_Horizontal; + + if(!itsFormMode && DO_EFFECT) + groove.addCoords(0, -1, 0, 1); } else { int dw=(groove.width()-5)>>1; groove.addCoords(dw, 0, -dw, 0); + + if(!itsFormMode && DO_EFFECT) + groove.addCoords(-1, 0, 1, 0); } - drawLightBevel(p, groove, cg, flags|Style_Down, ROUNDED_ALL, itsBackgroundCols[flags&Style_Enabled ? 2 : ORIGINAL_SHADE], + drawLightBevel(p, groove, cg, flags, opts.square&SQUARE_SLIDER ? ROUNDED_NONE : ROUNDED_ALL, + itsBackgroundCols[flags&Style_Enabled ? 2 : ORIGINAL_SHADE], itsBackgroundCols, true, true, WIDGET_SLIDER_TROUGH); - if(opts.fillSlider && sliderWidget->maxValue()!=sliderWidget->minValue() && flags&Style_Enabled) + if(opts.fillSlider && (horiz ? sliderWidget->value()>0 : sliderWidget->value()maxValue()) && + sliderWidget->maxValue()!=sliderWidget->minValue() && flags&Style_Enabled) { - QRect used(groove); - int pos((int)(((double)(horiz ? groove.width() : groove.height()) / + QRect used(groove); + int pos((int)(((double)(horiz ? groove.width() : groove.height()) / (sliderWidget->maxValue()-sliderWidget->minValue())) * - (sliderWidget->value() - sliderWidget->minValue()))); - - if(horiz) + (sliderWidget->value() - sliderWidget->minValue()))); + if(pos>0) { - pos+=(groove.width()>10 && pos<(groove.width()/2)) ? 3 : 0; - if(reverse) - used.addCoords(groove.width()-pos, 0, 0, 0); + const QColor *usedCols=itsSliderCols ? itsSliderCols : itsHighlightCols; + + if(horiz) + { + pos+=(groove.width()>10 && pos<(groove.width()/2)) ? 3 : 0; + if(reverse) + used.addCoords(groove.width()-pos, 0, 0, 0); + else + used.addCoords(0, 0, -(groove.width()-pos), 0); + } else - used.addCoords(0, 0, -(groove.width()-pos), 0); - } - else - { - pos+=(groove.height()>10 && pos<(groove.height()/2)) ? 3 : 0; - used.addCoords(0, pos, 0, 0); + { + pos+=(groove.height()>10 && pos<(groove.height()/2)) ? 3 : 0; + used.addCoords(0, pos, 0, 0); + } + if(used.height()>0 && used.width()>0) + drawLightBevel(p, used, cg, flags, opts.square&SQUARE_SLIDER ? ROUNDED_NONE : ROUNDED_ALL, + usedCols[ORIGINAL_SHADE], usedCols, true, true, WIDGET_FILLED_SLIDER_TROUGH); } - if(used.height()>0 && used.width()>0) - drawLightBevel(p, used, cg, flags|Style_Down, ROUNDED_ALL, usedCol, NULL, - true, true, WIDGET_SLIDER_TROUGH); } } void QtCurveStyle::drawMenuOrToolBarBackground(QPainter *p, const QRect &r, const QColorGroup &cg, bool menu, bool horiz) const { + if(menu && APPEARANCE_STRIPED==opts.bgndAppearance && IS_FLAT(opts.menubarAppearance) && SHADE_NONE==opts.shadeMenubars) + return; + + QRect rx(r); EAppearance app(menu ? opts.menubarAppearance : opts.toolbarAppearance); - QColor color(menu && itsActive ? itsMenubarCols[ORIGINAL_SHADE] : cg.background()); - double from(0.0), to(0.0); + QColor color(menu ? menuColors(cg, itsActive)[ORIGINAL_SHADE] : cg.background()); - switch(app) - { - default: - case APPEARANCE_GRADIENT: - from=SHADE_MENU_LIGHT; - to=SHADE_MENU_DARK; - break; - case APPEARANCE_FLAT: - case APPEARANCE_RAISED: - break; - case APPEARANCE_SHINY_GLASS: - case APPEARANCE_DULL_GLASS: - from=SHADE_BEVEL_GRAD_LIGHT; - to=SHADE_BEVEL_GRAD_DARK; - } + if(menu && BLEND_TITLEBAR) + rx.addCoords(0, -qtcGetWindowBorderSize().titleHeight, 0, 0); - drawBevelGradient(color, true, p, r, horiz, from, to, false, app); + drawBevelGradient(color, p, rx, horiz, false, app); } void QtCurveStyle::drawHandleMarkers(QPainter *p, const QRect &r, SFlags flags, bool tb, @@ -5896,6 +7751,11 @@ void QtCurveStyle::drawHandleMarkers(QPainter *p, const QRect &r, SFlags flags, switch(handles) { + case LINE_NONE: + break; + case LINE_1DOT: + drawDot(p, r, border); + break; case LINE_DOTS: drawDots(p, r, !(flags & Style_Horizontal), 2, APP_KICKER==itsThemedApp ? 1 : tb ? 5 : 3, border, @@ -5907,37 +7767,53 @@ void QtCurveStyle::drawHandleMarkers(QPainter *p, const QRect &r, SFlags flags, QRect r1(r.x()+(tb ? 2 : (r.width()-6)/2), r.y(), 3, r.height()); drawLines(p, r1, true, (r.height()-8)/2, - tb ? 0 : (r.width()-5)/2, border, 0, 5, 0); + tb ? 0 : (r.width()-5)/2, border, 0, 5, handles); } else { QRect r1(r.x(), r.y()+(tb ? 2 : (r.height()-6)/2), r.width(), 3); drawLines(p, r1, false, (r.width()-8)/2, - tb ? 0 : (r.height()-5)/2, border, 0, 5, 0); + tb ? 0 : (r.height()-5)/2, border, 0, 5, handles); } break; case LINE_FLAT: drawLines(p, r, !(flags & Style_Horizontal), 2, APP_KICKER==itsThemedApp ? 1 : tb ? 4 : 2, border, - APP_KICKER==itsThemedApp ? 1 : tb ? -2 : 0, 4, 0, false); + APP_KICKER==itsThemedApp ? 1 : tb ? -2 : 0, 4, handles); break; default: drawLines(p, r, !(flags & Style_Horizontal), 2, APP_KICKER==itsThemedApp ? 1 : tb ? 4 : 2, border, - APP_KICKER==itsThemedApp ? 1 : tb ? -2 : 0, 3); + APP_KICKER==itsThemedApp ? 1 : tb ? -2 : 0, 3, handles); } } +void QtCurveStyle::drawHighlight(QPainter *p, const QRect &r, const QColorGroup &cg, bool horiz, bool inc) const +{ + QColor col1(midColor(cg.background(), itsMouseOverCols[ORIGINAL_SHADE])); + QRect r2(r); + + p->setPen(inc ? col1 : itsMouseOverCols[ORIGINAL_SHADE]); + p->drawLine(r2.x(), r2.y(), r2.x()+(horiz ? r2.width()-1 : 0), r2.y()+(horiz ? 0 : r2.height()-1)); + p->setPen(inc ? itsMouseOverCols[ORIGINAL_SHADE] : col1); + r2.addCoords(horiz ? 0 : 1, horiz ? 1 : 0, horiz ? 0 : 1, horiz ? 1 : 0); + p->drawLine(r2.x(), r2.y(), r2.x()+(horiz ? r2.width()-1 : 0), r2.y()+(horiz ? 0 : r2.height()-1)); +} + void QtCurveStyle::shadeColors(const QColor &base, QColor *vals) const { - QTC_SHADES + SHADES + + bool useCustom(USE_CUSTOM_SHADES(opts)); + double hl=TO_FACTOR(opts.highlightFactor); for(int i=0; imaxPos ? (minPos==-1 ? 0 : minPos) + : (maxPos==-1 ? 0 : maxPos)), SC_TitleBarShadeButton); + } + } } } +#endif bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) { @@ -6101,7 +8211,7 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) } else { -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 +#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 QToolButton *tb(::qt_cast(itsHoverWidget)); if(tb) @@ -6110,8 +8220,8 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) return HOVER_KICKER==itsHover; } else - { #endif + { QHeader *hd(::qt_cast(itsHoverWidget)); if(hd) @@ -6125,9 +8235,9 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) bool redraw(false); itsHover=rect.contains(pos) ? HOVER_HEADER : HOVER_NONE; - itsHoverSect=QTC_NO_SECT; + itsHoverSect=NO_SECT; - for(s=0; scount() && (QTC_NO_SECT==itsHoverSect || !redraw); ++s) + for(s=0; scount() && (NO_SECT==itsHoverSect || !redraw); ++s) { QRect r(hd->sectionRect(s)); bool hasNew(r.contains(pos)); @@ -6161,12 +8271,13 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) else if(down.contains(pos)) itsHover=HOVER_SW_DOWN; else - itsHover=HOVER_NONE; + itsHover=HOVER_SW_ENTRY; return (HOVER_SW_UP==itsHover && !up.contains(itsOldPos)) || (HOVER_SW_UP!=itsHover && up.contains(itsOldPos)) || (HOVER_SW_DOWN==itsHover && !down.contains(itsOldPos)) || - (HOVER_SW_DOWN!=itsHover && down.contains(itsOldPos)); + (HOVER_SW_DOWN!=itsHover && down.contains(itsOldPos)) || + (HOVER_SW_ENTRY==itsHover); } else { @@ -6202,23 +8313,32 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) if(arrow.contains(pos)) itsHover=HOVER_CB_ARROW; else - itsHover=HOVER_NONE; + { + QRect r(cb->rect()); + if(QApplication::reverseLayout()) + r.addCoords(6, 0, 0, 0); + else + r.addCoords(0, 0, -6, 0); + if(DO_EFFECT && opts.etchEntry) + r.addCoords(1, 0, -1, 0); + if(r.contains(pos)) + itsHover=HOVER_CB_ENTRY; + else + itsHover=HOVER_NONE; + } } return (HOVER_CB_ARROW==itsHover && !arrow.contains(itsOldPos)) || - (HOVER_CB_ARROW!=itsHover && arrow.contains(itsOldPos)); + (HOVER_CB_ARROW!=itsHover && arrow.contains(itsOldPos)) || + (HOVER_CB_ENTRY==itsHover); } else return itsOldPos==QPoint(-1, -1); } } -#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500 } -#endif -#if KDE_VERSION >= 0x30400 } -#endif } #if QT_VERSION >= 0x030200 } @@ -6228,19 +8348,19 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos) return false; } -const QColor & QtCurveStyle::getFill(SFlags flags, const QColor *use) const +const QColor & QtCurveStyle::getFill(SFlags flags, const QColor *use, bool cr, bool darker) const { return !(flags&Style_Enabled) - ? use[ORIGINAL_SHADE] + ? use[darker ? 2 : ORIGINAL_SHADE] : flags&Style_Down - ? use[4] + ? use[darker ? 5 : 4] : flags&Style_MouseOver - ? flags&(Style_On | Style_Sunken) - ? use[SHADE_4_HIGHLIGHT] - : use[SHADE_ORIG_HIGHLIGHT] - : flags&(Style_On | Style_Sunken) - ? use[4] - : use[ORIGINAL_SHADE]; + ? !cr && (flags&(Style_On | Style_Sunken)) + ? use[darker ? 3 : SHADE_4_HIGHLIGHT] + : use[darker ? SHADE_2_HIGHLIGHT : SHADE_ORIG_HIGHLIGHT] + : !cr && (flags&(Style_On | Style_Sunken)) + ? use[darker ? 5 : 4] + : use[darker ? 2 : ORIGINAL_SHADE]; } const QColor & QtCurveStyle::getTabFill(bool current, bool highlight, const QColor *use) const @@ -6252,6 +8372,59 @@ const QColor & QtCurveStyle::getTabFill(bool current, bool highlight, const QCol : use[2]; } +const QColor & QtCurveStyle::menuStripeCol() const +{ + switch(opts.menuStripe) + { + default: + case SHADE_NONE: + return itsBackgroundCols[ORIGINAL_SHADE]; + case SHADE_CUSTOM: + return opts.customMenuStripeColor; + case SHADE_BLEND_SELECTED: + // Hack! Use opts.customMenuStripeColor to store this setting! + if(IS_BLACK(opts.customMenuStripeColor)) + opts.customMenuStripeColor=midColor(itsHighlightCols[ORIGINAL_SHADE], + opts.lighterPopupMenuBgnd<0 + ? itsLighterPopupMenuBgndCol + : itsBackgroundCols[ORIGINAL_SHADE]); + return opts.customMenuStripeColor; + case SHADE_SELECTED: + return itsHighlightCols[MENU_STRIPE_SHADE]; + case SHADE_DARKEN: + return USE_LIGHTER_POPUP_MENU + ? itsLighterPopupMenuBgndCol + : itsBackgroundCols[MENU_STRIPE_SHADE]; + } +} + +const QColor & QtCurveStyle::checkRadioCol(SFlags flags, const QColorGroup &cg) const +{ + if(flags&MENU_ITEM) + return flags&Style_Enabled && flags&Style_Active && opts.useHighlightForMenu + ? cg.highlightedText() + : cg.foreground(); + + return flags&Style_Enabled + ? itsCheckRadioCol + : opts.crButton + ? cg.buttonText() + : cg.text(); +} + +QColor QtCurveStyle::shade(const QColor &a, float k) const +{ + QColor mod; + + ::shade(&opts, a, &mod, k); + return mod; +} + +void QtCurveStyle::shade(const color &ca, color *cb, double k) const +{ + ::shade(&opts, ca, cb, k); +} + QPixmap * QtCurveStyle::getPixelPixmap(const QColor col) const { QRgb rgb(col.rgb()); @@ -6274,6 +8447,68 @@ QPixmap * QtCurveStyle::getPixelPixmap(const QColor col) const return pix; } +QPixmap * QtCurveStyle::createStripePixmap(const QColor &col, bool forWindow) const +{ + QRgb rgb(col.rgb()); + QString key(createKey(rgb, forWindow ? 'S' : 's')); + + QPixmap *pix=itsPixmapCache.find(key); + + if(!pix) + { + QColor col2(shade(col, BGND_STRIPE_SHADE)); + int i, + adjust=forWindow ? qtcGetWindowBorderSize().titleHeight%4 : 0; + + pix=new QPixmap(64, 64); + pix->fill(col.rgb()); + + QPainter p; + p.begin(pix); + p.setPen(QColor((3*col.red()+col2.red())/4, + (3*col.green()+col2.green())/4, + (3*col.blue()+col2.blue())/4)); + + for (i=1; i<68; i+=4) + { + p.drawLine(0, i-adjust, 63, i-adjust); + p.drawLine(0, i+2-adjust, 63, i+2-adjust); + } + p.setPen(col2); + for (i=2; i<67; i+=4) + p.drawLine(0, i-adjust, 63, i-adjust); + p.end(); + } + + return pix; +} + +static QImage rotateImage(const QImage &img, double angle=90.0) +{ + QWMatrix matrix; + matrix.translate(img.width()/2, img.height()/2); + matrix.rotate(angle); + + QRect newRect(matrix.mapRect(QRect(0, 0, img.width(), img.height()))); + + return img.xForm(QWMatrix(matrix.m11(), matrix.m12(), matrix.m21(), matrix.m22(), + matrix.dx() - newRect.left(), matrix.dy() - newRect.top())); +} + +static void recolour(QImage &img, const QColor &col, double shade) +{ + if (img.depth()<32) + img=img.convertDepth(32); + + adjustPix(img.bits(), 4, img.width(), img.height(), img.bytesPerLine(), col.red(), col.green(), col.blue(), shade); +} + +void QtCurveStyle::drawDot(QPainter *p, const QRect &r, const QColor *cols) const +{ + QPixmap *pix=getPixmap(cols[STD_BORDER], PIX_DOT, 0.9); + p->drawPixmap(r.x()+((r.width()-pix->width())>>1), r.y()+((r.height()-pix->height())>>1), *pix); +} + QPixmap * QtCurveStyle::getPixmap(const QColor col, EPixmap p, double shade) const { QRgb rgb(col.rgb()); @@ -6291,11 +8526,14 @@ QPixmap * QtCurveStyle::getPixmap(const QColor col, EPixmap p, double shade) con case PIX_RADIO_BORDER: img.loadFromData(qembed_findData("radio_frame.png")); break; + case PIX_RADIO_INNER: + img.loadFromData(qembed_findData("radio_inner.png")); + break; case PIX_RADIO_LIGHT: img.loadFromData(qembed_findData("radio_light.png")); break; case PIX_RADIO_ON: - img.loadFromData(qembed_findData("radio_on.png")); + img.loadFromData(qembed_findData(opts.smallRadio ? "radio_on_small.png" : "radio_on.png")); break; case PIX_CHECK: img.loadFromData(qembed_findData(opts.xCheck ? "check_x_on.png" : "check_on.png")); @@ -6307,18 +8545,24 @@ QPixmap * QtCurveStyle::getPixmap(const QColor col, EPixmap p, double shade) con img.loadFromData(qembed_findData("slider_light.png")); break; case PIX_SLIDER_V: - img.loadFromData(qembed_findData("slider_v.png")); + img.loadFromData(qembed_findData("slider.png")); + img=rotateImage(img); break; case PIX_SLIDER_LIGHT_V: - img.loadFromData(qembed_findData("slider_light_v.png")); + img.loadFromData(qembed_findData("slider_light.png")); + img=rotateImage(img).mirror(true, false); + break; + case PIX_DOT: + img.loadFromData(qembed_findData("dot.png")); + break; + default: break; } if (img.depth()<32) img=img.convertDepth(32); - adjustPix(img.bits(), 4, img.width(), img.height(), img.bytesPerLine(), col.red(), - col.green(), col.blue(), shade); + adjustPix(img.bits(), 4, img.width(), img.height(), img.bytesPerLine(), col.red(), col.green(), col.blue(), shade); pix->convertFromImage(img); itsPixmapCache.insert(key, pix, pix->depth()/8); } @@ -6331,21 +8575,58 @@ void QtCurveStyle::setSbType() switch(opts.scrollbarType) { case SCROLLBAR_KDE: - this->setScrollBarType(KStyle::ThreeButtonScrollBar); + this->setScrollBarType(BASE_STYLE::ThreeButtonScrollBar); break; default: case SCROLLBAR_WINDOWS: - this->setScrollBarType(KStyle::WindowsStyleScrollBar); + this->setScrollBarType(BASE_STYLE::WindowsStyleScrollBar); break; case SCROLLBAR_PLATINUM: - this->setScrollBarType(KStyle::PlatinumStyleScrollBar); + this->setScrollBarType(BASE_STYLE::PlatinumStyleScrollBar); break; case SCROLLBAR_NEXT: - this->setScrollBarType(KStyle::NextStyleScrollBar); + this->setScrollBarType(BASE_STYLE::NextStyleScrollBar); break; } } +void QtCurveStyle::resetHover() +{ + itsIsSpecialHover=false; + itsOldPos.setX(-1); + itsOldPos.setY(-1); + itsHoverWidget=0L; + itsHoverSect=NO_SECT; + itsHover=HOVER_NONE; + itsHoverTab=0L; +} + +struct QtcMenuBar : public QMenuBar +{ + bool itemUnderPos(const QPoint &pos) + { + return -1!=itemAtPos(pos); + } +}; + +bool QtCurveStyle::isWindowDragWidget(QObject *o, const QPoint &pos) +{ + return opts.windowDrag && + (//qobject_cast(o) || + (::qt_cast(o) && (pos.isNull() || !((QtcMenuBar *)o)->itemUnderPos(pos))) + //|| qobject_cast(o) + //|| (o->inherits("QToolButton") && !static_cast(o)->isEnabled()) +// || qobject_cast(o) + //|| qobject_cast(o) + +// || ((*appType == Hacks::SMPlayer) && o->inherits(SMPlayerVideoWidget)) +// || ((*appType == Hacks::Dragon) && o->inherits(DragonVideoWidget)) + +// || o->inherits("QStatusBar") +// || (o->inherits("QLabel") && o->parent() && o->parent()->inherits("QStatusBar")) + ); +} + void QtCurveStyle::updateProgressPos() { // Taken from lipstik! @@ -6354,19 +8635,19 @@ void QtCurveStyle::updateProgressPos() bool visible(false); for (; it!=end; ++it) { - if (!::qt_cast(it.key())) - continue; - QProgressBar *pb(::qt_cast(it.key())); - if (it.key() -> isEnabled() && pb -> progress()!=pb->totalSteps()) + if (!pb) + continue; + + if(pb->isEnabled() && pb->progress()!=pb->totalSteps()) { // update animation Offset of the current Widget it.data() = (it.data() + (QApplication::reverseLayout() ? -1 : 1)) % (PROGRESS_CHUNK_WIDTH*2); - it.key()->update(); + pb->update(); } - if (it.key()->isVisible()) + if(pb->isVisible()) visible = true; } if (!visible) @@ -6391,4 +8672,10 @@ void QtCurveStyle::khtmlWidgetDestroyed(QObject *o) itsKhtmlWidgets.remove(static_cast(o)); } +void QtCurveStyle::hoverWidgetDestroyed(QObject *o) +{ + if(o==itsHoverWidget) + resetHover(); +} + #include "qtcurve.moc" diff --git a/style/qtcurve.h b/style/qtcurve.h index f021dd3..cccfb8f 100644 --- a/style/qtcurve.h +++ b/style/qtcurve.h @@ -2,7 +2,7 @@ #define __QTCURVE_H__ /* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -51,31 +51,30 @@ */ #include "config.h" +#ifdef QTC_QT_ONLY +#include "qtc_kstyle.h" +#else #include #include +#endif #include #include #include #include #include +#include #include "common.h" class QTimer; class QSlider; -class HighContrastStyle : public KStyle -{ - Q_OBJECT - - public: - - HighContrastStyle(); - virtual ~HighContrastStyle() { } - - const char * className(); -}; +#ifdef QTC_QT_ONLY +#define BASE_STYLE QtCKStyle +#else +#define BASE_STYLE KStyle +#endif -class QtCurveStyle : public HighContrastStyle +class QtCurveStyle : public BASE_STYLE { Q_OBJECT @@ -96,6 +95,8 @@ class QtCurveStyle : public HighContrastStyle APP_TORA, APP_KONTACT, APP_OPERA, + APP_SYSTEMSETTINGS, + APP_KATE, APP_OTHER }; @@ -112,14 +113,29 @@ class QtCurveStyle : public HighContrastStyle HOVER_KICKER, HOVER_SW_UP, HOVER_SW_DOWN, - HOVER_CB_ARROW + HOVER_SW_ENTRY, + HOVER_CB_ARROW, + HOVER_CB_ENTRY }; + enum EntryColor + { + ENTRY_FOCUS, + ENTRY_MOUSE_OVER, + ENTRY_NONE + }; + +#ifdef QTC_STYLE_SUPPORT QtCurveStyle(const QString &name=QString()); +#else + QtCurveStyle(); +#endif + virtual ~QtCurveStyle(); void polish(QApplication *app); void polish(QPalette &pal); + QColorGroup setColorGroup(const QColorGroup &old, const QColorGroup &act, bool dis=false); void polish(QWidget *widget); void unPolish(QWidget *widget); void drawLightBevel(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, @@ -129,12 +145,16 @@ class QtCurveStyle : public HighContrastStyle void drawLightBevel(const QColor &bgnd, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, int round, const QColor &fill, const QColor *custom=NULL, bool doBorder=true, bool doCorners=true, EWidget w=WIDGET_OTHER) const; - void drawEtch(QPainter *p, const QRect &r, const QColorGroup &cg, bool top, bool bot, bool raised=false) const; + void drawGlow(QPainter *p, const QRect &r, const QColorGroup &cg, EWidget w, const QColor *cols=0) const; + void drawEtch(QPainter *p, const QRect &r, const QColorGroup &cg, bool raised=false, bool square=false) const; void drawBorder(const QColor &bgnd, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, int round, const QColor *custom=NULL, EWidget w=WIDGET_OTHER, - bool doCorners=true, EBorder borderProfile=BORDER_FLAT, bool blendBorderColors=true, int borderVal=QT_STD_BORDER) const; + bool doCorners=true, EBorder borderProfile=BORDER_FLAT, bool blendBorderColors=true, int borderVal=STD_BORDER) const; + void drawMdiIcon(QPainter *painter, const QColor &color, const QColor &shadow, const QRect &r, bool sunken, int margin, + SubControl button) const; + void drawWindowIcon(QPainter *painter, const QColor &color, const QRect &r, bool sunken, int margin, SubControl button) const; void drawEntryField(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, - bool highlight, int round, EWidget=WIDGET_OTHER) const; + EntryColor coloration, int round, EWidget=WIDGET_ENTRY) const; void drawArrow(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, QStyle::PrimitiveElement pe, bool small=false, bool checkActive=false) const; void drawPrimitive(PrimitiveElement, QPainter *, const QRect &, const QColorGroup &, @@ -159,32 +179,40 @@ class QtCurveStyle : public HighContrastStyle const QStyleOption & = QStyleOption::Default) const; int styleHint(StyleHint, const QWidget *widget= 0, const QStyleOption & = QStyleOption::Default, QStyleHintReturn *returnData= 0) const; + void drawItem(QPainter *p, const QRect &r, int flags, const QColorGroup &cg, bool enabled, + const QPixmap *pixmap, const QString &text, int len=-1, const QColor *penColor=0) const; protected: bool appIsNotEmbedded(QDialog *dlg); bool eventFilter(QObject *object, QEvent *event); - void drawMenuItem(QPainter *p, const QRect &r, const QColorGroup &cg, + void drawMenuItem(QPainter *p, const QRect &r, int flags, const QColorGroup &cg, bool mbi, int round, const QColor &bgnd, const QColor *cols) const; void drawProgress(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, int round, const QWidget *widget) const; - void drawBevelGradient(const QColor &base, bool increase, QPainter *p, QRect const &r, - bool horiz, double shadeTop, double shadeBot, bool sel, EAppearance bevApp, - EWidget w=WIDGET_OTHER) const; - void drawGradient(const QColor &top, const QColor &bot, bool increase, QPainter *p, - const QRect &r, bool horiz=true) const; + void drawBevelGradient(const QColor &base, QPainter *p, QRect const &r, + bool horiz, bool sel, EAppearance bevApp, EWidget w=WIDGET_OTHER) const; + void drawBevelGradientReal(const QColor &base, QPainter *p, QRect const &r, + bool horiz, bool sel, EAppearance bevApp, EWidget w=WIDGET_OTHER) const; + void drawGradient(const QColor &top, const QColor &bot, QPainter *p, const QRect &r, bool horiz=true) const; void drawSbSliderHandle(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, bool slider=false) const; void drawSliderHandle(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, QSlider *slider, bool tb=false) const; void drawSliderGroove(QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, const QWidget *widget) const; - void drawMenuOrToolBarBackground(QPainter *p, const QRect &r, const QColorGroup &cg, bool menu=true, - bool horiz=true) const; + void drawMenuOrToolBarBackground(QPainter *p, const QRect &r, const QColorGroup &cg, bool menu=true, bool horiz=true) const; void drawHandleMarkers(QPainter *p, const QRect &r, SFlags flags, bool tb, ELine handles) const; + void drawHighlight(QPainter *p, const QRect &r, const QColorGroup &cg, bool horiz, bool inc) const; private: + static QColor shadowColor(const QColor col) + { + return qGray(col.rgb()) < 100 ? QColor(255, 255, 255) : QColor(0, 0, 0); + } + void shadeColors(const QColor &base, QColor *vals) const; const QColor * buttonColors(const QColorGroup &cg) const; + const QColor * checkRadioColors(const QColorGroup &cg, SFlags flags) const; const QColor * sliderColors(/*const QColorGroup &cg, */SFlags flags) const; const QColor * backgroundColors(const QColor &c) const; const QColor * backgroundColors(const QColorGroup &cg) const @@ -192,15 +220,28 @@ class QtCurveStyle : public HighContrastStyle const QColor * borderColors(SFlags flags, const QColor *use) const; const QColor * getSidebarButtons() const; void setMenuColors(const QColorGroup &cg); + const QColor * menuColors(const QColorGroup &cg, bool active) const; + void setDecorationColors(bool init=false); + const QColor * getMdiColors(const QColorGroup &cg, bool active) const; +#ifdef SET_MDI_WINDOW_BUTTON_POSITIONS + void readMdiPositions() const; +#endif bool redrawHoverWidget(const QPoint &pos); - const QColor & getFill(SFlags flags, const QColor *use) const; + const QColor & getFill(SFlags flags, const QColor *use, bool cr=false, bool darker=false) const; const QColor & getListViewFill(SFlags flags, const QColor *use) const; const QColor & getTabFill(bool current, bool highlight, const QColor *use) const; - + const QColor & menuStripeCol() const; + const QColor & checkRadioCol(SFlags flags, const QColorGroup &cg) const; + QColor shade(const QColor &a, float k) const; + void shade(const color &ca, color *cb, double k) const; + void drawDot(QPainter *p, const QRect &r, const QColor *cols) const; QPixmap * getPixelPixmap(const QColor col) const; QPixmap * getPixmap(const QColor col, EPixmap pix, double shade=1.0) const; + QPixmap * createStripePixmap(const QColor &col, bool forWindow) const; void setSbType(); bool isFormWidget(const QWidget *w) const { return itsKhtmlWidgets.contains(w); } + void resetHover(); + bool isWindowDragWidget(QObject *o, const QPoint &pos=QPoint()); private slots: @@ -208,25 +249,35 @@ class QtCurveStyle : public HighContrastStyle void progressBarDestroyed(QObject *bar); void sliderThumbMoved(int val); void khtmlWidgetDestroyed(QObject *o); + void hoverWidgetDestroyed(QObject *o); private: - Options opts; - QColor itsMenuitemCols[TOTAL_SHADES+1], + mutable Options opts; + QColor itsHighlightCols[TOTAL_SHADES+1], itsBackgroundCols[TOTAL_SHADES+1], itsMenubarCols[TOTAL_SHADES+1], + itsFocusCols[TOTAL_SHADES+1], *itsSliderCols, *itsDefBtnCols, *itsMouseOverCols, + *itsComboBtnCols, + *itsCheckRadioSelCols, + *itsSortedLvColors, + *itsProgressCols, itsButtonCols[TOTAL_SHADES+1], itsLighterPopupMenuBgndCol, itsCheckRadioCol; mutable QColor *itsSidebarButtonsCols; + mutable QColor *itsActiveMdiColors; + mutable QColor *itsMdiColors; + mutable QColor itsActiveMdiTextColor; + mutable QColor itsMdiTextColor; mutable QColor itsColoredButtonCols[TOTAL_SHADES+1]; mutable QColor itsColoredBackgroundCols[TOTAL_SHADES+1]; EApp itsThemedApp; mutable QCache itsPixmapCache; -#if KDE_VERSION >= 0x30200 +#if defined QTC_QT_ONLY || !defined KDE_VERSION || KDE_VERSION >= 0x30200 bool itsIsTransKicker; #endif EHover itsHover; @@ -241,6 +292,9 @@ class QtCurveStyle : public HighContrastStyle QTimer *itsAnimationTimer; mutable bool itsActive, itsIsSpecialHover; + mutable QValueList itsMdiButtons[2]; // 0=left, 1=right + QWidget *itsDragWidget; + bool itsDragWidgetHadMouseTracking; }; #endif diff --git a/style/qtcurve.themerc b/style/qtcurve.themerc index 3473ed0..9e4febe 100644 --- a/style/qtcurve.themerc +++ b/style/qtcurve.themerc @@ -1,6 +1,6 @@ [Misc] Name=QtCurve -Comment=Clean and elegant style +Comment=Highly configurable style ConfigPage=kstyle_qtcurve_config [KDE] WidgetStyle=QtCurve diff --git a/themes/Agua.qtcurve b/themes/Agua.qtcurve new file mode 100644 index 0000000..774485d --- /dev/null +++ b/themes/Agua.qtcurve @@ -0,0 +1,34 @@ +[Misc] +Name=Agua +[KDE] +WidgetStyle=qtc_agua +[Settings] +appearance=agua +bgndImage=true +comboBtn=selected +crColor=true +customShades=0 +defBtnIndicator=tint +fixParentlessDialogs=false +glowProgress=true +gtkComboMenus=true +highlightFactor=7 +lvAppearance=agua +menuDelay=225 +menuitemAppearance=harsh +progressAppearance=agua +round=max +roundAllTabs=false +shadeSliders=selected +sliderAppearance=agua +sliderStyle=triangular +sliderThumbs=none +stdBtnSizes=true +stripedProgress=diagonal +sunkenAppearance=inverted +titlebarBorder=false +titlebarButtonAppearance=agua +titlebarButtonColors=#C40000,#DCC864,#5ACC80,#4190C5,#8888CC,#D6D5D1,#D6D5D1,#D6D5D1,#D6D5D1 +titlebarButtons=85 +useHighlightForMenu=true +version=1.0.0 diff --git a/themes/Agua_II.qtcurve b/themes/Agua_II.qtcurve new file mode 100644 index 0000000..da4aff5 --- /dev/null +++ b/themes/Agua_II.qtcurve @@ -0,0 +1,165 @@ +[InactiveShadows] +Size=35 + +[KWin] +BorderSize=0 +CustomShadows=true +Grouping=false +OpaqueBorder=false +RoundBottom=false +TitleBarPad=1 + +[Settings] +activeTabAppearance=soft +animatedProgress=false +appearance=agua +bgndAppearance=flat +bgndGrad=horiz +bgndImage=none +bgndOpacity=100 +boldProgress=false +borderInactiveTab=false +borderMenuitems=false +borderProgress=false +borderSbarGroove=false +borderSelection=false +borderTab=true +buttonEffect=shadow +centerTabText=false +colorMenubarMouseOver=true +colorSelTab=0 +colorSliderMouseOver=false +coloredMouseOver=glow +coloredTbarMo=false +comboBtn=selected +comboSplitter=false +crButton=true +crColor=selected +crHighlight=3 +crSize=15 +customMenuNormTextColor=#000000 +customMenuSelTextColor=#000000 +customMenuTextColor=false +customShades=0 +customgradient1=light,0,1.2,0.45,1,1,1 +customgradient2=3d,0,0.75,0.3,0.9,1,1.1 +customgradient3=none,0,1.1,0.99,0.94,1,0.75 +darkerBorders=false +defBtnIndicator=tint +dlgOpacity=100 +doubleGtkComboArrow=true +drawStatusBarFrames=false +dwtAppearance=customgradient1 +dwtSettings=33 +embolden=false +etchEntry=false +expanderHighlight=3 +fadeLines=true +fillProgress=true +fillSlider=true +fixParentlessDialogs=false +flatSbarButtons=true +focus=glow +forceAlternateLvCols=true +gbFactor=-3 +gbLabel=9 +glowProgress=none +grooveAppearance=customgradient2 +groupBox=faded +gtkButtonOrder=false +gtkComboMenus=true +gtkScrollViews=false +handles=1dot +highlightFactor=7 +highlightScrollViews=false +highlightTab=false +inactiveTitlebarAppearance=customgradient3 +invertBotTab=true +lighterPopupMenuBgnd=2 +lvAppearance=agua +lvButton=false +lvLines=none +mapKdeIcons=true +menuBgndAppearance=flat +menuBgndGrad=horiz +menuBgndImage=none +menuBgndOpacity=100 +menuDelay=225 +menuIcons=true +menuStripe=none +menuStripeAppearance=darkinverted +menubarAppearance=customgradient3 +menubarApps=VirtualBox,smplayer,amarok,arora,kcalc,kaffeine +menubarHiding=1 +menubarMouseOver=true +menuitemAppearance=harsh +noBgndGradientApps= +noBgndImageApps= +noBgndOpacityApps=dragon,smplayer,inkscape,kaffeine,kscreenlocker +noDlgFixApps=plasma-netbook,plasma,plasma-desktop,kate +noMenuBgndOpacityApps=inkscape +noMenuStripeApps=soffice.bin,gtk +passwordChar=9679 +popupBorder=true +progressAppearance=agua +progressColor=origselected +progressGrooveAppearance=agua +progressGrooveColor=background +reorderGtkButtons=true +round=max +roundAllTabs=true +roundMbTopOnly=true +sbarBgndAppearance=gradient +scrollbarType=kde +selectionAppearance=harsh +shadeCheckRadio=none +shadeMenubarOnlyWhenActive=false +shadeMenubars=wborder +shadePopupMenu=false +shadeSliders=selected +shading=hsl +sliderAppearance=agua +sliderFill=true +sliderStyle=circular +sliderThumbs=none +sliderWidth=15 +smallRadio=true +sortedLv=none +splitterHighlight=3 +splitters=1dot +square=31 +statusbarApps=kde +statusbarHiding=1 +stdBtnSizes=true +stdSidebarButtons=false +stripedProgress=fade +stripedSbar=true +sunkenAppearance=inverted +tabAppearance=soft +tabBgnd=0 +tabMouseOver=glow +thinSbarGroove=false +thinnerBtns=true +thinnerMenuItems=false +titlebarAlignment=center-full +titlebarAppearance=customgradient3 +titlebarButtonAppearance=agua +titlebarButtonColors=#ED3D11,#EDE651,#4AD543,#5982F2,#9595E0,#D6D5D1,#D6D5D1,#D6D5D1,#D6D5D1 +titlebarButtons=3093 +titlebarEffect=etch +titlebarIcon=title +toolbarAppearance=flat +toolbarBorders=none +toolbarSeparators=sunken +toolbarTabs=false +unifyCombo=true +unifySpin=true +unifySpinBtns=false +useHighlightForMenu=true +useQtFileDialogApps=googleearth-bin +vArrows=true +version=1.6.0 +windowBorder=1 +windowDrag=1 +xCheck=false +xbar=false diff --git a/themes/CMakeLists.txt b/themes/CMakeLists.txt index ec017d4..0d9ce9b 100644 --- a/themes/CMakeLists.txt +++ b/themes/CMakeLists.txt @@ -1,4 +1,4 @@ -install(FILES Clear.qtcurve Dull_Glass.qtcurve Shiny_Glass.qtcurve Inverted.qtcurve Plain.qtcurve Glass.qtcurve - Human.qtcurve Plastic.qtcurve Murrine.qtcurve Curve.qtcurve Clean.qtcurve DESTINATION ${DATA_INSTALL_DIR}/QtCurve) +install(FILES Agua.qtcurve Agua_II.qtcurve Curve.qtcurve Flat.qtcurve Human.qtcurve Inverted.qtcurve + Klearlooks.qtcurve Milk.qtcurve Murrine.qtcurve Ozone.qtcurve Plastic.qtcurve Silk.qtcurve + DESTINATION ${DATA_INSTALL_DIR}/QtCurve) -install(FILES qtc_klearlooks.themerc DESTINATION ${DATA_INSTALL_DIR}/kstyle/themes) diff --git a/themes/Curve.qtcurve b/themes/Curve.qtcurve index d46ee06..f6eccb7 100644 --- a/themes/Curve.qtcurve +++ b/themes/Curve.qtcurve @@ -1,9 +1,12 @@ [Settings] +activeTabAppearance=raised animatedProgress=false appearance=raised borderMenuitems=true buttonEffect=none coloredMouseOver=none +comboSplitter=true +crHighlight=true customCheckRadioColor=#000000 customMenuNormTextColor=#000000 customMenuSelTextColor=#000000 @@ -14,23 +17,31 @@ darkerBorders=true defBtnIndicator=fontcolor drawStatusBarFrames=false embolden=false +fadeLines=false +fillProgress=true fillSlider=false +fixParentlessDialogs=false +focus=standard framelessGroupBoxes=true -gradientPbGroove=false +groupBoxLine=false gtkScrollViews=false gtkComboMenus=false gtkButtonOrder=false handles=sunken highlightFactor=8 +highlightScrollViews=false highlightTab=false lighterPopupMenuBgnd=false lvAppearance=raised lvLines=false mapKdeIcons=true +menuDelay=225 menubarAppearance=flat menubarMouseOver=false menuitemAppearance=inverted progressAppearance=inverted +progressGrooveAppearance=flat +progressGrooveColor=background round=none roundMbTopOnly=true scrollbarType=windows @@ -42,7 +53,6 @@ sliderAppearance=raised sliderStyle=plain sliderThumbs=sunken splitters=sunken -stdFocus=true stdSidebarButtons=false stripedProgress=false tabAppearance=raised @@ -51,3 +61,9 @@ toolbarAppearance=flat toolbarBorders=dark-all toolbarSeparators=sunken vArrows=true +menuStripe=false +menuStripeAppearance=flat +titlebarAppearance=flat +selectionAppearance=flat +squareScrollViews=true +sunkenScrollViews=false diff --git a/themes/Flat.qtcurve b/themes/Flat.qtcurve new file mode 100644 index 0000000..6df8a4a --- /dev/null +++ b/themes/Flat.qtcurve @@ -0,0 +1,69 @@ +[Settings] +activeTabAppearance=flat +animatedProgress=false +appearance=flat +borderMenuitems=true +buttonEffect=shadow +coloredMouseOver=none +comboSplitter=true +crHighlight=true +customCheckRadioColor=#000000 +customMenuNormTextColor=#000000 +customMenuSelTextColor=#000000 +customMenuTextColor=false +customMenubarsColor=#000000 +customSlidersColor=#000000 +darkerBorders=false +defBtnIndicator=fontcolor +drawStatusBarFrames=false +embolden=true +fadeLines=false +fillProgress=true +fillSlider=true +fixParentlessDialogs=false +focus=standard +framelessGroupBoxes=false +groupBoxLine=false +gtkScrollViews=false +gtkComboMenus=false +gtkButtonOrder=false +handles=sunken +highlightFactor=5 +highlightScrollViews=false +highlightTab=false +lighterPopupMenuBgnd=false +lvAppearance=flat +lvLines=false +mapKdeIcons=true +menuDelay=225 +menubarAppearance=flat +menubarMouseOver=true +menuitemAppearance=flat +progressAppearance=flat +progressGrooveAppearance=flat +progressGrooveColor=base +round=full +roundMbTopOnly=true +scrollbarType=kde +shadeCheckRadio=none +shadeMenubarOnlyWhenActive=false +shadeMenubars=darken +shadeSliders=none +sliderAppearance=flat +sliderStyle=plain +sliderThumbs=sunken +splitters=dashes +stdSidebarButtons=false +stripedProgress=false +tabAppearance=flat +thinnerMenuItems=false +toolbarAppearance=flat +toolbarBorders=light +toolbarSeparators=sunken +vArrows=false +menuStripe=false +menuStripeAppearance=flat +titlebarAppearance=flat +selectionAppearance=flat +squareScrollViews=false +sunkenScrollViews=false diff --git a/themes/Human.qtcurve b/themes/Human.qtcurve index ff01374..39ed2e1 100644 --- a/themes/Human.qtcurve +++ b/themes/Human.qtcurve @@ -1,9 +1,11 @@ [Settings] -animatedProgress=true +animatedProgress=false appearance=dullglass -borderMenuitems=true +borderMenuitems=false buttonEffect=shadow -coloredMouseOver=plastik +coloredMouseOver=glow +comboSplitter=true +crHighlight=false customCheckRadioColor=#000000 customMenuNormTextColor=#000000 customMenuSelTextColor=#000000 @@ -14,23 +16,31 @@ darkerBorders=true defBtnIndicator=colored drawStatusBarFrames=false embolden=false +fadeLines=false +fillProgress=true fillSlider=true +fixParentlessDialogs=false +focus=standard framelessGroupBoxes=true -gradientPbGroove=true +groupBoxLine=false gtkScrollViews=false gtkComboMenus=false gtkButtonOrder=false handles=dots highlightFactor=7 +highlightScrollViews=false highlightTab=true lighterPopupMenuBgnd=true lvAppearance=bevelled lvLines=false mapKdeIcons=true +menuDelay=225 menubarAppearance=gradient menubarMouseOver=true menuitemAppearance=gradient progressAppearance=shinyglass +progressGrooveAppearance=shinyglass +progressGrooveColor=base round=full roundMbTopOnly=true scrollbarType=windows @@ -39,10 +49,9 @@ shadeMenubarOnlyWhenActive=false shadeMenubars=darken shadeSliders=none sliderAppearance=gradient -sliderStyle=round +sliderStyle=plain sliderThumbs=dots splitters=dots -stdFocus=true stdSidebarButtons=false stripedProgress=true tabAppearance=gradient @@ -51,4 +60,9 @@ toolbarAppearance=flat toolbarBorders=light toolbarSeparators=sunken vArrows=false - +menuStripe=false +menuStripeAppearance=flat +titlebarAppearance=gradient +selectionAppearance=gradient +squareScrollViews=true +sunkenScrollViews=false diff --git a/themes/Inverted.qtcurve b/themes/Inverted.qtcurve index 3d0a25c..1c812e2 100644 --- a/themes/Inverted.qtcurve +++ b/themes/Inverted.qtcurve @@ -1,9 +1,11 @@ [Settings] -animatedProgress=true +animatedProgress=false appearance=inverted borderMenuitems=true buttonEffect=shadow coloredMouseOver=plastik +comboSplitter=false +crHighlight=false customCheckRadioColor=#000000 customMenuNormTextColor=#000000 customMenuSelTextColor=#000000 @@ -14,23 +16,31 @@ darkerBorders=false defBtnIndicator=colored drawStatusBarFrames=false embolden=false +fadeLines=false +fillProgress=true fillSlider=true +fixParentlessDialogs=false +focus=background framelessGroupBoxes=true -gradientPbGroove=true +groupBoxLine=false gtkScrollViews=false gtkComboMenus=false gtkButtonOrder=false handles=dots highlightFactor=5 +highlightScrollViews=true highlightTab=true lighterPopupMenuBgnd=true lvAppearance=inverted lvLines=false mapKdeIcons=true +menuDelay=225 menubarAppearance=inverted menubarMouseOver=true menuitemAppearance=inverted progressAppearance=inverted +progressGrooveAppearance=inverted +progressGrooveColor=base round=full roundMbTopOnly=true scrollbarType=kde @@ -42,7 +52,6 @@ sliderAppearance=inverted sliderStyle=round sliderThumbs=dots splitters=dots -stdFocus=false stdSidebarButtons=false stripedProgress=true tabAppearance=gradient @@ -51,4 +60,9 @@ toolbarAppearance=inverted toolbarBorders=none toolbarSeparators=dots vArrows=false - +menuStripe=true +menuStripeAppearance=inverted +titlebarAppearance=inverted +selectionAppearance=inverted +squareScrollViews=false +sunkenScrollViews=true diff --git a/themes/Klearlooks.qtcurve b/themes/Klearlooks.qtcurve new file mode 100644 index 0000000..34db872 --- /dev/null +++ b/themes/Klearlooks.qtcurve @@ -0,0 +1,74 @@ +animatedProgress=false +appearance=splitgradient +borderMenuitems=true +buttonEffect=shadow +coloredMouseOver=none +colorSelTab=true +colorTitlebarOnly=true +comboSplitter=true +crHighlight=false +customCheckRadioColor=#000000 +customMenuNormTextColor=#000000 +customMenuSelTextColor=#000000 +customMenuTextColor=false +customMenubarsColor=#000000 +customSlidersColor=#000000 +darkerBorders=false +defBtnIndicator=glow +drawStatusBarFrames=false +embolden=false +fadeLines=true +fillProgress=true +fillSlider=true +fixParentlessDialogs=false +focus=filled +framelessGroupBoxes=true +groupBoxLine=false +gtkScrollViews=true +gtkComboMenus=true +gtkButtonOrder=false +handles=dots +highlightFactor=7 +highlightScrollViews=false +highlightTab=false +lighterPopupMenuBgnd=15 +lvAppearance=splitgradient +lvLines=false +mapKdeIcons=true +menuDelay=225 +menubarAppearance=flat +menubarMouseOver=true +menuitemAppearance=splitgradient +progressAppearance=splitgradient +progressGrooveAppearance=flat +progressGrooveColor=dark +round=full +roundMbTopOnly=true +scrollbarType=windows +shadeCheckRadio=none +shadeMenubarOnlyWhenActive=false +shadeMenubars=darken +shadeSliders=selected +sliderStyle=plain +sliderAppearance=splitgradient +sliderThumbs=flat +splitters=dashes +stdFocus=true +stdSidebarButtons=false +stripedProgress=diagonal +tabAppearance=gradient +thinnerMenuItems=false +toolbarAppearance=splitgradient +toolbarBorders=light +toolbarSeparators=sunken +vArrows=true +windowApperance=gradient +menuStripe=false +menuStripeAppearance=flat +titlebarAppearance=gradient +selectionAppearance=gradient +squareScrollViews=true +sunkenAppearance=splitgradient +sunkenScrollViews=false +unifySpinBtns=true +thinnerBtns=true diff --git a/themes/Milk.qtcurve b/themes/Milk.qtcurve new file mode 100755 index 0000000..b043dc4 --- /dev/null +++ b/themes/Milk.qtcurve @@ -0,0 +1,69 @@ +[Settings] +appearance=customgradient4 +boldProgress=false +borderProgress=false +borderSbarGroove=false +comboSplitter=true +crColor=selected +customShades=0 +customgradient1=light,0,1.2,1,1 +customgradient2=3d,0,0.75,0.3,0.9,1,1.1 +customgradient3=none,0,1.1,0.99,0.94,1,0.75 +customgradient4=none,0,1.1,1,0.9 +customgradient5=none,0,1.25,1,0.75 +defBtnIndicator=tint +dwtSettings=40 +fixParentlessDialogs=false +forceAlternateLvCols=true +grooveAppearance=customgradient2 +gtkComboMenus=true +gtkScrollViews=false +highlightFactor=7 +inactiveTitlebarAppearance=customgradient3 +lvAppearance=bevelled +menuDelay=225 +menubarAppearance=customgradient3 +menubarHiding=3 +menuitemAppearance=customgradient5 +progressAppearance=customgradient5 +progressColor=selected +progressGrooveAppearance=customgradient4 +progressGrooveColor=background +reorderGtkButtons=true +round=max +sbarBgndAppearance=gradient +shadeMenubars=wborder +shadeSliders=selected +sliderAppearance=customgradient4 +sliderStyle=circular +sliderThumbs=none +square=31 +statusbarHiding=3 +stdBtnSizes=true +sunkenAppearance=inverted +thinSbarGroove=false +titlebarAppearance=customgradient3 +titlebarButtonAppearance=customgradient4 +titlebarButtonColors=#BA0D0D,#D6BA48,#40BA3A,#444FC4,#8282C3,#D6D5D1,#D6D5D1,#D6D5D1,#D6D5D1 +titlebarButtons=3605 +titlebarEffect=etch +useHighlightForMenu=true +version=1.5.0 +windowBorder=1 +windowDrag=3 + +[KWin] +BorderSize=0 +CloseOnMenuDoubleClick=true +ColorTitleOnly=true +ColoredShadow=false +CustomShadows=true +DrawBottom=true +Grouping=false +OpaqueBorder=false +RoundBottom=false +ShowResizeGrip=true +TitleBarPad=1 + +[InactiveShadows] +Size=35 diff --git a/themes/Murrine.qtcurve b/themes/Murrine.qtcurve index ede8110..f3a24de 100644 --- a/themes/Murrine.qtcurve +++ b/themes/Murrine.qtcurve @@ -1,9 +1,11 @@ [Settings] -animatedProgress=true +animatedProgress=false appearance=dullglass borderMenuitems=true buttonEffect=etch coloredMouseOver=colored +comboSplitter=true +crHighlight=false customCheckRadioColor=#000000 customMenuNormTextColor=#000000 customMenuSelTextColor=#000000 @@ -14,23 +16,31 @@ darkerBorders=false defBtnIndicator=fontcolor drawStatusBarFrames=false embolden=false +fadeLines=false +fillProgress=true fillSlider=true +fixParentlessDialogs=false +focus=standard framelessGroupBoxes=true -gradientPbGroove=false +groupBoxLine=false gtkScrollViews=false gtkComboMenus=false gtkButtonOrder=false handles=sunken highlightFactor=5 +highlightScrollViews=false highlightTab=true lighterPopupMenuBgnd=true lvAppearance=dullglass lvLines=false mapKdeIcons=true +menuDelay=225 menubarAppearance=dullglass menubarMouseOver=true menuitemAppearance=dullglass progressAppearance=dullglass +progressGrooveAppearance=dullglass +progressGrooveColor=base round=slight roundMbTopOnly=false scrollbarType=windows @@ -42,7 +52,6 @@ sliderAppearance=dullglass sliderStyle=plain sliderThumbs=sunken splitters=dashes -stdFocus=true stdSidebarButtons=false stripedProgress=true tabAppearance=gradient @@ -51,4 +60,9 @@ toolbarAppearance=flat toolbarBorders=light toolbarSeparators=sunken vArrows=false - +menuStripe=false +menuStripeAppearance=flat +titlebarAppearance=dullglass +selectionAppearance=dullglass +squareScrollViews=true +sunkenScrollViews=false diff --git a/themes/Ozone.qtcurve b/themes/Ozone.qtcurve new file mode 100644 index 0000000..57f38b9 --- /dev/null +++ b/themes/Ozone.qtcurve @@ -0,0 +1,170 @@ +[InactiveShadows] +Size=35 + +[KWin] +BorderSize=3 +CustomShadows=true +EdgePad=0 +Grouping=false +OpaqueBorder=false +OuterBorder=2 +InnerBorder=0 +RoundBottom=true +TitleBarPad=0 + +[Settings] +customAlphas=0.4,0.1 +activeTabAppearance=soft +animatedProgress=false +appearance=customgradient5 +bgndAppearance=customgradient4 +bgndGrad=horiz +bgndImage=none +bgndOpacity=100 +boldProgress=false +borderInactiveTab=true +borderMenuitems=false +borderProgress=true +borderSbarGroove=true +borderSelection=false +borderTab=true +buttonEffect=shadow +centerTabText=true +colorMenubarMouseOver=true +colorSelTab=0 +colorSliderMouseOver=false +coloredMouseOver=glow +coloredTbarMo=false +comboBtn=none +comboSplitter=false +crButton=true +crColor=none +crHighlight=0 +crSize=15 +customMenuNormTextColor=#000000 +customMenuSelTextColor=#000000 +customMenuTextColor=false +customShades=1.16,1.07,0.9,0.78,0.84,0.75 +customgradient1=3d,0,1.2,0.5,1,1,1 +customgradient2=3d,0,0.9,0.5,1,1,1 +customgradient3=none,0,1.12,1,1.15 +customgradient4=shine,0,1.05,1,0.92 +customgradient5=light,0,1.04,1,0.92 +darkerBorders=false +defBtnIndicator=glow +dlgOpacity=100 +doubleGtkComboArrow=true +drawStatusBarFrames=false +dwtAppearance=flat +dwtSettings=0 +embolden=false +etchEntry=false +expanderHighlight=3 +fadeLines=true +fillProgress=true +fillSlider=false +fixParentlessDialogs=false +flatSbarButtons=true +focus=glow +forceAlternateLvCols=false +gbFactor=-3 +gbLabel=9 +glowProgress=middle +grooveAppearance=inverted +groupBox=faded +gtkButtonOrder=false +gtkComboMenus=false +gtkScrollViews=true +handles=sunken +highlightFactor=3 +highlightScrollViews=true +highlightTab=false +inactiveTitlebarAppearance=none +invertBotTab=true +lighterPopupMenuBgnd=0 +lvAppearance=bevelled +lvButton=false +lvLines=old +mapKdeIcons=true +menuBgndAppearance=harsh +menuBgndGrad=horiz +menuBgndImage=none +menuBgndOpacity=100 +menuDelay=225 +menuIcons=true +menuStripe=none +menuStripeAppearance=darkinverted +menubarAppearance=flat +menubarApps=VirtualBox,smplayer,amarok,arora,kcalc,kaffeine +menubarHiding=0 +menubarMouseOver=true +menuitemAppearance=fade +noBgndGradientApps= +noBgndImageApps= +noBgndOpacityApps=dragon,smplayer,inkscape,totem,kaffeine,kscreenlocker,sonata +noDlgFixApps=plasma-netbook,plasma,plasma-desktop,kate +noMenuBgndOpacityApps=inkscape,totem,sonata +noMenuStripeApps=soffice.bin,gtk +passwordChar=9679 +popupBorder=true +progressAppearance=dullglass +progressColor=origselected +progressGrooveAppearance=inverted +progressGrooveColor=dark +reorderGtkButtons=false +round=extra +roundAllTabs=false +roundMbTopOnly=false +sbarBgndAppearance=flat +scrollbarType=kde +selectionAppearance=harsh +shadeCheckRadio=none +shadeMenubarOnlyWhenActive=false +shadeMenubars=none +shadePopupMenu=false +shadeSliders=none +shading=hsl +sliderAppearance=soft +sliderFill=true +sliderStyle=r-plain +sliderThumbs=none +sliderWidth=15 +smallRadio=true +sortedLv=none +splitterHighlight=0 +splitters=flat +square=0 +statusbarApps=kde +statusbarHiding=0 +stdBtnSizes=false +stdSidebarButtons=false +stripedProgress=none +stripedSbar=false +sunkenAppearance=customgradient3 +tabAppearance=soft +tabBgnd=0 +tabMouseOver=glow +thinSbarGroove=false +thinnerBtns=true +thinnerMenuItems=false +titlebarAlignment=center-full +titlebarAppearance=none +titlebarButtonAppearance=gradient +titlebarButtons=2117 +titlebarEffect=shadow +titlebarIcon=title +toolbarAppearance=flat +toolbarBorders=none +toolbarSeparators=sunken +toolbarTabs=false +unifyCombo=true +unifySpin=true +unifySpinBtns=false +useHighlightForMenu=false +useQtFileDialogApps=googleearth-bin +vArrows=true +version=1.6.1 +windowBorder=1 +windowDrag=3 +xCheck=false +xbar=false diff --git a/themes/Plastic.qtcurve b/themes/Plastic.qtcurve index b65be20..eeac916 100644 --- a/themes/Plastic.qtcurve +++ b/themes/Plastic.qtcurve @@ -1,54 +1,160 @@ +[KWin] +BorderSize=3 +Grouping=false +OpaqueBorder=false +OuterBorder=true +TitleBarPad=1 + [Settings] -animatedProgress=true +activeTabAppearance=flat +animatedProgress=false appearance=gradient -borderMenuitems=true +bgndAppearance=flat +bgndGrad=horiz +bgndImage=none +bgndOpacity=100 +boldProgress=true +borderInactiveTab=false +borderMenuitems=false +borderProgress=true +borderSbarGroove=true +borderSelection=false +borderTab=false buttonEffect=none +centerTabText=false +colorMenubarMouseOver=false +colorSelTab=0 +colorSliderMouseOver=false coloredMouseOver=plastik -customCheckRadioColor=#000000 +coloredTbarMo=false +comboBtn=none +comboSplitter=true +crButton=false +crColor=none +crHighlight=0 +crSize=13 customMenuNormTextColor=#000000 customMenuSelTextColor=#000000 customMenuTextColor=false -customMenubarsColor=#000000 -customSlidersColor=#000000 +customShades=0 +customgradient1=3d,0,1.2,0.5,1,1,1 +customgradient2=3d,0,0.9,0.5,1,1,1 darkerBorders=false -defBtnIndicator=colored +defBtnIndicator=fontcolor +dlgOpacity=100 +doubleGtkComboArrow=false drawStatusBarFrames=false +dwtAppearance=flat +dwtSettings=0 embolden=false -fillSlider=true -framelessGroupBoxes=false -gradientPbGroove=true -gtkScrollViews=false -gtkComboMenus=false +etchEntry=true +expanderHighlight=3 +fadeLines=false +fillProgress=false +fillSlider=false +fixParentlessDialogs=false +flatSbarButtons=false +focus=standard +forceAlternateLvCols=false +gbFactor=0 +gbLabel=0 +glowProgress=none +grooveAppearance=inverted +groupBox=plain gtkButtonOrder=false +gtkComboMenus=false +gtkScrollViews=false handles=dots highlightFactor=-2 -highlightTab=true -lighterPopupMenuBgnd=true +highlightScrollViews=false +highlightTab=false +inactiveTitlebarAppearance=gradient +invertBotTab=true +lighterPopupMenuBgnd=2 lvAppearance=gradient -lvLines=false +lvButton=false +lvLines=none mapKdeIcons=true +menuBgndAppearance=flat +menuBgndGrad=horiz +menuBgndImage=none +menuBgndOpacity=100 +menuDelay=225 +menuIcons=true +menuStripe=none +menuStripeAppearance=flat menubarAppearance=flat +menubarApps=VirtualBox,smplayer,amarok,arora,kcalc,kaffeine +menubarHiding=0 menubarMouseOver=true menuitemAppearance=gradient +noBgndGradientApps= +noBgndImageApps= +noBgndOpacityApps=dragon,smplayer,inkscape,kaffeine,kscreenlocker +noDlgFixApps=plasma-netbook,plasma,plasma-desktop,kate +noMenuBgndOpacityApps=inkscape +noMenuStripeApps=soffice.bin,gtk +passwordChar=9679 +popupBorder=true progressAppearance=flat +progressColor=origselected +progressGrooveAppearance=flat +progressGrooveColor=base +reorderGtkButtons=false round=full +roundAllTabs=false roundMbTopOnly=false -scrollbarType=windows +sbarBgndAppearance=flat +scrollbarType=kde +selectionAppearance=flat shadeCheckRadio=none shadeMenubarOnlyWhenActive=false shadeMenubars=none +shadePopupMenu=false shadeSliders=none +shading=hsl sliderAppearance=gradient +sliderFill=true sliderStyle=triangular sliderThumbs=dots +sliderWidth=15 +smallRadio=false +sortedLv=none +splitterHighlight=3 splitters=dots -stdFocus=true +square=256 +statusbarApps=kde +statusbarHiding=0 +stdBtnSizes=false stdSidebarButtons=false -stripedProgress=true +stripedProgress=plain +stripedSbar=false +sunkenAppearance=inverted tabAppearance=gradient +tabBgnd=0 +tabMouseOver=top +thinSbarGroove=false +thinnerBtns=false thinnerMenuItems=false +titlebarAlignment=left +titlebarAppearance=gradient +titlebarButtonAppearance=gradient +titlebarButtons=2 +titlebarEffect=shadow +titlebarIcon=menu toolbarAppearance=flat toolbarBorders=light-all toolbarSeparators=sunken +toolbarTabs=false +tooltipAppearance=flat +unifyCombo=false +unifySpin=false +unifySpinBtns=false +useHighlightForMenu=true +useQtFileDialogApps=googleearth-bin vArrows=false +version=1.6.0 +windowBorder=4 +windowDrag=0 xCheck=true +xbar=false diff --git a/themes/Silk.qtcurve b/themes/Silk.qtcurve new file mode 100644 index 0000000..1d183a6 --- /dev/null +++ b/themes/Silk.qtcurve @@ -0,0 +1,89 @@ +[Misc] +Name=Silk +Comment=QtCurve derived style. +[KDE] +WidgetStyle=qtc_silk +[Settings] +activeTabAppearance=flat +animatedProgress=false +appearance=customgradient2 +borderMenuitems=false +buttonEffect=shadow +colorSelTab=false +coloredMouseOver=glow +comboSplitter=false +crButton=true +crHighlight=false +customCheckRadioColor=#000000 +customMenuNormTextColor=#000000 +customMenuSelTextColor=#000000 +customMenuTextColor=false +customMenubarsColor=#000000 +customShades=1.16,1.07,0.9,0.78,0.84,0.75 +customSlidersColor=#000000 +customShadesX=1.1,1.1,1.1,1.1,1.1,1.1 +customgradient1=false,0,1.05,0.49,1,0.5,0.95,1,1 +customgradient2=false,0,1.05,1,1 +customgradient3=false,0.85,1,1,0.92 +customgradient4=false,0,1,1,0.98 +customgradient5=false,0,1.2,0.5,1,1,1 +customgradient6=false,0,0.9,0.5,1,1,1 +darkerBorders=false +defBtnIndicator=glow +drawStatusBarFrames=false +embolden=false +fadeLines=true +fixParentlessDialogs=false +flatSbarButtons=true +focus=filled +framelessGroupBoxes=true +groupBoxLine=true +gtkButtonOrder=false +gtkComboMenus=false +gtkScrollViews=false +handles=sunken +highlightFactor=0 +highlightScrollViews=false +highlightTab=false +inactiveTitlebarAppearance=customgradient6 +lighterPopupMenuBgnd=2 +lvAppearance=customgradient3 +lvLines=false +mapKdeIcons=true +menuDelay=225 +menuStripe=false +menuStripeAppearance=customgradient2 +menubarAppearance=customgradient4 +menubarMouseOver=true +menuitemAppearance=fade +progressAppearance=customgradient1 +progressGrooveAppearance=inverted +progressGrooveColor=dark +round=full +roundMbTopOnly=true +scrollbarType=kde +selectionAppearance=gradient +shadeCheckRadio=none +shadeMenubarOnlyWhenActive=false +shadeMenubars=none +shadeSliders=none +shading=hsl +sliderAppearance=customgradient2 +sliderStyle=plain +sliderThumbs=lines +splitters=flat +squareScrollViews=false +stdSidebarButtons=false +stripedProgress=none +sunkengradientX=false,0,0.5,0.5,0.1,1,0.9 +sunkenScrollViews=true +tabAppearance=flat +thinnerMenuItems=false +titlebarAppearance=customgradient5 +titlebarButtonAppearance=customgradient2 +toolbarAppearance=flat +toolbarBorders=none +toolbarSeparators=sunken +useHighlightForMenu=false +vArrows=true +xCheck=false -- cgit v1.2.3