File indexing completed on 2024-05-12 05:49:24
0001 /***************************************************************************** 0002 * Copyright 2003 - 2010 Craig Drummond <craig.p.drummond@gmail.com> * 0003 * Copyright 2013 - 2015 Yichao Yu <yyc1992@gmail.com> * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU Lesser General Public License as * 0007 * published by the Free Software Foundation; either version 2.1 of the * 0008 * License, or (at your option) version 3, or any later version accepted * 0009 * by the membership of KDE e.V. (or its successor approved by the * 0010 * membership of KDE e.V.), which shall act as a proxy defined in * 0011 * Section 6 of version 3 of the license. * 0012 * * 0013 * This program is distributed in the hope that it will be useful, * 0014 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 0016 * Lesser General Public License for more details. * 0017 * * 0018 * You should have received a copy of the GNU Lesser General Public * 0019 * License along with this library. If not, * 0020 * see <http://www.gnu.org/licenses/>. * 0021 *****************************************************************************/ 0022 0023 #ifndef __COMMON_H__ 0024 #define __COMMON_H__ 0025 0026 #include "config.h" 0027 #include <qtcurve-utils/shade.h> 0028 #include <qtcurve-utils/utils.h> 0029 0030 /* 0031 The following #define disables the rounding when scrollbar type==none. 0032 #define SIMPLE_SCROLLBARS 0033 */ 0034 0035 /* 0036 The following #define controls whether a scrollbar's slider should overlap 0037 the scrollbar buttons when at min/max. This removes the thick looking line 0038 between the slider and the buttons. 0039 */ 0040 #define INCREASE_SB_SLIDER 0041 0042 #include <QtConfig> 0043 #include <QApplication> 0044 #include <map> 0045 #include <set> 0046 #include <QString> 0047 #include <QPixmap> 0048 #include <QSet> 0049 0050 class QColor; 0051 typedef QSet<QString> Strings; 0052 0053 #define SETTINGS_GROUP "Settings" 0054 #define KWIN_GROUP "KWin" 0055 0056 /* qtc_<theme name>.themerc support */ 0057 #define KDE_PREFIX(V) (QTC_KDE4_PREFIX) 0058 #define THEME_DIR "/share/apps/kstyle/themes/" 0059 #define THEME_DIR4 "/share/kde4/apps/kstyle/themes/" 0060 #define THEME_PREFIX "qtc_" 0061 #define THEME_SUFFIX ".themerc" 0062 #define BORDER_SIZE_FILE "windowBorderSizes" 0063 0064 #define LV_SIZE 7 0065 0066 #define LARGE_ARR_WIDTH 7 0067 #define LARGE_ARR_HEIGHT 4 0068 #define SMALL_ARR_WIDTH 5 0069 #define SMALL_ARR_HEIGHT 3 0070 0071 #define NUM_EXTRA_SHADES 3 0072 0073 enum { 0074 ALPHA_ETCH_LIGHT = 0, 0075 ALPHA_ETCH_DARK, 0076 NUM_STD_ALPHAS 0077 }; 0078 0079 #define TOTAL_SHADES (QTC_NUM_STD_SHADES + NUM_EXTRA_SHADES) 0080 #define ORIGINAL_SHADE TOTAL_SHADES 0081 0082 #define SHADE_ORIG_HIGHLIGHT (QTC_NUM_STD_SHADES) 0083 #define SHADE_4_HIGHLIGHT (QTC_NUM_STD_SHADES + 1) 0084 #define SHADE_2_HIGHLIGHT (QTC_NUM_STD_SHADES + 2) 0085 0086 #define DEFAULT_CONTRAST 7 0087 0088 #define THIN_SBAR_MOD ((opts.sliderWidth<DEFAULT_SLIDER_WIDTH ? 3 : opts.sliderWidth>DEFAULT_SLIDER_WIDTH ? (opts.sliderWidth-9)/2 : 4)+(EFFECT_NONE==opts.buttonEffect ? 1 : 0)) 0089 #define SLIDER_SIZE (opts.sliderWidth<DEFAULT_SLIDER_WIDTH ? DEFAULT_SLIDER_WIDTH-2 : opts.sliderWidth) 0090 #define CIRCULAR_SLIDER_SIZE 15 0091 #define GLOW_MO 1 /*ORIGINAL_SHADE*/ 0092 #define GLOW_DEFBTN 1 0093 #define GLOW_ALPHA(DEF) ((DEF) ? 0.5 : 0.65) 0094 #define DEF_BNT_TINT 0.4 0095 #define ENTRY_INNER_ALPHA 0.4 0096 #define INACTIVE_SEL_ALPHA 0.5 0097 0098 #define SUNKEN_BEVEL_DARK_ALPHA(X) (X.value()/800.0) // 0.25 0099 #define SUNKEN_BEVEL_LIGHT_ALPHA(X) (X.value()/500.0) // 0.40 0100 0101 #define BLEND_TITLEBAR (opts.menubarAppearance==opts.titlebarAppearance && opts.menubarAppearance==opts.inactiveTitlebarAppearance && \ 0102 !(opts.windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) && SHADE_WINDOW_BORDER==opts.shadeMenubars && opts.windowDrag) 0103 0104 #define PBAR_BORDER 4 0105 #define ARROW_MO_SHADE 4 0106 #define LOWER_BORDER_ALPHA 0.35 0107 #define BORDER_VAL(E) (/*(E) ?*/ QTC_STD_BORDER/* : DISABLED_BORDER*/) 0108 #define SLIDER_MO_BORDER_VAL 3 0109 0110 #define FRAME_DARK_SHADOW 2 0111 #define FOCUS_SHADE(SEL) (FOCUS_GLOW==opts.focus ? GLOW_MO : ((SEL) ? 3 : ORIGINAL_SHADE)) 0112 #define MENU_STRIPE_SHADE (opts.lighterPopupMenuBgnd ? ORIGINAL_SHADE : 2) 0113 #define MENU_SEP_SHADE (opts.lighterPopupMenuBgnd ? 4 : 3) 0114 0115 #define BGND_STRIPE_SHADE 0.95 0116 0117 #define INVERT_SHADE(A) (1.0+(1.0-(A))) 0118 0119 #define TOOLBAR_SEP_GAP (opts.fadeLines ? 5 : 6) 0120 #define FADE_SIZE 0.4 0121 0122 #define IS_GLASS(A) QtCurve::oneOf(A, APPEARANCE_DULL_GLASS, APPEARANCE_SHINY_GLASS) 0123 #define IS_CUSTOM(A) ((A)>=APPEARANCE_CUSTOM1 && (A)<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD)) 0124 0125 #define MENUBAR_DARK_LIMIT 160 0126 #define TOO_DARK(A) ((A).red()<MENUBAR_DARK_LIMIT || (A).green()<MENUBAR_DARK_LIMIT || (A).blue()<MENUBAR_DARK_LIMIT) 0127 0128 #define TO_FACTOR(A) ((100.0+((double)(A)))/100.0) 0129 #define DEFAULT_HIGHLIGHT_FACTOR 3 0130 #define DEFAULT_SPLITTER_HIGHLIGHT_FACTOR 3 0131 #define DEFAULT_CR_HIGHLIGHT_FACTOR 0 0132 #define DEFAULT_EXPANDER_HIGHLIGHT_FACTOR 3 0133 #define MAX_HIGHLIGHT_FACTOR 50 0134 #define MIN_HIGHLIGHT_FACTOR -50 0135 #define MENUBAR_DARK_FACTOR TO_FACTOR(-3) 0136 #define LV_HEADER_DARK_FACTOR TO_FACTOR(-10) 0137 #define DEF_POPUPMENU_LIGHT_FACTOR 2 0138 #define MIN_LIGHTER_POPUP_MENU -100 0139 #define MAX_LIGHTER_POPUP_MENU 100 0140 0141 #define MIN_GB_FACTOR -50 0142 #define MAX_GB_FACTOR 50 0143 #define DEF_GB_FACTOR -3 0144 0145 #define TO_ALPHA(A) (std::abs(A) / 100.0) 0146 #define DEF_COLOR_SEL_TAB_FACTOR 25 0147 #define MIN_COLOR_SEL_TAB_FACTOR 0 0148 #define MAX_COLOR_SEL_TAB_FACTOR 100 0149 0150 #define DEF_TAB_BGND 0 0151 #define MIN_TAB_BGND -5 0152 #define MAX_TAB_BGND 5 0153 0154 #define DEFAULT_MENU_DELAY 225 0155 #define MIN_MENU_DELAY 1 0156 #define MAX_MENU_DELAY 500 0157 0158 #define DEFAULT_MENU_CLOSE_DELAY 300 0159 #define MIN_MENU_CLOSE_DELAY 0 0160 #define MAX_MENU_CLOSE_DELAY 5000 0161 0162 #define DEFAULT_SLIDER_WIDTH 15 0163 #define MIN_SLIDER_WIDTH_ROUND 7 0164 #define MIN_SLIDER_WIDTH_THIN_GROOVE 9 0165 #define MIN_SLIDER_WIDTH 5 0166 #define MAX_SLIDER_WIDTH 31 0167 0168 #define SIZE_GRIP_SIZE 12 0169 0170 #define USE_GLOW_FOCUS(mouseOver) (FOCUS_GLOW==opts.focus && (MO_GLOW!=opts.coloredMouseOver || !(mouseOver))) 0171 0172 #define MENUBAR_GLASS_SELECTED_DARK_FACTOR 0.9 0173 #define MENUITEM_FADE_SIZE 48 0174 0175 #define NUM_SPLITTER_DASHES 21 0176 0177 #define WIDGET_BUTTON(w) \ 0178 QtCurve::oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, WIDGET_CHECKBOX, \ 0179 WIDGET_RADIO_BUTTON, WIDGET_DIAL, WIDGET_COMBO, \ 0180 WIDGET_COMBO_BUTTON, WIDGET_MDI_WINDOW_BUTTON, \ 0181 WIDGET_TOOLBAR_BUTTON) 0182 #define ETCH_WIDGET(w) \ 0183 (QtCurve::oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, \ 0184 WIDGET_SLIDER_TROUGH, WIDGET_CHECKBOX, \ 0185 WIDGET_RADIO_BUTTON, WIDGET_DIAL, \ 0186 WIDGET_FILLED_SLIDER_TROUGH, WIDGET_MDI_WINDOW_BUTTON, \ 0187 WIDGET_TOOLBAR_BUTTON) || \ 0188 ((w) == WIDGET_SLIDER && opts.coloredMouseOver == MO_GLOW)) 0189 0190 #define SLIDER(w) QtCurve::oneOf(w, WIDGET_SB_SLIDER, WIDGET_SLIDER) 0191 #define CIRCULAR_SLIDER(w) (WIDGET_SLIDER==(w) && SLIDER_CIRCULAR==opts.sliderStyle) 0192 0193 #define MODIFY_AGUA_X(A, X) (APPEARANCE_AGUA==(A) ? (X) : (A)) 0194 #define MODIFY_AGUA(A) MODIFY_AGUA_X((A), APPEARANCE_AGUA_MOD) 0195 #define AGUA_MAX 32.0 0196 #define AGUA_MID_SHADE 0.85 0197 0198 #define COLORED_BORDER_SIZE 3 0199 #define PROGRESS_CHUNK_WIDTH 10 0200 #define STRIPE_WIDTH 10 0201 #define DRAW_LIGHT_BORDER(SUKEN, WIDGET, APP) \ 0202 (!(SUKEN) && (qtcGetGradient(APP, &opts)->border == GB_LIGHT) && \ 0203 (WIDGET) != WIDGET_MENU_ITEM && !IS_TROUGH(WIDGET) && \ 0204 ((WIDGET) != WIDGET_DEF_BUTTON || opts.defBtnIndicator != IND_COLORED)) 0205 0206 #define DRAW_3D_FULL_BORDER(SUNKEN, APP) \ 0207 (!(SUNKEN) && GB_3D_FULL==qtcGetGradient((APP), &opts)->border) 0208 0209 #define DRAW_3D_BORDER(SUNKEN, APP) \ 0210 (!(SUNKEN) && GB_3D==qtcGetGradient((APP), &opts)->border) 0211 0212 #define DRAW_SHINE(SUNKEN, APP) \ 0213 (!(SUNKEN) && GB_SHINE==qtcGetGradient((APP), &opts)->border) 0214 0215 #define LIGHT_BORDER(APP) (APPEARANCE_DULL_GLASS==(APP) ? 1 : 0) 0216 0217 #define PROGRESS_ANIMATION 100 0218 #define MIN_SLIDER_SIZE(A) (LINE_DOTS==(A) ? 24 : 20) 0219 0220 #define CR_SMALL_SIZE 13 0221 #define CR_LARGE_SIZE 15 0222 0223 #define TAB_APP(A) \ 0224 (QtCurve::oneOf(A, APPEARANCE_BEVELLED, APPEARANCE_SPLIT_GRADIENT) ? \ 0225 APPEARANCE_GRADIENT : (A)) 0226 #define NORM_TAB_APP TAB_APP(opts.tabAppearance) 0227 #define SEL_TAB_APP TAB_APP(opts.activeTabAppearance) 0228 0229 #define SLIDER_MO_SHADE (SHADE_SELECTED==opts.shadeSliders ? 1 : (SHADE_BLEND_SELECTED==opts.shadeSliders ? 0 : ORIGINAL_SHADE)) 0230 #define SLIDER_MO_PLASTIK_BORDER \ 0231 (QtCurve::oneOf(opts.shadeSliders, SHADE_SELECTED, SHADE_BLEND_SELECTED) ? 2 : 1) 0232 #define SLIDER_MO_LEN \ 0233 (opts.sliderStyle == SLIDER_TRIANGULAR ? 2 : \ 0234 (QtCurve::oneOf(opts.shadeSliders, SHADE_SELECTED, \ 0235 SHADE_BLEND_SELECTED) ? 4 : 3)) 0236 0237 #define CR_MO_FILL 1 0238 #define MO_DEF_BTN 2 0239 #define MO_PLASTIK_DARK(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 3 : 2) /*? 2 : 1) */ 0240 #define MO_PLASTIK_LIGHT(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 4 : 1) /*? 2 : 0) */ 0241 0242 #define MO_STD_DARK(W) \ 0243 (opts.coloredMouseOver == MO_GLOW ? 1 : MO_PLASTIK_DARK(W)) 0244 #define MO_STD_LIGHT(W, S) \ 0245 (opts.coloredMouseOver == MO_GLOW ? 1 : MO_PLASTIK_LIGHT(W)) 0246 0247 #define FOCUS_ALPHA 0.08 0248 #define BORDER_BLEND_ALPHA(W) \ 0249 (QtCurve::oneOf(W, WIDGET_ENTRY, WIDGET_SCROLLVIEW) ? 0.45 : 0.7) 0250 0251 #define ETCH_TOP_ALPHA 0.055 0252 #define ETCH_BOTTOM_ALPHA 0.1 0253 // #define ETCH_RADIO_TOP_ALPHA 0.055 0254 #define ETCH_RADIO_TOP_ALPHA 0.09 0255 0256 #define RINGS_INNER_ALPHA(T) qtc_ring_alpha[IMG_PLAIN_RINGS==(T) ? 1 : 0] //(IMG_PLAIN_RINGS==opts.bgndImage.type ? 0.25 : 0.125) 0257 #define RINGS_OUTER_ALPHA qtc_ring_alpha[2] //0.5 0258 #define RINGS_WIDTH(T) (IMG_SQUARE_RINGS==T ? 260 : 450) 0259 #define RINGS_HEIGHT(T) (IMG_SQUARE_RINGS==T ? 220 : 360) 0260 0261 #define RINGS_SQUARE_LARGE_ALPHA (RINGS_OUTER_ALPHA*0.675) 0262 #define RINGS_SQUARE_SMALL_ALPHA (RINGS_OUTER_ALPHA*0.50) 0263 #define RINGS_SQUARE_LINE_WIDTH 20.0 0264 #define RINGS_SQUARE_RADIUS 18.0 0265 #define RINGS_SQUARE_LARGE_SIZE 120.0 0266 #define RINGS_SQUARE_SMALL_SIZE 100.0 0267 #define GLOW_PROG_ALPHA 0.55 0268 0269 #include <QStyle> 0270 typedef enum { 0271 QtC_Round = QStyle::PM_CustomBase, 0272 QtC_TitleAlignment, 0273 QtC_TitleBarButtons, 0274 QtC_TitleBarIcon, 0275 QtC_TitleBarIconColor, 0276 QtC_TitleBarEffect, 0277 QtC_BlendMenuAndTitleBar, 0278 QtC_ShadeMenubarOnlyWhenActive, 0279 QtC_ToggleButtons, 0280 QtC_MenubarColor, 0281 QtC_WindowBorder, 0282 QtC_CustomBgnd, 0283 QtC_TitleBarApp 0284 } QtCMetrics; 0285 0286 #define QtC_StateKWin ((QStyle::StateFlag)0x10000000) 0287 // PE_FrameWindow 0288 #define QtC_StateKWinNotFull ((QStyle::StateFlag)0x20000000) 0289 // CC_TitleBar 0290 #define QtC_StateKWinFillBgnd ((QStyle::StateFlag)0x20000000) 0291 #define QtC_StateKWinNoBorder ((QStyle::StateFlag)0x40000000) 0292 #define QtC_StateKWinCompositing ((QStyle::StateFlag)0x80000000) 0293 #define QtC_StateKWinTabDrag ((QStyle::StateFlag)0x00000001) 0294 0295 #define QtC_PE_DrawBackground ((QStyle::PrimitiveElement)(QStyle::PE_CustomBase+10000)) 0296 0297 #define CLOSE_COLOR QColor(191, 82, 82) 0298 #define DARK_WINDOW_TEXT(A) ((A).red()<230 || (A).green()<230 || (A).blue()<230) 0299 #define HOVER_BUTTON_ALPHA(A) (DARK_WINDOW_TEXT(A) ? 0.25 : 0.65) 0300 #define WINDOW_TEXT_SHADOW_ALPHA(A) (EFFECT_SHADOW==(A) ? 0.10 : 0.60) 0301 #define WINDOW_SHADOW_COLOR(A) (EFFECT_SHADOW==(A) ? Qt::black : Qt::white) 0302 0303 #define QTCURVE_PREVIEW_CONFIG "QTCURVE_PREVIEW_CONFIG" 0304 #define QTCURVE_PREVIEW_CONFIG_FULL "QTCURVE_PREVIEW_CONFIG_FULL" 0305 0306 typedef enum { 0307 DWT_BUTTONS_AS_PER_TITLEBAR = 0x0001, 0308 DWT_COLOR_AS_PER_TITLEBAR = 0x0002, 0309 DWT_FONT_AS_PER_TITLEBAR = 0x0004, 0310 DWT_TEXT_ALIGN_AS_PER_TITLEBAR = 0x0008, 0311 DWT_EFFECT_AS_PER_TITLEBAR = 0x0010, 0312 DWT_ROUND_TOP_ONLY = 0x0020, 0313 DWT_ICON_COLOR_AS_PER_TITLEBAR = 0x0040 0314 } EDwtSettingsFlags; 0315 0316 typedef enum { 0317 TITLEBAR_BUTTON_ROUND = 0x0001, 0318 TITLEBAR_BUTTON_HOVER_FRAME = 0x0002, 0319 TITLEBAR_BUTTON_HOVER_SYMBOL = 0x0004, 0320 TITLEBAR_BUTTON_NO_FRAME = 0x0008, 0321 TITLEBAR_BUTTON_COLOR = 0x0010, 0322 TITLEBAR_BUTTON_COLOR_INACTIVE = 0x0020, 0323 TITLEBAR_BUTTON_COLOR_MOUSE_OVER = 0x0040, 0324 TITLEBAR_BUTTON_STD_COLOR = 0x0080, 0325 TITLEBAR_BUTTON_COLOR_SYMBOL = 0x0100, 0326 TITLEBAR_BUTTON_HOVER_SYMBOL_FULL = 0x0200, 0327 TITLEBAR_BUTTON_SUNKEN_BACKGROUND = 0x0400, 0328 TITLEBAR_BUTTOM_ARROW_MIN_MAX = 0x0800, 0329 TITLEBAR_BUTTOM_HIDE_ON_INACTIVE_WINDOW = 0x1000, 0330 TITLEBAR_BUTTON_ICON_COLOR = 0x2000, 0331 TITLEBAR_BUTTON_USE_HOVER_COLOR = 0x4000 0332 } ETitleBarButtonFlags; 0333 0334 typedef enum { 0335 TITLEBAR_ICON_NONE, 0336 TITLEBAR_ICON_MENU_BUTTON, 0337 TITLEBAR_ICON_NEXT_TO_TITLE 0338 } ETitleBarIcon; 0339 0340 typedef enum { 0341 TITLEBAR_CLOSE, 0342 TITLEBAR_MIN, 0343 TITLEBAR_MAX, 0344 TITLEBAR_HELP, 0345 TITLEBAR_MENU, 0346 TITLEBAR_SHADE, 0347 TITLEBAR_ALL_DESKTOPS, 0348 TITLEBAR_KEEP_ABOVE, 0349 TITLEBAR_KEEP_BELOW, 0350 NUM_TITLEBAR_BUTTONS 0351 } ETitleBarButtons; 0352 0353 #define TBAR_VERSION_HACK 65535 0354 #define TBAR_BORDER_VERSION_HACK (TBAR_VERSION_HACK+1000) 0355 0356 typedef std::map<int, QColor> TBCols; 0357 0358 typedef enum 0359 { 0360 WINDOW_BORDER_COLOR_TITLEBAR_ONLY = 0x01, // colorTitlebarOnly 0361 WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR = 0x02, // titlebarMenuColor 0362 WINDOW_BORDER_ADD_LIGHT_BORDER = 0x04, // titlebarBorder 0363 WINDOW_BORDER_BLEND_TITLEBAR = 0x08, // titlebarBlend 0364 WINDOW_BORDER_SEPARATOR = 0x10, 0365 WINDOW_BORDER_FILL_TITLEBAR = 0x20 0366 } EWindowBorder; 0367 0368 typedef enum 0369 { 0370 IMG_NONE, 0371 IMG_BORDERED_RINGS, 0372 IMG_PLAIN_RINGS, 0373 IMG_SQUARE_RINGS, 0374 IMG_FILE 0375 } EImageType; 0376 0377 typedef struct { 0378 QString file; 0379 QPixmap img; 0380 } QtCPixmap; 0381 0382 typedef enum { 0383 PP_TL, 0384 PP_TM, 0385 PP_TR, 0386 PP_BL, 0387 PP_BM, 0388 PP_BR, 0389 PP_LM, 0390 PP_RM, 0391 PP_CENTRED, 0392 } EPixPos; 0393 0394 typedef struct 0395 { 0396 EImageType type; 0397 bool loaded, 0398 onBorder; 0399 QtCPixmap pixmap; 0400 int width, 0401 height; 0402 EPixPos pos; 0403 } QtCImage; 0404 0405 typedef enum 0406 { 0407 THIN_BUTTONS = 0x0001, 0408 THIN_MENU_ITEMS = 0x0002, 0409 THIN_FRAMES = 0x0004 0410 } EThinFlags; 0411 0412 typedef enum 0413 { 0414 SQUARE_NONE = 0x0000, 0415 SQUARE_ENTRY = 0x0001, 0416 SQUARE_PROGRESS = 0x0002, 0417 SQUARE_SCROLLVIEW = 0x0004, 0418 SQUARE_LISTVIEW_SELECTION = 0x0008, 0419 SQUARE_FRAME = 0x0010, 0420 SQUARE_TAB_FRAME = 0x0020, 0421 SQUARE_SLIDER = 0x0040, 0422 SQUARE_SB_SLIDER = 0x0080, 0423 SQUARE_WINDOWS = 0x0100, 0424 SQUARE_TOOLTIPS = 0x0200, 0425 SQUARE_POPUP_MENUS = 0x0400, 0426 0427 SQUARE_ALL = 0xFFFF 0428 } ESquare; 0429 0430 typedef enum 0431 { 0432 WM_DRAG_NONE = 0, 0433 WM_DRAG_MENUBAR = 1, 0434 WM_DRAG_MENU_AND_TOOLBAR = 2, 0435 WM_DRAG_ALL = 3 0436 } EWmDrag; 0437 0438 typedef enum 0439 { 0440 EFFECT_NONE, 0441 EFFECT_ETCH, 0442 EFFECT_SHADOW 0443 } EEffect; 0444 0445 typedef enum { 0446 PIX_CHECK, 0447 PIX_DOT 0448 } EPixmap; 0449 0450 typedef enum { 0451 WIDGET_TAB_TOP, 0452 WIDGET_TAB_BOT, 0453 WIDGET_STD_BUTTON, 0454 WIDGET_DEF_BUTTON, 0455 WIDGET_TOOLBAR_BUTTON, 0456 WIDGET_LISTVIEW_HEADER, 0457 WIDGET_SLIDER, 0458 WIDGET_SLIDER_TROUGH, 0459 WIDGET_FILLED_SLIDER_TROUGH, 0460 WIDGET_SB_SLIDER, 0461 WIDGET_SB_BUTTON, 0462 WIDGET_SB_BGND, 0463 WIDGET_TROUGH, 0464 WIDGET_CHECKBOX, 0465 WIDGET_RADIO_BUTTON, 0466 WIDGET_COMBO, 0467 WIDGET_COMBO_BUTTON, 0468 WIDGET_MENU_ITEM, 0469 WIDGET_PROGRESSBAR, 0470 WIDGET_PBAR_TROUGH, 0471 #ifndef QTC_UTILS_QT 0472 WIDGET_ENTRY_PROGRESSBAR, 0473 WIDGET_TOGGLE_BUTTON, 0474 WIDGET_SPIN_UP, 0475 WIDGET_SPIN_DOWN, 0476 WIDGET_UNCOLOURED_MO_BUTTON, 0477 #else // QTC_UTILS_QT 0478 WIDGET_CHECKBUTTON, // Qt4 only 0479 WIDGET_MDI_WINDOW, // Qt4 only 0480 WIDGET_MDI_WINDOW_TITLE, // Qt4 only 0481 WIDGET_MDI_WINDOW_BUTTON, // Qt4 only 0482 WIDGET_DOCK_WIDGET_TITLE, 0483 WIDGET_DIAL, 0484 #endif // QTC_UTILS_QT 0485 WIDGET_SPIN, 0486 WIDGET_ENTRY, 0487 WIDGET_SCROLLVIEW, 0488 WIDGET_SELECTION, 0489 WIDGET_FRAME, 0490 WIDGET_NO_ETCH_BTN, 0491 WIDGET_MENU_BUTTON, // Qt4 only 0492 WIDGET_FOCUS, 0493 WIDGET_TAB_FRAME, 0494 WIDGET_TOOLTIP, 0495 WIDGET_OTHER 0496 } EWidget; 0497 0498 typedef enum 0499 { 0500 APP_ALLOW_BASIC, 0501 APP_ALLOW_FADE, 0502 APP_ALLOW_STRIPED, 0503 APP_ALLOW_NONE 0504 } EAppAllow; 0505 0506 #define IS_SLIDER(w) QtCurve::oneOf(w, WIDGET_SLIDER, WIDGET_SB_SLIDER) 0507 #define IS_TROUGH(w) QtCurve::oneOf(w, WIDGET_SLIDER_TROUGH, WIDGET_PBAR_TROUGH, \ 0508 WIDGET_TROUGH, WIDGET_FILLED_SLIDER_TROUGH) 0509 0510 typedef enum 0511 { 0512 IND_CORNER, 0513 IND_FONT_COLOR, 0514 IND_COLORED, 0515 IND_TINT, 0516 IND_GLOW, 0517 IND_DARKEN, 0518 IND_SELECTED, 0519 IND_NONE 0520 } EDefBtnIndicator; 0521 0522 typedef enum 0523 { 0524 LINE_NONE, 0525 LINE_SUNKEN, 0526 LINE_FLAT, 0527 LINE_DOTS, 0528 LINE_1DOT, 0529 LINE_DASHES, 0530 } ELine; 0531 0532 typedef enum 0533 { 0534 TB_NONE, 0535 TB_LIGHT, 0536 TB_DARK, 0537 TB_LIGHT_ALL, 0538 TB_DARK_ALL 0539 } ETBarBorder; 0540 0541 typedef enum 0542 { 0543 TBTN_STANDARD, 0544 TBTN_RAISED, 0545 TBTN_JOINED 0546 } ETBarBtn; 0547 0548 typedef enum 0549 { 0550 BORDER_FLAT, 0551 BORDER_RAISED, 0552 BORDER_SUNKEN, 0553 BORDER_LIGHT 0554 } EBorder; 0555 0556 /* 0557 This whole EShade enum is a complete mess! 0558 For menubars, we dont blend - so blend is selected, and selected is darken 0559 For check/radios - we dont blend, so blend is selected, and we dont allow darken 0560 */ 0561 typedef enum { 0562 SHADE_NONE, 0563 SHADE_CUSTOM, 0564 SHADE_SELECTED, 0565 SHADE_BLEND_SELECTED, 0566 SHADE_DARKEN, 0567 SHADE_WINDOW_BORDER 0568 } EShade; 0569 0570 typedef enum { 0571 ECOLOR_BASE, 0572 ECOLOR_BACKGROUND, 0573 ECOLOR_DARK, 0574 } EColor; 0575 0576 typedef enum { 0577 ROUND_NONE, 0578 ROUND_SLIGHT, 0579 ROUND_FULL, 0580 ROUND_EXTRA, 0581 ROUND_MAX 0582 } ERound; 0583 0584 typedef enum { 0585 GB_LBL_BOLD = 0x01, 0586 GB_LBL_CENTRED = 0x02, 0587 GB_LBL_INSIDE = 0x04, 0588 GB_LBL_OUTSIDE = 0x08 0589 } EGBLabel; 0590 0591 typedef enum { 0592 MO_NONE, 0593 MO_COLORED, 0594 MO_COLORED_THICK, 0595 MO_PLASTIK, 0596 MO_GLOW 0597 } EMouseOver; 0598 0599 typedef enum { 0600 STRIPE_NONE, 0601 STRIPE_PLAIN, 0602 STRIPE_DIAGONAL, 0603 STRIPE_FADE 0604 } EStripe; 0605 0606 typedef enum { 0607 SLIDER_PLAIN, 0608 SLIDER_ROUND, 0609 SLIDER_PLAIN_ROTATED, 0610 SLIDER_ROUND_ROTATED, 0611 SLIDER_TRIANGULAR, 0612 SLIDER_CIRCULAR 0613 } ESliderStyle; 0614 0615 typedef enum { 0616 FOCUS_STANDARD, 0617 FOCUS_RECTANGLE, 0618 FOCUS_FULL, 0619 FOCUS_FILLED, 0620 FOCUS_LINE, 0621 FOCUS_GLOW, 0622 FOCUS_NONE 0623 } EFocus; 0624 0625 typedef enum { 0626 TAB_MO_TOP, 0627 TAB_MO_BOTTOM, 0628 TAB_MO_GLOW 0629 } ETabMo; 0630 0631 typedef enum { 0632 GT_HORIZ, 0633 GT_VERT 0634 } EGradType; 0635 0636 typedef enum { 0637 GLOW_NONE, 0638 GLOW_START, 0639 GLOW_MIDDLE, 0640 GLOW_END 0641 } EGlow; 0642 0643 enum { 0644 HIDE_NONE = 0x00, 0645 HIDE_KEYBOARD = 0x01, 0646 HIDE_KWIN = 0x02 0647 }; 0648 0649 typedef enum { 0650 ALIGN_LEFT, 0651 ALIGN_CENTER, 0652 ALIGN_FULL_CENTER, 0653 ALIGN_RIGHT 0654 } EAlign; 0655 0656 struct GradientStop { 0657 GradientStop(double p=0.0, double v=0.0, double a=1.0) : pos(p), val(v), alpha(a) { } 0658 0659 bool operator==(const GradientStop &o) const 0660 { 0661 return (qtcEqual(pos, o.pos) && qtcEqual(val, o.val) && 0662 qtcEqual(alpha, o.alpha)); 0663 } 0664 0665 bool operator<(const GradientStop &o) const 0666 { 0667 return pos<o.pos || (qtcEqual(pos, o.pos) && 0668 (val < o.val || (qtcEqual(val, o.val) && 0669 alpha < o.alpha))); 0670 } 0671 0672 double pos, 0673 val, 0674 alpha; 0675 }; 0676 0677 typedef struct 0678 { 0679 int titleHeight, 0680 toolTitleHeight, 0681 bottom, 0682 sides; 0683 } WindowBorders; 0684 0685 struct GradientStopCont : public std::set<GradientStop> 0686 { 0687 GradientStopCont fix() const 0688 { 0689 GradientStopCont c(*this); 0690 if(size()) 0691 { 0692 GradientStopCont::const_iterator first(c.begin()); 0693 GradientStopCont::reverse_iterator last(c.rbegin()); 0694 0695 if((*first).pos>0.001) 0696 c.insert(GradientStop(0.0, 1.0)); 0697 if((*last).pos<0.999) 0698 c.insert(GradientStop(1.0, 1.0)); 0699 } 0700 return c; 0701 } 0702 }; 0703 struct Gradient { 0704 Gradient() : 0705 border(GB_3D) 0706 { 0707 } 0708 0709 bool 0710 operator==(const Gradient &o) const 0711 { 0712 return border == o.border && stops == o.stops; 0713 } 0714 0715 EGradientBorder border; 0716 GradientStopCont stops; 0717 }; 0718 0719 #define USE_CUSTOM_SHADES(A) ((A).customShades[0]>0.00001) 0720 #define USE_CUSTOM_ALPHAS(A) ((A).customAlphas[0]>0.00001) 0721 0722 typedef std::map<EAppearance, Gradient> GradientCont; 0723 typedef struct { 0724 int version, 0725 contrast, 0726 passwordChar, 0727 highlightFactor, 0728 lighterPopupMenuBgnd, 0729 menuDelay, 0730 menuCloseDelay, 0731 sliderWidth, 0732 tabBgnd, 0733 colorSelTab, 0734 expanderHighlight, 0735 crHighlight, 0736 splitterHighlight, 0737 crSize, 0738 gbFactor, 0739 gbLabel, 0740 thin; 0741 ERound round; 0742 bool embolden, 0743 highlightTab, 0744 roundAllTabs, 0745 animatedProgress, 0746 customMenuTextColor, 0747 menubarMouseOver, 0748 useHighlightForMenu, 0749 shadeMenubarOnlyWhenActive, 0750 lvButton, 0751 drawStatusBarFrames, 0752 fillSlider, 0753 roundMbTopOnly, 0754 gtkScrollViews, 0755 stdSidebarButtons, 0756 toolbarTabs, 0757 gtkComboMenus, 0758 mapKdeIcons, 0759 gtkButtonOrder, 0760 fadeLines, 0761 reorderGtkButtons, 0762 borderMenuitems, 0763 colorMenubarMouseOver, 0764 darkerBorders, 0765 vArrows, 0766 xCheck, 0767 crButton, 0768 smallRadio, 0769 fillProgress, 0770 comboSplitter, 0771 highlightScrollViews, 0772 etchEntry, 0773 colorSliderMouseOver, 0774 thinSbarGroove, 0775 flatSbarButtons, 0776 borderSbarGroove, 0777 borderProgress, 0778 popupBorder, 0779 unifySpinBtns, 0780 unifyCombo, 0781 unifySpin, 0782 borderTab, 0783 borderInactiveTab, 0784 doubleGtkComboArrow, 0785 menuIcons, 0786 stdBtnSizes, 0787 xbar, 0788 forceAlternateLvCols, 0789 invertBotTab, 0790 boldProgress, 0791 coloredTbarMo, 0792 borderSelection, 0793 stripedSbar, 0794 shadePopupMenu, 0795 hideShortcutUnderline; 0796 EFrame groupBox; 0797 EGlow glowProgress; 0798 bool lvLines; 0799 EGradType bgndGrad, 0800 menuBgndGrad; 0801 int menubarHiding, 0802 statusbarHiding, 0803 square, 0804 windowDrag, 0805 windowBorder, 0806 bgndOpacity, 0807 menuBgndOpacity, 0808 dlgOpacity, 0809 shadowSize; 0810 int dwtSettings; 0811 int titlebarButtons; 0812 TBCols titlebarButtonColors; 0813 ETitleBarIcon titlebarIcon; 0814 EStripe stripedProgress; 0815 ESliderStyle sliderStyle; 0816 EMouseOver coloredMouseOver; 0817 ETBarBorder toolbarBorders; 0818 ETBarBtn tbarBtns; 0819 EDefBtnIndicator defBtnIndicator; 0820 ELine sliderThumbs, 0821 handles, 0822 toolbarSeparators, 0823 splitters; 0824 ETabMo tabMouseOver; 0825 /* NOTE: If add an appearance setting, increase the number of custmo gradients to match! */ 0826 EAppearance appearance, 0827 bgndAppearance, 0828 menuBgndAppearance, 0829 menubarAppearance, 0830 menuitemAppearance, 0831 toolbarAppearance, 0832 lvAppearance, 0833 tabAppearance, 0834 activeTabAppearance, 0835 sliderAppearance, 0836 titlebarAppearance, 0837 inactiveTitlebarAppearance, 0838 titlebarButtonAppearance, 0839 dwtAppearance, 0840 selectionAppearance, 0841 menuStripeAppearance, 0842 progressAppearance, 0843 progressGrooveAppearance, 0844 grooveAppearance, 0845 sunkenAppearance, 0846 sbarBgndAppearance, 0847 sliderFill, 0848 tooltipAppearance, 0849 tbarBtnAppearance; 0850 EShade shadeSliders, 0851 shadeMenubars, 0852 menuStripe, 0853 shadeCheckRadio, 0854 comboBtn, 0855 sortedLv, 0856 crColor, 0857 progressColor; 0858 EColor progressGrooveColor; 0859 EEffect buttonEffect, 0860 tbarBtnEffect; 0861 EScrollbar scrollbarType; 0862 EFocus focus; 0863 QColor customMenubarsColor, 0864 customSlidersColor, 0865 customMenuNormTextColor, 0866 customMenuSelTextColor, 0867 customMenuStripeColor, 0868 customCheckRadioColor, 0869 customComboBtnColor, 0870 customSortedLvColor, 0871 customCrBgndColor, 0872 customProgressColor; 0873 Shading shading; 0874 EAlign titlebarAlignment; 0875 EEffect titlebarEffect; 0876 bool centerTabText; 0877 double customShades[QTC_NUM_STD_SHADES], 0878 customAlphas[NUM_STD_ALPHAS]; 0879 GradientCont customGradient; 0880 QtCPixmap bgndPixmap; 0881 QtCPixmap menuBgndPixmap; 0882 QtCImage bgndImage, 0883 menuBgndImage; 0884 /* NOTE: If add any more settings here, need to alter copyOpts/freeOpts/defaultSettings in config_file.c */ 0885 Strings noBgndGradientApps, 0886 noBgndOpacityApps, 0887 noMenuBgndOpacityApps, 0888 noBgndImageApps; 0889 Strings noMenuStripeApps; 0890 Strings menubarApps, 0891 statusbarApps, 0892 useQtFileDialogApps, 0893 windowDragWhiteList, 0894 windowDragBlackList, 0895 nonnativeMenubarApps; 0896 #ifdef Q_OS_MAC 0897 // list of apps that have been forced to use a non-native menubar during this process lifetime 0898 // should only contain the name of the running executable. 0899 // NOT saved to disk! 0900 Strings currentNonnativeMenubarApps; 0901 #endif 0902 bool onlyTicksInMenu; 0903 bool buttonStyleMenuSections; 0904 } Options; 0905 0906 void qtcSetupGradient(Gradient *grad, EGradientBorder border, int numStops, ...); 0907 const Gradient *qtcGetGradient(EAppearance app, const Options *opts); 0908 0909 QTC_ALWAYS_INLINE static inline bool 0910 qtcDrawMenuBorder(const Options &opts) 0911 { 0912 return (opts.menuBgndAppearance != APPEARANCE_FLAT && 0913 opts.version >= qtcMakeVersion(1, 7) && 0914 qtcUseBorder(qtcGetGradient(opts.menuBgndAppearance, 0915 &opts)->border)); 0916 } 0917 0918 QTC_ALWAYS_INLINE static inline bool 0919 qtcIsCustomBgnd(const Options &opts) 0920 { 0921 return (!qtcIsFlatBgnd(opts.bgndAppearance) || 0922 opts.bgndImage.type != IMG_NONE || 0923 opts.bgndOpacity != 100 || opts.dlgOpacity != 100); 0924 } 0925 0926 #ifdef QTC_QT4_ENABLE_KDE 0927 #include <KDE/KColorUtils> 0928 #define tint(COLA, COLB, FACTOR) KColorUtils::tint((COLA), (COLB), (FACTOR)) 0929 #define midColor(COLA, COLB) KColorUtils::mix((COLA), (COLB), 0.5) 0930 #else 0931 #include <qtcurve-utils/color.h> 0932 #define tint(COLA, COLB, FACTOR) qtcColorTint(&(COLA), &(COLB), (FACTOR)) 0933 #define midColor(COLA, COLB) qtcColorMix(&(COLA), &(COLB), 0.5) 0934 #endif 0935 0936 EAppearance qtcWidgetApp(EWidget w, const Options *opts, bool active=true); 0937 0938 typedef enum 0939 { 0940 RADIUS_SELECTION, 0941 RADIUS_INTERNAL, 0942 RADIUS_EXTERNAL, 0943 RADIUS_ETCH 0944 } ERadius; 0945 0946 #define MIN_ROUND_MAX_HEIGHT 12 0947 #define MIN_ROUND_MAX_WIDTH 24 0948 #define BGND_SHINE_SIZE 300 0949 #define BGND_SHINE_STEPS 8 0950 0951 #define MIN_ROUND_FULL_SIZE 8 0952 #define MIN_ROUND_EXTRA_SIZE(W) (WIDGET_SPIN==(W) ? 7 : 14) 0953 0954 namespace QtCurve { 0955 0956 static inline bool 0957 isMaxRoundWidget(EWidget w) 0958 { 0959 return oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON); 0960 } 0961 0962 static inline bool 0963 isExtraRoundWidget(EWidget w) 0964 { 0965 return noneOf(w, WIDGET_MENU_ITEM, WIDGET_TAB_FRAME, WIDGET_PBAR_TROUGH, 0966 WIDGET_PROGRESSBAR, WIDGET_MDI_WINDOW, 0967 WIDGET_MDI_WINDOW_TITLE); 0968 } 0969 0970 static inline int 0971 sbSliderMOLen(const Options &opts, int len) 0972 { 0973 if (len < 22 && opts.round < ROUND_FULL) 0974 return 2; 0975 if (len < 32 || noneOf(opts.shadeSliders, SHADE_SELECTED, 0976 SHADE_BLEND_SELECTED)) 0977 return 4; 0978 return 6; 0979 } 0980 0981 } 0982 0983 #define EXTRA_INNER_RADIUS 3.5 0984 #define EXTRA_OUTER_RADIUS 4.5 0985 #define EXTRA_ETCH_RADIUS 5.5 0986 #define FULL_INNER_RADIUS 1.5 0987 #define FULL_OUTER_RADIUS 2.5 0988 #define FULL_ETCH_RADIUS 3.5 0989 #define SLIGHT_INNER_RADIUS 0.75 0990 #define SLIGHT_OUTER_RADIUS 1.75 0991 #define SLIGHT_ETCH_RADIUS 2.75 0992 0993 #define MAX_RADIUS_INTERNAL 9.0 0994 #define MAX_RADIUS_EXTERNAL (MAX_RADIUS_INTERNAL+2.0) 0995 0996 ERound qtcGetWidgetRound(const Options *opts, int w, int h, EWidget widget); 0997 double qtcGetRadius(const Options *opts, int w, int h, EWidget widget, 0998 ERadius rad); 0999 1000 #endif // __COMMON_H__