summaryrefslogtreecommitdiffstats
path: root/style
diff options
context:
space:
mode:
Diffstat (limited to 'style')
-rw-r--r--style/CMakeLists.txt32
-rw-r--r--style/pixmaps.h167
-rw-r--r--style/qtc_fixx11h.h233
-rw-r--r--style/qtc_kstyle.cpp1717
-rw-r--r--style/qtc_kstyle.h324
-rw-r--r--style/qtcurve.cpp5645
-rw-r--r--style/qtcurve.h114
-rw-r--r--style/qtcurve.themerc2
8 files changed, 6437 insertions, 1797 deletions
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 <qcstring.h>
@@ -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 <fixx11h.h> 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 <[email protected]>
+ *
+ * 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 <qapplication.h>
+#include <qbitmap.h>
+#include <qcleanuphandler.h>
+#include <qmap.h>
+#include <qimage.h>
+#include <qlistview.h>
+#include <qmenubar.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qpopupmenu.h>
+#include <qprogressbar.h>
+#include <qscrollbar.h>
+#include <qsettings.h>
+#include <qslider.h>
+#include <qstylefactory.h>
+#include <qtabbar.h>
+#include <qtoolbar.h>
+
+#ifdef Q_WS_X11
+# include <X11/Xlib.h>
+# ifdef HAVE_XRENDER
+# include <X11/extensions/Xrender.h> // schroder
+ extern bool qt_use_xrender;
+# endif
+#else
+#undef HAVE_XRENDER
+#endif
+
+
+#include <limits.h>
+
+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<QWidget*>(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<QWidget*>(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<const char**>(kstyle_shade_xpm));
+ case SP_TitleBarUnshadeButton:
+ return QPixmap(const_cast<const char**>(kstyle_unshade_xpm));
+ case SP_TitleBarNormalButton:
+ return QPixmap(const_cast<const char**>(kstyle_normalizeup_xpm));
+ case SP_TitleBarMinButton:
+ return QPixmap(const_cast<const char**>(kstyle_minimize_xpm));
+ case SP_TitleBarMaxButton:
+ return QPixmap(const_cast<const char**>(kstyle_maximize_xpm));
+ case SP_TitleBarCloseButton:
+ return QPixmap(const_cast<const char**>(kstyle_close_xpm));
+ case SP_DockWindowCloseButton:
+ return QPixmap(const_cast<const char**>(dock_window_close_xpm ));
+ case SP_MessageBoxInformation:
+ return QPixmap(const_cast<const char**>(information_xpm));
+ case SP_MessageBoxWarning:
+ return QPixmap(const_cast<const char**>(warning_xpm));
+ case SP_MessageBoxCritical:
+ return QPixmap(const_cast<const char**>(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<QFrame*>(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 <[email protected]>
+ *
+ * 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 <qcommonstyle.h>
+
+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 ([email protected])
+ * @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 ([email protected])
+ */
+ 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 [email protected]
+ QtCurve (C) Craig Drummond, 2003 - 2010 [email protected]
----
@@ -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 <qtable.h>
+#include "config.h"
+#ifndef QTC_QT_ONLY
#include <kdeversion.h>
+#endif
#include <qsettings.h>
#include <qmenubar.h>
#include <qapplication.h>
@@ -95,11 +99,15 @@ dimension, so as to draw the scrollbar at the correct size.
#include <qtimer.h>
#include <qdatetimeedit.h>
#include <qobjectlist.h>
+#include <qpixmapcache.h>
+#include <qbitmap.h>
+#include <qmainwindow.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
-#define QTC_COMMON_FUNCTIONS
+#include <iostream>
+#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 <qstyleplugin.h>
#include <qgroupbox.h>
#include <qdir.h>
+// Need access to classname from within QMetaObject...
+#define private public
+#include <qmetaobject.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
-#include <fixx11h.h>
+#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<QRadioButton *>(w) ||
+ ::qt_cast<QCheckBox *>(w) ||
+#endif
+ ::qt_cast<QScrollBar *>(w) ||
+#if defined KDE_VERSION && KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500
+ ::qt_cast<QToolButton *>(w) ||
+
+#endif
+ ::qt_cast<QHeader *>(w) ||
+ ::qt_cast<QSpinWidget *>(w) ||
+ ::qt_cast<QComboBox *>(w) ||
+ ::qt_cast<QTabBar *>(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;
+
+ 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);
+ }
+ }
- return env.isEmpty()
- ? QDir::homeDirPath()+"/.kde"
- : env;
+ // 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)
+{
+ 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+QTC_THEME_DIR+n+QTC_THEME_SUFFIX);
+ 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 <qfile.h>
#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<const QTabWidget *>(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; i<space; i+=step)
- p->drawLine(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; i<space; i+=step)
- p->drawLine(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; i<space; i+=step)
- p->drawLine(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; i<space; i+=step)
- p->drawLine(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<int> &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<len; ++i)
+ switch(line[i].latin1())
{
- case QPalette::Active:
- pal.setActive(group);
+ case 'M':
+ data.append(QStyle::SC_TitleBarSysMenu);
+ break;
+ case '_':
+ data.append(WINDOWTITLE_SPACER);
+ break;
+// case 'H':
+// data.append(QStyle::SC_TitleBarContextHelpButton);
+// break;
+ case 'L':
+ data.append(QStyle::SC_TitleBarShadeButton);
break;
- case QPalette::Disabled:
- pal.setDisabled(group);
+ case 'I':
+ data.append(QStyle::SC_TitleBarMinButton);
break;
- case QPalette::Inactive:
- pal.setInactive(group);
+ case 'A':
+ data.append(QStyle::SC_TitleBarMaxButton);
+ break;
+ case 'X':
+ data.append(QStyle::SC_TitleBarCloseButton);
default:
break;
}
- }
-}
-
-static bool readQt4(QFile &f, QPalette &pal, QFont &font)
-{
- bool inSect(false),
- gotPal(false),
- gotFont(false);
-
- if(f.open(IO_ReadOnly))
- {
- QTextStream in(&f);
-
- while (!in.atEnd())
- {
- QString line(in.readLine());
-
- if(inSect)
- {
- gotPal=true;
- if(0==line.find("Palette\\active=#"))
- {
- readPal(line, QPalette::Active, pal);
- gotPal=true;
- }
- else if(0==line.find("Palette\\disabled=#"))
- {
- readPal(line, QPalette::Disabled, pal);
- gotPal=true;
- }
- else if(0==line.find("Palette\\inactive=#"))
- {
- readPal(line, QPalette::Inactive, pal);
- gotPal=true;
- }
- else if(0==line.find("font=\""))
- gotFont=font.fromString(line.mid(6, line.findRev('\"')-6));
- else if (0==line.find('['))
- break;
- }
- else if(0==line.find("[Qt]"))
- inSect=true;
- }
- f.close();
- }
-
- return gotPal && gotFont;
-}
-
-static bool useQt4Settings()
-{
- static const char *vers=getenv("KDE_SESSION_VERSION");
-
- return vers && atoi(vers)>=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;
-
- defaultSettings(&opts);
if(!name.isEmpty())
{
- rcFile=themeFile(kdeHome(), name);
+ rcFile=themeFile(kdeHome(), name, useQt3Settings());
if(rcFile.isEmpty())
{
- rcFile=themeFile(KDE_PREFIX(useQt4Settings() ? 4 : 3), name);
+ rcFile=themeFile(kdeHome(true), name);
if(rcFile.isEmpty())
- rcFile=themeFile(KDE_PREFIX(useQt4Settings() ? 3 : 4), name);
+ {
+ rcFile=themeFile(KDE_PREFIX(useQt3Settings() ? 3 : 4), name, useQt3Settings());
+ if(rcFile.isEmpty())
+ rcFile=themeFile(KDE_PREFIX(useQt3Settings() ? 4 : 3), name, !useQt3Settings());
+ }
}
}
- readConfig(rcFile, &opts, &opts);
- opts.contrast=QSettings().readNumEntry("/Qt/KDE/contrast", 7);
+ 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=7;
- itsPixmapCache.setAutoDelete(true);
+ opts.contrast=DEFAULT_CONTRAST;
- 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;
+ itsPixmapCache.setAutoDelete(true);
- shadeColors(QApplication::palette().active().highlight(), itsMenuitemCols);
+ shadeColors(QApplication::palette().active().highlight(), itsHighlightCols);
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)
+
+ setDecorationColors(true);
+
+ switch(opts.shadeSliders)
{
- 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_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);
}
- if(IND_COLORED==opts.defBtnIndicator)
- if(SHADE_BLEND_SELECTED==opts.shadeSliders)
- itsDefBtnCols=itsSliderCols;
- else
- {
+ switch(opts.defBtnIndicator)
+ {
+ case IND_GLOW:
+ case IND_SELECTED:
+ itsDefBtnCols=itsHighlightCols;
+ break;
+ case IND_TINT:
itsDefBtnCols=new QColor [TOTAL_SHADES+1];
- shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE],
- itsButtonCols[ORIGINAL_SHADE]), itsDefBtnCols);
- }
+ 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);
+ }
- 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.sortedLv)
+ {
+ 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);
+ }
+
+ switch(opts.crColor)
+ {
+ 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);
+ }
+ }
+
+ 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(newMouseOver)
- shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE],
- itsButtonCols[ORIGINAL_SHADE]), itsMouseOverCols);
+ 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(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<QDialog *>(widget) || ::qt_cast<QMainWindow *>(widget)))
+ setBgndProp(widget, APPEARANCE_STRIPED);
+
if(widget->parentWidget() && ::qt_cast<QScrollView *>(widget) && ::qt_cast<QComboBox *>(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<const QPopupMenu *>(widget))
+ widget->installEventFilter(this);
+
+ #if 0
+ if(opts.menubarHiding && ::qt_cast<QMainWindow *>(widget) && static_cast<QMainWindow *>(widget)->menuBar())
+ widget->installEventFilter(this);
+ #endif
+
+ if ((opts.square&SQUARE_SCROLLVIEW) && widget &&
+ (::qt_cast<const QScrollView *>(widget) ||
+ (widget->parentWidget() && ::qt_cast<const QFrame *>(widget) &&
+ widget->parentWidget()->inherits("KateView"))) &&
+ ((QFrame *)widget)->lineWidth()>1)
+ ((QFrame *)widget)->setLineWidth(opts.gtkScrollViews ? 1 : 2);
+ else if(!opts.popupBorder && widget &&
+ (::qt_cast<const QPopupMenu *>(widget) ||
+ (widget->parentWidget() && ::qt_cast<const QListBox *>(widget) &&
+ ::qt_cast<const QComboBox *>(widget->parentWidget()))))
+ ((QFrame *)widget)->setLineWidth(0);
+ else if ((USE_LIGHTER_POPUP_MENU || !IS_FLAT_BGND(opts.menuBgndAppearance)) && !opts.borderMenuitems &&
+ widget && ::qt_cast<const QPopupMenu *>(widget))
+ ((QFrame *)widget)->setLineWidth(1);
+
if (::qt_cast<QRadioButton *>(widget) || ::qt_cast<QCheckBox *>(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<QMenuBar *>(widget) || ::qt_cast<QToolBar *>(widget))
+ else if(::qt_cast<QMenuBar *>(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<QToolBar *>(widget))
+ {
+ if(NoBackground!=widget->backgroundMode())
+ widget->setBackgroundMode(PaletteBackground);
}
else if(::qt_cast<QPopupMenu *>(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<QFrame *>(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<QScrollView*>(widget))
+ else if(opts.highlightScrollViews && ::qt_cast<QScrollView*>(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<QGroupBox *>(widget)))
+ else if(widget->inherits("KTabCtl"))
widget->installEventFilter(this);
+ else if(NO_FRAME(opts.groupBox) && ::qt_cast<QGroupBox *>(widget))
+ {
+ ((QGroupBox *)widget)->setFlat(false);
+ ((QGroupBox *)widget)->setFrameShape(QFrame::NoFrame);
+ }
+#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT
else if(opts.fixParentlessDialogs && ::qt_cast<QDialog *>(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<QProgressDialog *>(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<QFrame *>(widget) && QFrame::NoFrame!=((QFrame *)widget)->frameShape() &&
+ ::qt_cast<QFrame *>(widget->parentWidget()) &&
+ ::qt_cast<QTabWidget *>(widget->parentWidget()->parentWidget()))
+ ((QFrame *)widget)->setFrameShape(QFrame::NoFrame);
+
+ if(widget->parentWidget() && widget->parentWidget()->parentWidget() &&
+ ::qt_cast<QScrollView *>(widget->parentWidget()->parentWidget()) &&
+ widget->inherits("KCMultiWidget") && widget->parentWidget()->inherits("QViewportWidget"))
+ ((QScrollView *)(widget->parentWidget()->parentWidget()))->setLineWidth(0);
+ }
- KStyle::polish(widget);
+ if(opts.tabBgnd && widget && widget->parentWidget() && ::qt_cast<QWidgetStack *>(widget) &&
+ ::qt_cast<QTabWidget *>(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);
+ }
+
+ 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<const QPopupMenu *>(widget))
+ widget->removeEventFilter(this);
+
+ #if 0
+ if(opts.menubarHiding && ::qt_cast<QMainWindow *>(widget) && static_cast<QMainWindow *>(widget)->menuBar())
+ widget->removeEventFilter(this);
+ #endif
+
+ if(isWindowDragWidget(widget))
+ widget->removeEventFilter(this);
+
if (::qt_cast<QRadioButton *>(widget) || ::qt_cast<QCheckBox *>(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<QLineEdit*>(widget) || ::qt_cast<QTextEdit*>(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<QProgressBar*>(widget))
{
itsProgAnimWidgets.remove(widget);
widget->removeEventFilter(this);
}
-#ifdef QTC_HIGHLIGHT_SCROLVIEWS
- else if(::qt_cast<QScrollView*>(widget))
+ else if(opts.highlightScrollViews && ::qt_cast<QScrollView*>(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<QGroupBox *>(widget)))
+ else if(widget->inherits("KTabCtl"))
widget->removeEventFilter(this);
+#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT
else if(opts.fixParentlessDialogs && ::qt_cast<QDialog *>(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<QMainWindow *>(object))
{
- itsOldPos.setX(-1);
- itsOldPos.setY(-1);
- itsHoverWidget=NULL;
- itsIsSpecialHover=false;
- itsHoverSect=QTC_NO_SECT;
- itsHover=HOVER_NONE;
+ QMainWindow *window=static_cast<QMainWindow *>(object);
+
+ if(window->isVisible() && window->menuBar())
+ {
+ QKeyEvent *k=static_cast<QKeyEvent *>(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<QLineEdit*>(object) && !::qt_cast<QTextEdit*>(object) &&
- !(QTC_DO_EFFECT && ::qt_cast<QComboBox*>(object)))
+ !(DO_EFFECT && ::qt_cast<QComboBox*>(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<QCheckBox *>(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<QGroupBox *>(object))
+ if(!IS_FLAT_BGND(opts.menuBgndAppearance) && ::qt_cast<QPopupMenu *>(object))
{
- QGroupBox *box=static_cast<QGroupBox*>(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<QTabBar *>(child) : NULL);
+ QTabBar *tb(child ? ::qt_cast<QTabBar *>(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<QLineEdit*>(object) || ::qt_cast<QTextEdit*>(object)/* || ::qt_cast<QDateTimeEditBase*>(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<QWidget*>(object));
@@ -1520,22 +2162,114 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event)
return false;
}
- if(opts.shadeMenubarOnlyWhenActive && SHADE_NONE!=opts.shadeMenubars &&
- ::qt_cast<QMenuBar *>(object))
+ if(::qt_cast<QMenuBar *>(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<QResizeEvent *>(event);
+
+ if (re->size().height() != re->oldSize().height())
+ emitMenuSize((QMenuBar *)object, re->size().height());
+ break;
+ }
+ }
+ }
+
+ if(dynamic_cast<QMouseEvent*>(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<QWidget*>(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<QDialog *>(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<QProgressBar*>(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<QScrollView*>(object))
+ if(opts.highlightScrollViews && object->isWidgetType() && ::qt_cast<QScrollView*>(object))
((QWidget *)object)->repaint(false);
break;
-#endif
case QEvent::Hide:
case QEvent::Show:
if(::qt_cast<QListBox *>(object) &&
@@ -1646,7 +2379,7 @@ bool QtCurveStyle::eventFilter(QObject *object, QEvent *event)
{
if(::qt_cast<QTabBar*>(object) && static_cast<QWidget*>(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<QRadioButton *>(itsHoverWidget) ||
- ::qt_cast<QCheckBox *>(itsHoverWidget) ||
-#endif
- ::qt_cast<QScrollBar *>(itsHoverWidget) ||
-#if KDE_VERSION >= 0x30400 && KDE_VERSION < 0x30500
- ::qt_cast<QToolButton *>(itsHoverWidget) ||
-
-#endif
- ::qt_cast<QHeader *>(itsHoverWidget) ||
- ::qt_cast<QSpinWidget *>(itsHoverWidget) ||
- ::qt_cast<QComboBox *>(itsHoverWidget) ||
- ::qt_cast<QTabBar *>(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<QHeader*>(p->device())
- : NULL);
+ bool isFirst(false), isLast(false), isTable(false), isSort(false);
+ QHeader *header(p && p->device() ? dynamic_cast<QHeader*>(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<QWidget*>(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<QHeader *>(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(r.x()+1, r.y()+1, r.width()-2, r.height()-2), bgnd);
+ p->fillRect(QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.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);
+ drawBevelGradient(bgnd, p, QRect(rect.x()+1, rect.y()+1, rect.width()-2, rect.height()-2), true,
+ drawSunken, app, wid);
- 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);
+ 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(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);
+ }
+ }
+ }
+
+ 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<const QWidget *>(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<QGroupBox *>(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<QDockWindow *>(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<const QWidget *>(p->device()) : 0L;
+ bool sv(widget && ::qt_cast<const QScrollView *>(widget)),
+ square((opts.square&SQUARE_SCROLLVIEW) &&
+ (sv ||
+ (widget && widget->parentWidget() && ::qt_cast<const QFrame *>(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<QWidget*>(p->device()));
+ QWidget *widget(dynamic_cast<QWidget*>(p->device()));
+ bool view(widget && (dynamic_cast<QScrollView*>(widget->parent()) ||
+ dynamic_cast<QListBox*>(widget->parent())));
- if(r.width()<4 || r.height()<4 ||
- (widget && (dynamic_cast<QScrollView*>(widget->parent()) ||
- dynamic_cast<QListBox*>(widget->parent()))))
+ if(widget && FOCUS_GLOW==opts.focus &&
+ (dynamic_cast<const QButton *>(widget) || dynamic_cast<const QComboBox *>(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<const QWidget *>(p->device()) : 0L;
+ bool scrollView=widget && ::qt_cast<const QScrollView *>(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<QLineEdit*>(p->device()))
+ if (!scrollView && widget && dynamic_cast<const QLineEdit*>(widget))
{
- QLineEdit *lineEdit(dynamic_cast<QLineEdit*>(p->device()));
+ const QLineEdit *lineEdit(dynamic_cast<const QLineEdit*>(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<QPixmap*>(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<QWidget*>(widget));
- bool horizontal(flags & Style_Horizontal);
+ bool hasClose(dynamic_cast<const QDockWindow *>(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<QSlider *>(widget) : NULL);
+ drawSliderHandle(p, r, cg, flags, widget ? ::qt_cast<QSlider *>(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, AlignVCenter|ShowPrefix|DontClip|SingleLine|(reverse ? AlignLeft : AlignRight),
+ text.mid(t+1));
- 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(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<const QPushButton *>(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()<QTC_MIN_BTN_SIZE || r.height()<QTC_MIN_BTN_SIZE ? 1 : 2);
+ int offset(r.width()<MIN_ROUND_FULL_SIZE || r.height()<MIN_ROUND_FULL_SIZE ? 1 : 2);
p->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<const QToolBar *>(widget->parentWidget()) : NULL);
+ ? ::qt_cast<const QToolBar *>(widget->parentWidget()) : 0L);
bool onControlButtons(false),
onExtender(!tb &&
widget->parentWidget() &&
widget->parentWidget()->inherits( "QToolBarExtensionWidget") &&
- ::qt_cast<QToolBar *>(widget->parentWidget()->parentWidget()));
+ ::qt_cast<QToolBar *>(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<const QMenuBar *>(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<const QToolBar *>(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(!(flags&Style_MouseOver && FOCUS_FULL==opts.focus && MO_NONE!=opts.coloredMouseOver))
+ drawPrimitive(PE_FocusRect, p, fr, cg, flags | Style_FocusAtBorder,
+ QStyleOption(cg.highlight()));
+ }
+ }
- if(!itsFormMode && QTC_DO_EFFECT)
- fr.addCoords(0, 1, 0, -1);
- drawPrimitive(PE_FocusRect, p, fr, cg, flags | Style_FocusAtBorder,
- QStyleOption(cg.highlight()));
+ 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(flags & Style_Enabled ? cg.buttonText() : cg.mid());
+ 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());
- p->setClipRegion(QRegion(s2)+QRegion(addpage));
- drawLightBevel(p, sbRect, cg, sflags|Style_Down,
-#ifndef QTC_SIMPLE_SCROLLBARS
- SCROLLBAR_NONE==opts.scrollbarType ? ROUNDED_ALL :
+ 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);
+
+ 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<QSlider *>(widget) : NULL, tb);
+ drawSliderHandle(paint, handle, cg, flags, widget ? ::qt_cast<QSlider *>(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<const QComboBox *>(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<int>::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<const QLineEdit *>(widget) || ::qt_cast<QDateTimeEditBase*>(widget) ||
- ::qt_cast<QTextEdit*>(widget)))
+ if(APP_KATE==itsThemedApp && widget && widget->parentWidget() && widget->parentWidget()->parentWidget() &&
+ ::qt_cast<const QWidgetStack *>(widget) &&
+ ::qt_cast<const QTabWidget *>(widget->parentWidget()) &&
+ ::qt_cast<const QVBox *>(widget->parentWidget()->parentWidget()))
+ return 0;
+
+ if ((opts.square&SQUARE_SCROLLVIEW) && widget && ::qt_cast<const QScrollView *>(widget))
+ return (opts.gtkScrollViews || opts.thinSbarGroove) && !opts.highlightScrollViews ? 1 : 2;
+
+ if(DO_EFFECT && opts.etchEntry && widget && !isFormWidget(widget) &&
+ (::qt_cast<const QLineEdit *>(widget) || ::qt_cast<const QDateTimeEditBase*>(widget) ||
+ ::qt_cast<const QTextEdit*>(widget) || ::qt_cast<const QScrollView*>(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(), h<constMinH ? constMinH : h);
+ QSize sz(BASE_STYLE::sizeFromContents(contents, widget, contentsSize, data));
+ return QSize(sz.width(), sz.height()+(DO_EFFECT && !isFormWidget(widget) && !opts.thinnerBtns ? 4 : 2));
}
case CT_PopupMenuItem:
{
@@ -5136,7 +6892,7 @@ QSize QtCurveStyle::sizeFromContents(ContentsType contents, const QWidget *widge
else if (mi->isSeparator())
{
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<QGroupBox *>(p->device()))
+ {
+ QGroupBox *box=static_cast<QGroupBox*>(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);
+ QPainter pixPainter(pix);
- if(!selected && (IS_GLASS(app) || APPEARANCE_SPLIT_GRADIENT==app))
- {
- if(WIDGET_TAB_BOT==w)
- {
- double t(shadeTop);
- shadeTop=shadeBot;
- shadeBot=t;
- }
+ drawBevelGradientReal(base, &pixPainter, r, horiz, sel, app, w);
+ pixPainter.end();
+ int cost(pix->width()*pix->height()*(pix->depth()/8));
- 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);
+ if(cost<itsPixmapCache.maxCost())
+ itsPixmapCache.insert(key, pix, cost);
+ else
+ inCache=false;
+ }
- 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);
+ p->drawTiledPixmap(origRect, *pix);
+ if(!inCache)
+ delete pix;
+ }
+}
- if(horiz)
- {
- r2.setHeight(BEVEL_BORDER(w));
- r1.setHeight(r.height()-r2.height());
- r2.moveTop(r.y()+r1.height());
- }
- else
- {
- r2.setWidth(BEVEL_BORDER(w));
- r1.setWidth(r.width()-r2.width());
- r2.moveLeft(r.x()+r1.width());
- }
- shade(base, &bot, SHADE_BEVEL_BOT(w));
- pixPainter.fillRect(r1, base);
- drawGradient(base, bot, true, &pixPainter, r2, horiz);
- }
- else
- {
- QColor bot, midTop, midBot, top;
- QRect r1(r), r2(r), r3(r);
+void QtCurveStyle::drawBevelGradientReal(const QColor &base, QPainter *p, const QRect &r, bool horiz, bool sel, EAppearance app, EWidget w) const
+{
- 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());
- }
+ 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;
- 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);
- }
- }
+ 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 && i<numStops-1)
+ 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;
}
- p->drawTiledPixmap(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()<sliderWidget->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; i<NUM_STD_SHADES; ++i)
- shade(base, &vals[i], QTC_SHADE(opts.contrast, i));
- shade(base, &vals[SHADE_ORIG_HIGHLIGHT], opts.highlightFactor);
- shade(vals[4], &vals[SHADE_4_HIGHLIGHT], opts.highlightFactor);
- shade(vals[2], &vals[SHADE_2_HIGHLIGHT], opts.highlightFactor);
+ shade(base, &vals[i], useCustom ? opts.customShades[i] : SHADE(opts.contrast, i));
+
+ shade(base, &vals[SHADE_ORIG_HIGHLIGHT], hl);
+ shade(vals[4], &vals[SHADE_4_HIGHLIGHT], hl);
+ shade(vals[2], &vals[SHADE_2_HIGHLIGHT], hl);
vals[ORIGINAL_SHADE]=base;
}
@@ -5952,10 +7828,17 @@ const QColor * QtCurveStyle::buttonColors(const QColorGroup &cg) const
return itsButtonCols;
}
+const QColor * QtCurveStyle::checkRadioColors(const QColorGroup &cg, SFlags flags) const
+{
+ return opts.crColor && flags&Style_Enabled && (flags&Style_On || !(flags&Style_Off))
+ ? itsCheckRadioSelCols
+ : buttonColors(cg);
+}
+
const QColor * QtCurveStyle::sliderColors(/*const QColorGroup &cg, */ SFlags flags) const
{
return (flags&Style_Enabled)
- ? SHADE_NONE!=opts.shadeSliders //&& cg.button()==itsButtonCols[ORIGINAL_SHADE]
+ ? SHADE_NONE!=opts.shadeSliders &&itsSliderCols && (!opts.colorSliderMouseOver || flags&Style_MouseOver)
? itsSliderCols
: itsButtonCols // buttonColors(cg)
: itsBackgroundCols;
@@ -5989,7 +7872,7 @@ const QColor * QtCurveStyle::getSidebarButtons() const
else
{
itsSidebarButtonsCols=new QColor [TOTAL_SHADES+1];
- shadeColors(midColor(itsMenuitemCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]),
+ shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsButtonCols[ORIGINAL_SHADE]),
itsSidebarButtonsCols);
}
}
@@ -6004,10 +7887,13 @@ void QtCurveStyle::setMenuColors(const QColorGroup &cg)
case SHADE_NONE:
memcpy(itsMenubarCols, itsBackgroundCols, sizeof(QColor)*(TOTAL_SHADES+1));
break;
- case SHADE_BLEND_SELECTED: // For menubars we dont actually blend...
+ case SHADE_BLEND_SELECTED:
+ shadeColors(midColor(itsHighlightCols[ORIGINAL_SHADE], itsBackgroundCols[ORIGINAL_SHADE]), itsMenubarCols);
+ break;
+ case SHADE_SELECTED:
shadeColors(IS_GLASS(opts.appearance)
- ? shade(itsMenuitemCols[ORIGINAL_SHADE], MENUBAR_GLASS_SELECTED_DARK_FACTOR)
- : itsMenuitemCols[ORIGINAL_SHADE],
+ ? shade(itsHighlightCols[ORIGINAL_SHADE], MENUBAR_GLASS_SELECTED_DARK_FACTOR)
+ : itsHighlightCols[ORIGINAL_SHADE],
itsMenubarCols);
break;
case SHADE_CUSTOM:
@@ -6015,9 +7901,233 @@ void QtCurveStyle::setMenuColors(const QColorGroup &cg)
break;
case SHADE_DARKEN:
shadeColors(shade(cg.background(), MENUBAR_DARK_FACTOR), itsMenubarCols);
+ break;
+ case SHADE_WINDOW_BORDER:
+ break;
+ }
+}
+
+const QColor * QtCurveStyle::menuColors(const QColorGroup &cg, bool active) const
+{
+ return SHADE_WINDOW_BORDER==opts.shadeMenubars
+ ? getMdiColors(cg, active)
+ : SHADE_NONE==opts.shadeMenubars || (opts.shadeMenubarOnlyWhenActive && !active)
+ ? backgroundColors(cg)
+ : itsMenubarCols;
+}
+
+void QtCurveStyle::setDecorationColors(bool init)
+{
+ if(!readKdeGlobals() && !init)
+ return;
+
+ if(opts.coloredMouseOver)
+ {
+ if(!itsMouseOverCols)
+ itsMouseOverCols=new QColor [TOTAL_SHADES+1];
+ shadeColors(kdeSettings.hover, itsMouseOverCols);
+ }
+ shadeColors(kdeSettings.focus, itsFocusCols);
+}
+
+const QColor * QtCurveStyle::getMdiColors(const QColorGroup &cg, bool active) const
+{
+ if(!itsActiveMdiColors)
+ {
+ itsActiveMdiTextColor=cg.text();
+ itsMdiTextColor=cg.text();
+
+ // Try to read kwin's settings...
+ if(useQt3Settings())
+ {
+ QFile f(QDir::homeDirPath()+"/.qt/qtrc");
+
+ if(f.open(IO_ReadOnly))
+ {
+ QTextStream in(&f);
+ bool inPal(false);
+
+ while (!in.atEnd())
+ {
+ QString line(in.readLine());
+
+ if(inPal)
+ {
+ if(!itsActiveMdiColors && 0==line.find("activeBackground=#", false))
+ {
+ QColor col;
+
+ setRgb(&col, line.mid(17).latin1());
+
+ if(col!=itsBackgroundCols[ORIGINAL_SHADE])
+ {
+ itsActiveMdiColors=new QColor [TOTAL_SHADES+1];
+ shadeColors(col, itsActiveMdiColors);
+ }
+ }
+ else if(!itsMdiColors && 0==line.find("inactiveBackground=#", false))
+ {
+ QColor col;
+
+ setRgb(&col, line.mid(19).latin1());
+ if(col!=itsBackgroundCols[ORIGINAL_SHADE])
+ {
+ itsMdiColors=new QColor [TOTAL_SHADES+1];
+ shadeColors(col, itsMdiColors);
+ }
+ }
+ else if(0==line.find("activeForeground=#", false))
+ setRgb(&itsActiveMdiTextColor, line.mid(17).latin1());
+ else if(0==line.find("inactiveForeground=#", false))
+ setRgb(&itsMdiTextColor, line.mid(19).latin1());
+ else if (-1!=line.find('['))
+ break;
+ }
+ else if(0==line.find("[KWinPalette]", false))
+ inPal=true;
+ }
+ f.close();
+ }
+ }
+ else // KDE4
+ {
+ QFile f(kdeHome(false)+"/share/config/kdeglobals");
+
+ if(f.open(IO_ReadOnly))
+ {
+ QTextStream in(&f);
+ bool inPal(false);
+
+ while (!in.atEnd())
+ {
+ QString line(in.readLine());
+
+ if(inPal)
+ {
+ if(!itsActiveMdiColors && 0==line.find("activeBackground=", false))
+ {
+ QColor col;
+
+ setRgb(&col, QStringList::split(",", line.mid(17)));
+
+ if(col!=itsBackgroundCols[ORIGINAL_SHADE])
+ {
+ itsActiveMdiColors=new QColor [TOTAL_SHADES+1];
+ shadeColors(col, itsActiveMdiColors);
+ }
+ }
+ else if(!itsMdiColors && 0==line.find("inactiveBackground=", false))
+ {
+ QColor col;
+
+ setRgb(&col, QStringList::split(",", line.mid(19)));
+ if(col!=itsBackgroundCols[ORIGINAL_SHADE])
+ {
+ itsMdiColors=new QColor [TOTAL_SHADES+1];
+ shadeColors(col, itsMdiColors);
+ }
+ }
+ else if(0==line.find("activeForeground=", false))
+ setRgb(&itsActiveMdiTextColor, QStringList::split(",", line.mid(17)));
+ else if(0==line.find("inactiveForeground=", false))
+ setRgb(&itsMdiTextColor, QStringList::split(",", line.mid(19)));
+ else if (-1!=line.find('['))
+ break;
+ }
+ else if(0==line.find("[WM]", false))
+ inPal=true;
+ }
+ f.close();
+ }
+ }
+
+ if(opts.shadeMenubarOnlyWhenActive && SHADE_WINDOW_BORDER==opts.shadeMenubars &&
+ itsActiveMdiColors[ORIGINAL_SHADE]==itsMdiColors[ORIGINAL_SHADE])
+ opts.shadeMenubarOnlyWhenActive=false;
+
+ if(!itsActiveMdiColors)
+ itsActiveMdiColors=(QColor *)itsBackgroundCols;
+ if(!itsMdiColors)
+ itsMdiColors=(QColor *)itsBackgroundCols;
}
+
+ return active ? itsActiveMdiColors : itsMdiColors;
}
+#ifdef SET_MDI_WINDOW_BUTTON_POSITIONS
+void QtCurveStyle::readMdiPositions() const
+{
+ if(0==itsMdiButtons[0].size() && 0==itsMdiButtons[1].size())
+ {
+ // Set defaults...
+ itsMdiButtons[0].append(SC_TitleBarSysMenu);
+ itsMdiButtons[0].append(SC_TitleBarShadeButton);
+
+ //itsMdiButtons[1].append(SC_TitleBarContextHelpButton);
+ itsMdiButtons[1].append(SC_TitleBarMinButton);
+ itsMdiButtons[1].append(SC_TitleBarMaxButton);
+ itsMdiButtons[1].append(WINDOWTITLE_SPACER);
+ itsMdiButtons[1].append(SC_TitleBarCloseButton);
+
+ // Read in KWin settings...
+ QFile f(kdeHome(useQt3Settings())+"/share/config/kwinrc");
+
+ if(f.open(IO_ReadOnly))
+ {
+ QTextStream in(&f);
+ bool inStyle(false);
+
+ while (!in.atEnd())
+ {
+ QString line(in.readLine());
+
+ if(inStyle)
+ {
+ if(0==line.find("ButtonsOnLeft=", false))
+ {
+ itsMdiButtons[0].clear();
+ parseWindowLine(line.mid(14), itsMdiButtons[0]);
+ }
+ else if(0==line.find("ButtonsOnRight=", false))
+ {
+ itsMdiButtons[1].clear();
+ parseWindowLine(line.mid(15), itsMdiButtons[1]);
+ }
+ else if (-1!=line.find('['))
+ break;
+ }
+ else if(0==line.find("[Style]", false))
+ inStyle=true;
+ }
+ f.close();
+ }
+
+ // Designer uses shade buttons, not min/max - so if we dont have shade in our kwin config. then add this
+ // button near the max button...
+ if(-1==itsMdiButtons[0].findIndex(SC_TitleBarShadeButton) && -1==itsMdiButtons[1].findIndex(SC_TitleBarShadeButton))
+ {
+ int maxPos=itsMdiButtons[0].findIndex(SC_TitleBarMaxButton);
+
+ if(-1==maxPos) // Left doesnt have max button, assume right does and add shade there
+ {
+ int minPos=itsMdiButtons[1].findIndex(SC_TitleBarMinButton);
+ maxPos=itsMdiButtons[1].findIndex(SC_TitleBarMaxButton);
+
+ itsMdiButtons[1].insert(itsMdiButtons[1].find(minPos<maxPos ? (minPos==-1 ? 0 : minPos)
+ : (maxPos==-1 ? 0 : maxPos)), SC_TitleBarShadeButton);
+ }
+ else // Add to left button
+ {
+ int minPos=itsMdiButtons[0].findIndex(SC_TitleBarMinButton);
+
+ itsMdiButtons[1].insert(itsMdiButtons[1].find(minPos>maxPos ? (minPos==-1 ? 0 : minPos)
+ : (maxPos==-1 ? 0 : maxPos)), SC_TitleBarShadeButton);
+ }
+ }
+ }
+}
+#endif
+
bool QtCurveStyle::redrawHoverWidget(const QPoint &pos)
{
if(!itsHoverWidget || !itsHoverWidget->isShown() || !itsHoverWidget->isVisible())
@@ -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<QToolButton *>(itsHoverWidget));
if(tb)
@@ -6110,8 +8220,8 @@ bool QtCurveStyle::redrawHoverWidget(const QPoint &pos)
return HOVER_KICKER==itsHover;
}
else
- {
#endif
+ {
QHeader *hd(::qt_cast<QHeader *>(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; s<hd->count() && (QTC_NO_SECT==itsHoverSect || !redraw); ++s)
+ for(s=0; s<hd->count() && (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<QDialog*>(o) ||
+ (::qt_cast<QMenuBar*>(o) && (pos.isNull() || !((QtcMenuBar *)o)->itemUnderPos(pos)))
+ //|| qobject_cast<QGroupBox*>(o)
+ //|| (o->inherits("QToolButton") && !static_cast<QWidget*>(o)->isEnabled())
+// || qobject_cast<QToolBar*>(o)
+ //|| qobject_cast<QDockWidget*>(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<QProgressBar*>(it.key()))
- continue;
-
QProgressBar *pb(::qt_cast<QProgressBar*>(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<const QWidget *>(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 [email protected]
+ QtCurve (C) Craig Drummond, 2003 - 2010 [email protected]
----
@@ -51,31 +51,30 @@
*/
#include "config.h"
+#ifdef QTC_QT_ONLY
+#include "qtc_kstyle.h"
+#else
#include <kdeversion.h>
#include <kstyle.h>
+#endif
#include <qcolor.h>
#include <qpoint.h>
#include <qpalette.h>
#include <qpixmap.h>
#include <qcache.h>
+#include <qvaluelist.h>
#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<QPixmap> 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<int> 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