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