File indexing completed on 2024-04-21 05:46:53
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/options.h> 0029 #include <qtcurve-utils/color.h> 0030 0031 /* 0032 The following #define disables the rounding when scrollbar type==none. 0033 #define SIMPLE_SCROLLBARS 0034 */ 0035 0036 /* 0037 The following #define controls whether a scrollbar's slider should overlap 0038 the scrollbar buttons when at min/max. This removes the thick looking line 0039 between the slider and the buttons. 0040 */ 0041 #define INCREASE_SB_SLIDER 0042 0043 #include <glib.h> 0044 #include <gtk/gtk.h> 0045 #include <gdk/gdk.h> 0046 0047 typedef char **Strings; 0048 0049 #define SETTINGS_GROUP "Settings" 0050 #define KWIN_GROUP "KWin" 0051 0052 /* qtc_<theme name>.themerc support */ 0053 #define THEME_DIR "/share/apps/kstyle/themes/" 0054 #define THEME_DIR4 "/share/kde4/apps/kstyle/themes/" 0055 #define THEME_PREFIX "qtc_" 0056 #define THEME_SUFFIX ".themerc" 0057 #define BORDER_SIZE_FILE "windowBorderSizes" 0058 0059 #define LV_SIZE 7 0060 0061 #define LARGE_ARR_WIDTH 7 0062 #define LARGE_ARR_HEIGHT 4 0063 #define SMALL_ARR_WIDTH 5 0064 #define SMALL_ARR_HEIGHT 3 0065 0066 #define NUM_EXTRA_SHADES 3 0067 0068 enum { 0069 ALPHA_ETCH_LIGHT = 0, 0070 ALPHA_ETCH_DARK, 0071 NUM_STD_ALPHAS 0072 }; 0073 0074 #define TOTAL_SHADES (QTC_NUM_STD_SHADES + NUM_EXTRA_SHADES) 0075 #define ORIGINAL_SHADE TOTAL_SHADES 0076 0077 #define SHADE_ORIG_HIGHLIGHT QTC_NUM_STD_SHADES 0078 #define SHADE_4_HIGHLIGHT (QTC_NUM_STD_SHADES + 1) 0079 #define SHADE_2_HIGHLIGHT (QTC_NUM_STD_SHADES + 2) 0080 0081 #define DEFAULT_CONTRAST 7 0082 0083 #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)) 0084 #define SLIDER_SIZE (opts.sliderWidth<DEFAULT_SLIDER_WIDTH ? DEFAULT_SLIDER_WIDTH-2 : opts.sliderWidth) 0085 #define CIRCULAR_SLIDER_SIZE 15 0086 #define GLOW_MO 1 /*ORIGINAL_SHADE*/ 0087 #define GLOW_DEFBTN 1 0088 #define GLOW_ALPHA(DEF) ((DEF) ? 0.5 : 0.65) 0089 #define DEF_BNT_TINT 0.4 0090 #define ENTRY_INNER_ALPHA 0.4 0091 #define INACTIVE_SEL_ALPHA 0.5 0092 0093 #define BLEND_TITLEBAR (opts.menubarAppearance==opts.titlebarAppearance && opts.menubarAppearance==opts.inactiveTitlebarAppearance && \ 0094 !(opts.windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) && SHADE_WINDOW_BORDER==opts.shadeMenubars && opts.windowDrag) 0095 0096 #define STD_BORDER_BR 2 0097 #define PBAR_BORDER 4 0098 #define ARROW_MO_SHADE 4 0099 #define LOWER_BORDER_ALPHA 0.35 0100 #define BORDER_VAL(E) (/*(E) ?*/ QTC_STD_BORDER/* : DISABLED_BORDER*/) 0101 #define SLIDER_MO_BORDER_VAL 3 0102 0103 #define FRAME_DARK_SHADOW 2 0104 #define FOCUS_SHADE(SEL) (FOCUS_GLOW==opts.focus ? GLOW_MO : ((SEL) ? 3 : ORIGINAL_SHADE)) 0105 #define MENU_STRIPE_SHADE (opts.lighterPopupMenuBgnd ? ORIGINAL_SHADE : 2) 0106 #define MENU_SEP_SHADE (opts.lighterPopupMenuBgnd ? 4 : 3) 0107 0108 #define BGND_STRIPE_SHADE 0.95 0109 0110 #define INVERT_SHADE(A) (1.0+(1.0-(A))) 0111 0112 #define TOOLBAR_SEP_GAP (opts.fadeLines ? 5 : 6) 0113 #define FADE_SIZE 0.4 0114 0115 #define IS_GLASS(A) QtCurve::oneOf(A, APPEARANCE_DULL_GLASS, APPEARANCE_SHINY_GLASS) 0116 #define IS_CUSTOM(A) ((A)>=APPEARANCE_CUSTOM1 && (A)<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD)) 0117 0118 #define MENUBAR_DARK_LIMIT (160<<8) 0119 #define TOO_DARK(A) ((A).red<MENUBAR_DARK_LIMIT || (A).green<MENUBAR_DARK_LIMIT || (A).blue<MENUBAR_DARK_LIMIT) 0120 0121 #define TO_FACTOR(A) ((100.0+((double)(A)))/100.0) 0122 #define DEFAULT_HIGHLIGHT_FACTOR 3 0123 #define DEFAULT_SPLITTER_HIGHLIGHT_FACTOR 3 0124 #define DEFAULT_CR_HIGHLIGHT_FACTOR 0 0125 #define DEFAULT_EXPANDER_HIGHLIGHT_FACTOR 3 0126 #define MAX_HIGHLIGHT_FACTOR 50 0127 #define MIN_HIGHLIGHT_FACTOR -50 0128 #define MENUBAR_DARK_FACTOR TO_FACTOR(-3) 0129 #define LV_HEADER_DARK_FACTOR TO_FACTOR(-10) 0130 #define DEF_POPUPMENU_LIGHT_FACTOR 2 0131 #define MIN_LIGHTER_POPUP_MENU -100 0132 #define MAX_LIGHTER_POPUP_MENU 100 0133 0134 #define MIN_GB_FACTOR -50 0135 #define MAX_GB_FACTOR 50 0136 #define DEF_GB_FACTOR -3 0137 0138 #define TO_ALPHA(A) (std::abs(A) / 100.0) 0139 #define DEF_COLOR_SEL_TAB_FACTOR 25 0140 #define MIN_COLOR_SEL_TAB_FACTOR 0 0141 #define MAX_COLOR_SEL_TAB_FACTOR 100 0142 0143 #define DEF_TAB_BGND 0 0144 #define MIN_TAB_BGND -5 0145 #define MAX_TAB_BGND 5 0146 0147 #define DEFAULT_MENU_DELAY 225 0148 #define MIN_MENU_DELAY 1 0149 #define MAX_MENU_DELAY 500 0150 0151 #define DEFAULT_SLIDER_WIDTH 15 0152 #define MIN_SLIDER_WIDTH_ROUND 7 0153 #define MIN_SLIDER_WIDTH_THIN_GROOVE 9 0154 #define MIN_SLIDER_WIDTH 5 0155 #define MAX_SLIDER_WIDTH 31 0156 0157 #define SIZE_GRIP_SIZE 12 0158 0159 #define USE_GLOW_FOCUS(mouseOver) (FOCUS_GLOW==opts.focus && (MO_GLOW!=opts.coloredMouseOver || !(mouseOver))) 0160 0161 #define MENUBAR_GLASS_SELECTED_DARK_FACTOR 0.9 0162 #define MENUITEM_FADE_SIZE 48 0163 0164 #define NUM_SPLITTER_DASHES 21 0165 0166 #define ETCH_WIDGET(w) \ 0167 (QtCurve::oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, \ 0168 WIDGET_TOGGLE_BUTTON, WIDGET_SLIDER_TROUGH, \ 0169 WIDGET_CHECKBOX, WIDGET_RADIO_BUTTON, \ 0170 WIDGET_FILLED_SLIDER_TROUGH, WIDGET_COMBO, \ 0171 WIDGET_TOOLBAR_BUTTON, WIDGET_UNCOLOURED_MO_BUTTON) || \ 0172 ((w) == WIDGET_SLIDER && opts.coloredMouseOver == MO_GLOW)) 0173 0174 #define SLIDER(w) QtCurve::oneOf(w, WIDGET_SB_SLIDER, WIDGET_SLIDER) 0175 #define CIRCULAR_SLIDER(w) (WIDGET_SLIDER==(w) && SLIDER_CIRCULAR==opts.sliderStyle) 0176 0177 #define MODIFY_AGUA_X(A, X) (APPEARANCE_AGUA==(A) ? (X) : (A)) 0178 #define MODIFY_AGUA(A) MODIFY_AGUA_X((A), APPEARANCE_AGUA_MOD) 0179 #define AGUA_MAX 32.0 0180 #define AGUA_MID_SHADE 0.85 0181 0182 #define COLORED_BORDER_SIZE 3 0183 #define PROGRESS_CHUNK_WIDTH 10 0184 #define STRIPE_WIDTH 10 0185 #define DRAW_LIGHT_BORDER(SUKEN, WIDGET, APP) \ 0186 (!(SUKEN) && (qtcGetGradient(APP, &opts)->border == GB_LIGHT) && \ 0187 (WIDGET) != WIDGET_MENU_ITEM && !IS_TROUGH(WIDGET) && \ 0188 ((WIDGET) != WIDGET_DEF_BUTTON || opts.defBtnIndicator != IND_COLORED)) 0189 0190 #define DRAW_3D_FULL_BORDER(SUNKEN, APP) \ 0191 (!(SUNKEN) && GB_3D_FULL==qtcGetGradient((APP), &opts)->border) 0192 0193 #define DRAW_3D_BORDER(SUNKEN, APP) \ 0194 (!(SUNKEN) && GB_3D==qtcGetGradient((APP), &opts)->border) 0195 0196 #define DRAW_SHINE(SUNKEN, APP) \ 0197 (!(SUNKEN) && GB_SHINE==qtcGetGradient((APP), &opts)->border) 0198 0199 #define LIGHT_BORDER(APP) (APPEARANCE_DULL_GLASS==(APP) ? 1 : 0) 0200 0201 #define PROGRESS_ANIMATION 100 0202 #define MIN_SLIDER_SIZE(A) (LINE_DOTS==(A) ? 24 : 20) 0203 0204 #define CR_SMALL_SIZE 13 0205 #define CR_LARGE_SIZE 15 0206 0207 #define TAB_APP(A) \ 0208 (QtCurve::oneOf(A, APPEARANCE_BEVELLED, APPEARANCE_SPLIT_GRADIENT) ? \ 0209 APPEARANCE_GRADIENT : (A)) 0210 #define NORM_TAB_APP TAB_APP(opts.tabAppearance) 0211 #define SEL_TAB_APP TAB_APP(opts.activeTabAppearance) 0212 0213 #define SLIDER_MO_SHADE (SHADE_SELECTED==opts.shadeSliders ? 1 : (SHADE_BLEND_SELECTED==opts.shadeSliders ? 0 : ORIGINAL_SHADE)) 0214 #define SLIDER_MO_PLASTIK_BORDER (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 2 : 1) 0215 #define SLIDER_MO_LEN (SLIDER_TRIANGULAR==opts.sliderStyle ? 2 : (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 4 : 3)) 0216 0217 #define CR_MO_FILL 1 0218 #define MO_DEF_BTN 2 0219 #define MO_PLASTIK_DARK(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 3 : 2) /*? 2 : 1) */ 0220 #define MO_PLASTIK_LIGHT(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 4 : 1) /*? 2 : 0) */ 0221 0222 #define MO_STD_DARK(W) \ 0223 (opts.coloredMouseOver == MO_GLOW ? 1 : MO_PLASTIK_DARK(W)) 0224 #define MO_STD_LIGHT(W, S) \ 0225 (opts.coloredMouseOver == MO_GLOW ? 1 : MO_PLASTIK_LIGHT(W)) 0226 0227 #define FOCUS_ALPHA 0.08 0228 #define BORDER_BLEND_ALPHA(W) \ 0229 (QtCurve::oneOf(W, WIDGET_ENTRY, WIDGET_SCROLLVIEW, \ 0230 WIDGET_SPIN, WIDGET_COMBO_BUTTON) ? 0.4 : 0.7) 0231 0232 #define ETCH_TOP_ALPHA 0.055 0233 #define ETCH_BOTTOM_ALPHA 0.1 0234 #define ETCH_RADIO_TOP_ALPHA 0.09 0235 0236 #define RINGS_INNER_ALPHA(T) qtc_ring_alpha[IMG_PLAIN_RINGS==(T) ? 1 : 0] //(IMG_PLAIN_RINGS==opts.bgndImage.type ? 0.25 : 0.125) 0237 #define RINGS_OUTER_ALPHA qtc_ring_alpha[2] //0.5 0238 #define RINGS_WIDTH(T) (IMG_SQUARE_RINGS==T ? 260 : 450) 0239 #define RINGS_HEIGHT(T) (IMG_SQUARE_RINGS==T ? 220 : 360) 0240 0241 #define RINGS_SQUARE_LARGE_ALPHA (RINGS_OUTER_ALPHA*0.675) 0242 #define RINGS_SQUARE_SMALL_ALPHA (RINGS_OUTER_ALPHA*0.50) 0243 #define RINGS_SQUARE_LINE_WIDTH 20.0 0244 #define RINGS_SQUARE_RADIUS 18.0 0245 #define RINGS_SQUARE_LARGE_SIZE 120.0 0246 #define RINGS_SQUARE_SMALL_SIZE 100.0 0247 #define GLOW_PROG_ALPHA 0.55 0248 0249 typedef enum { 0250 WINDOW_BORDER_COLOR_TITLEBAR_ONLY = 0x01, // colorTitlebarOnly 0251 WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR = 0x02, // titlebarMenuColor 0252 WINDOW_BORDER_ADD_LIGHT_BORDER = 0x04, // titlebarBorder 0253 WINDOW_BORDER_BLEND_TITLEBAR = 0x08, // titlebarBlend 0254 WINDOW_BORDER_SEPARATOR = 0x10, 0255 WINDOW_BORDER_FILL_TITLEBAR = 0x20 0256 } EWindowBorder; 0257 0258 typedef enum { 0259 IMG_NONE, 0260 IMG_BORDERED_RINGS, 0261 IMG_PLAIN_RINGS, 0262 IMG_SQUARE_RINGS, 0263 IMG_FILE 0264 } EImageType; 0265 0266 typedef struct { 0267 const char *file; 0268 GdkPixbuf *img; 0269 } QtCPixmap; 0270 0271 typedef enum { 0272 PP_TL, 0273 PP_TM, 0274 PP_TR, 0275 PP_BL, 0276 PP_BM, 0277 PP_BR, 0278 PP_LM, 0279 PP_RM, 0280 PP_CENTRED, 0281 } EPixPos; 0282 0283 typedef struct { 0284 EImageType type; 0285 bool loaded, 0286 onBorder; 0287 QtCPixmap pixmap; 0288 int width, 0289 height; 0290 EPixPos pos; 0291 } QtCImage; 0292 0293 typedef enum { 0294 THIN_BUTTONS = 0x0001, 0295 THIN_MENU_ITEMS = 0x0002, 0296 THIN_FRAMES = 0x0004 0297 } EThinFlags; 0298 0299 typedef enum { 0300 SQUARE_NONE = 0x0000, 0301 SQUARE_ENTRY = 0x0001, 0302 SQUARE_PROGRESS = 0x0002, 0303 SQUARE_SCROLLVIEW = 0x0004, 0304 SQUARE_LISTVIEW_SELECTION = 0x0008, 0305 SQUARE_FRAME = 0x0010, 0306 SQUARE_TAB_FRAME = 0x0020, 0307 SQUARE_SLIDER = 0x0040, 0308 SQUARE_SB_SLIDER = 0x0080, 0309 SQUARE_WINDOWS = 0x0100, 0310 SQUARE_TOOLTIPS = 0x0200, 0311 SQUARE_POPUP_MENUS = 0x0400, 0312 0313 SQUARE_ALL = 0xFFFF 0314 } ESquare; 0315 0316 typedef enum { 0317 WM_DRAG_NONE = 0, 0318 WM_DRAG_MENUBAR = 1, 0319 WM_DRAG_MENU_AND_TOOLBAR = 2, 0320 WM_DRAG_ALL = 3 0321 } EWmDrag; 0322 0323 typedef enum 0324 { 0325 EFFECT_NONE, 0326 EFFECT_ETCH, 0327 EFFECT_SHADOW 0328 } EEffect; 0329 0330 typedef enum 0331 { 0332 PIX_CHECK, 0333 PIX_BLANK 0334 } EPixmap; 0335 0336 typedef enum { 0337 WIDGET_TAB_TOP, 0338 WIDGET_TAB_BOT, 0339 WIDGET_STD_BUTTON, 0340 WIDGET_DEF_BUTTON, 0341 WIDGET_TOOLBAR_BUTTON, 0342 WIDGET_LISTVIEW_HEADER, 0343 WIDGET_SLIDER, 0344 WIDGET_SLIDER_TROUGH, 0345 WIDGET_FILLED_SLIDER_TROUGH, 0346 WIDGET_SB_SLIDER, 0347 WIDGET_SB_BUTTON, 0348 WIDGET_SB_BGND, 0349 WIDGET_TROUGH, 0350 WIDGET_CHECKBOX, 0351 WIDGET_RADIO_BUTTON, 0352 WIDGET_COMBO, 0353 WIDGET_COMBO_BUTTON, 0354 WIDGET_MENU_ITEM, 0355 WIDGET_PROGRESSBAR, 0356 WIDGET_PBAR_TROUGH, 0357 WIDGET_ENTRY_PROGRESSBAR, 0358 WIDGET_TOGGLE_BUTTON, 0359 WIDGET_SPIN_UP, 0360 WIDGET_SPIN_DOWN, 0361 WIDGET_UNCOLOURED_MO_BUTTON, 0362 WIDGET_SPIN, 0363 WIDGET_ENTRY, 0364 WIDGET_SCROLLVIEW, 0365 WIDGET_SELECTION, 0366 WIDGET_FRAME, 0367 WIDGET_NO_ETCH_BTN, 0368 WIDGET_MENU_BUTTON, // Qt4 only 0369 WIDGET_FOCUS, 0370 WIDGET_TAB_FRAME, 0371 WIDGET_TOOLTIP, 0372 WIDGET_OTHER 0373 } EWidget; 0374 0375 typedef enum 0376 { 0377 APP_ALLOW_BASIC, 0378 APP_ALLOW_FADE, 0379 APP_ALLOW_STRIPED, 0380 APP_ALLOW_NONE 0381 } EAppAllow; 0382 0383 #define IS_SLIDER(w) QtCurve::oneOf(w, WIDGET_SLIDER, WIDGET_SB_SLIDER) 0384 #define IS_TROUGH(w) QtCurve::oneOf(w, WIDGET_SLIDER_TROUGH, \ 0385 WIDGET_PBAR_TROUGH, WIDGET_TROUGH, \ 0386 WIDGET_FILLED_SLIDER_TROUGH) 0387 #define IS_TOGGLE_BUTTON(W) QtCurve::oneOf(W, WIDGET_TOGGLE_BUTTON, \ 0388 WIDGET_CHECKBOX) 0389 0390 typedef enum { 0391 IND_CORNER, 0392 IND_FONT_COLOR, 0393 IND_COLORED, 0394 IND_TINT, 0395 IND_GLOW, 0396 IND_DARKEN, 0397 IND_SELECTED, 0398 IND_NONE 0399 } EDefBtnIndicator; 0400 0401 typedef enum 0402 { 0403 LINE_NONE, 0404 LINE_SUNKEN, 0405 LINE_FLAT, 0406 LINE_DOTS, 0407 LINE_1DOT, 0408 LINE_DASHES, 0409 } ELine; 0410 0411 typedef enum 0412 { 0413 TB_NONE, 0414 TB_LIGHT, 0415 TB_DARK, 0416 TB_LIGHT_ALL, 0417 TB_DARK_ALL 0418 } ETBarBorder; 0419 0420 typedef enum 0421 { 0422 TBTN_STANDARD, 0423 TBTN_RAISED, 0424 TBTN_JOINED 0425 } ETBarBtn; 0426 0427 typedef enum 0428 { 0429 BORDER_FLAT, 0430 BORDER_RAISED, 0431 BORDER_SUNKEN, 0432 BORDER_LIGHT 0433 } EBorder; 0434 0435 /* 0436 This whole EShade enum is a complete mess! 0437 For menubars, we dont blend - so blend is selected, and selected is darken 0438 For check/radios - we dont blend, so blend is selected, and we dont allow darken 0439 */ 0440 typedef enum { 0441 SHADE_NONE, 0442 SHADE_CUSTOM, 0443 SHADE_SELECTED, 0444 SHADE_BLEND_SELECTED, 0445 SHADE_DARKEN, 0446 SHADE_WINDOW_BORDER 0447 } EShade; 0448 0449 typedef enum { 0450 ECOLOR_BASE, 0451 ECOLOR_BACKGROUND, 0452 ECOLOR_DARK, 0453 } EColor; 0454 0455 typedef enum { 0456 ROUND_NONE, 0457 ROUND_SLIGHT, 0458 ROUND_FULL, 0459 ROUND_EXTRA, 0460 ROUND_MAX 0461 } ERound; 0462 0463 typedef enum { 0464 GB_LBL_BOLD = 0x01, 0465 GB_LBL_CENTRED = 0x02, 0466 GB_LBL_INSIDE = 0x04, 0467 GB_LBL_OUTSIDE = 0x08 0468 } EGBLabel; 0469 0470 typedef enum { 0471 MO_NONE, 0472 MO_COLORED, 0473 MO_COLORED_THICK, 0474 MO_PLASTIK, 0475 MO_GLOW 0476 } EMouseOver; 0477 0478 typedef enum { 0479 STRIPE_NONE, 0480 STRIPE_PLAIN, 0481 STRIPE_DIAGONAL, 0482 STRIPE_FADE 0483 } EStripe; 0484 0485 typedef enum { 0486 SLIDER_PLAIN, 0487 SLIDER_ROUND, 0488 SLIDER_PLAIN_ROTATED, 0489 SLIDER_ROUND_ROTATED, 0490 SLIDER_TRIANGULAR, 0491 SLIDER_CIRCULAR 0492 } ESliderStyle; 0493 0494 typedef enum { 0495 FOCUS_STANDARD, 0496 FOCUS_RECTANGLE, 0497 FOCUS_FULL, 0498 FOCUS_FILLED, 0499 FOCUS_LINE, 0500 FOCUS_GLOW, 0501 FOCUS_NONE 0502 } EFocus; 0503 0504 typedef enum { 0505 TAB_MO_TOP, 0506 TAB_MO_BOTTOM, 0507 TAB_MO_GLOW 0508 } ETabMo; 0509 0510 typedef enum { 0511 GT_HORIZ, 0512 GT_VERT 0513 } EGradType; 0514 0515 typedef enum { 0516 GLOW_NONE, 0517 GLOW_START, 0518 GLOW_MIDDLE, 0519 GLOW_END 0520 } EGlow; 0521 0522 enum 0523 { 0524 HIDE_NONE = 0x00, 0525 HIDE_KEYBOARD = 0x01, 0526 HIDE_KWIN = 0x02 0527 }; 0528 0529 typedef struct { 0530 double pos, 0531 val, 0532 alpha; 0533 } GradientStop; 0534 0535 typedef struct { 0536 int titleHeight, 0537 toolTitleHeight, 0538 bottom, 0539 sides; 0540 } WindowBorders; 0541 0542 typedef struct { 0543 EGradientBorder border; 0544 int numStops; 0545 GradientStop *stops; 0546 } Gradient; 0547 0548 #define USE_CUSTOM_SHADES(A) ((A).customShades[0]>0.00001) 0549 #define USE_CUSTOM_ALPHAS(A) ((A).customAlphas[0]>0.00001) 0550 0551 typedef struct { 0552 int version, 0553 contrast, 0554 passwordChar, 0555 highlightFactor, 0556 lighterPopupMenuBgnd, 0557 menuDelay, 0558 sliderWidth, 0559 tabBgnd, 0560 colorSelTab, 0561 expanderHighlight, 0562 crHighlight, 0563 splitterHighlight, 0564 crSize, 0565 gbFactor, 0566 gbLabel, 0567 thin; 0568 ERound round; 0569 bool embolden, 0570 highlightTab, 0571 roundAllTabs, 0572 animatedProgress, 0573 customMenuTextColor, 0574 menubarMouseOver, 0575 useHighlightForMenu, 0576 shadeMenubarOnlyWhenActive, 0577 lvButton, 0578 drawStatusBarFrames, 0579 fillSlider, 0580 roundMbTopOnly, 0581 gtkScrollViews, 0582 stdSidebarButtons, 0583 toolbarTabs, 0584 gtkComboMenus, 0585 mapKdeIcons, 0586 gtkButtonOrder, 0587 fadeLines, 0588 reorderGtkButtons, 0589 borderMenuitems, 0590 colorMenubarMouseOver, 0591 darkerBorders, 0592 vArrows, 0593 xCheck, 0594 crButton, 0595 smallRadio, 0596 fillProgress, 0597 comboSplitter, 0598 highlightScrollViews, 0599 etchEntry, 0600 colorSliderMouseOver, 0601 thinSbarGroove, 0602 flatSbarButtons, 0603 borderSbarGroove, 0604 borderProgress, 0605 popupBorder, 0606 unifySpinBtns, 0607 unifyCombo, 0608 unifySpin, 0609 borderTab, 0610 borderInactiveTab, 0611 doubleGtkComboArrow, 0612 menuIcons, 0613 forceAlternateLvCols, 0614 invertBotTab, 0615 boldProgress, 0616 coloredTbarMo, 0617 borderSelection, 0618 stripedSbar, 0619 shadePopupMenu, 0620 hideShortcutUnderline; 0621 EFrame groupBox; 0622 EGlow glowProgress; 0623 bool lvLines; 0624 EGradType bgndGrad, 0625 menuBgndGrad; 0626 int menubarHiding, 0627 statusbarHiding, 0628 square, 0629 windowDrag, 0630 windowBorder, 0631 bgndOpacity, 0632 menuBgndOpacity, 0633 dlgOpacity, 0634 shadowSize; 0635 EStripe stripedProgress; 0636 ESliderStyle sliderStyle; 0637 EMouseOver coloredMouseOver; 0638 ETBarBorder toolbarBorders; 0639 ETBarBtn tbarBtns; 0640 EDefBtnIndicator defBtnIndicator; 0641 ELine sliderThumbs, 0642 handles, 0643 toolbarSeparators, 0644 splitters; 0645 ETabMo tabMouseOver; 0646 /* NOTE: If add an appearance setting, increase the number of custmo gradients to match! */ 0647 EAppearance appearance, 0648 bgndAppearance, 0649 menuBgndAppearance, 0650 menubarAppearance, 0651 menuitemAppearance, 0652 toolbarAppearance, 0653 lvAppearance, 0654 tabAppearance, 0655 activeTabAppearance, 0656 sliderAppearance, 0657 titlebarAppearance, 0658 inactiveTitlebarAppearance, 0659 selectionAppearance, 0660 menuStripeAppearance, 0661 progressAppearance, 0662 progressGrooveAppearance, 0663 grooveAppearance, 0664 sunkenAppearance, 0665 sbarBgndAppearance, 0666 sliderFill, 0667 tooltipAppearance, 0668 tbarBtnAppearance; 0669 EShade shadeSliders, 0670 shadeMenubars, 0671 menuStripe, 0672 shadeCheckRadio, 0673 comboBtn, 0674 sortedLv, 0675 crColor, 0676 progressColor; 0677 EColor progressGrooveColor; 0678 EEffect buttonEffect, 0679 tbarBtnEffect; 0680 EScrollbar scrollbarType; 0681 EFocus focus; 0682 GdkColor customMenubarsColor, 0683 customSlidersColor, 0684 customMenuNormTextColor, 0685 customMenuSelTextColor, 0686 customMenuStripeColor, 0687 customCheckRadioColor, 0688 customComboBtnColor, 0689 customSortedLvColor, 0690 customCrBgndColor, 0691 customProgressColor; 0692 Shading shading; 0693 double customShades[QTC_NUM_STD_SHADES], 0694 customAlphas[NUM_STD_ALPHAS]; 0695 Gradient *customGradient[NUM_CUSTOM_GRAD]; 0696 QtCPixmap bgndPixmap; 0697 QtCPixmap menuBgndPixmap; 0698 QtCImage bgndImage, 0699 menuBgndImage; 0700 /* NOTE: If add any more settings here, need to alter 0701 copyOpts/freeOpts/defaultSettings in config_file.c */ 0702 Strings noBgndGradientApps, 0703 noBgndOpacityApps, 0704 noMenuBgndOpacityApps, 0705 noBgndImageApps; 0706 Strings noMenuStripeApps; 0707 // for completeness, unused: 0708 bool onlyTicksInMenu; 0709 bool buttonStyleMenuSections; 0710 int menuCloseDelay; 0711 } Options; 0712 0713 void qtcSetupGradient(Gradient *grad, EGradientBorder border, int numStops, ...); 0714 const Gradient *qtcGetGradient(EAppearance app, const Options *opts); 0715 0716 QTC_ALWAYS_INLINE static inline bool 0717 qtcDrawMenuBorder(const Options &opts) 0718 { 0719 return (opts.menuBgndAppearance != APPEARANCE_FLAT && 0720 opts.version >= qtcMakeVersion(1, 7) && 0721 qtcUseBorder(qtcGetGradient(opts.menuBgndAppearance, 0722 &opts)->border)); 0723 } 0724 0725 QTC_ALWAYS_INLINE static inline bool 0726 qtcIsCustomBgnd(const Options &opts) 0727 { 0728 return (!qtcIsFlatBgnd(opts.bgndAppearance) || 0729 opts.bgndImage.type != IMG_NONE || 0730 opts.bgndOpacity != 100 || opts.dlgOpacity != 100); 0731 } 0732 0733 EAppearance qtcWidgetApp(EWidget w, const Options *opts); 0734 0735 #define tint(COLA, COLB, FACTOR) qtcColorTint((COLA), (COLB), (FACTOR)) 0736 #define midColor(COLA, COLB) qtcColorMix((COLA), (COLB), 0.5) 0737 0738 typedef enum { 0739 RADIUS_SELECTION, 0740 RADIUS_INTERNAL, 0741 RADIUS_EXTERNAL, 0742 RADIUS_ETCH 0743 } ERadius; 0744 0745 #define MIN_ROUND_MAX_HEIGHT 12 0746 #define MIN_ROUND_MAX_WIDTH 24 0747 #define BGND_SHINE_SIZE 300 0748 #define BGND_SHINE_STEPS 8 0749 0750 #define MIN_ROUND_FULL_SIZE 8 0751 #define MIN_ROUND_EXTRA_SIZE(W) \ 0752 (QtCurve::oneOf(W, WIDGET_SPIN_UP, WIDGET_SPIN_DOWN, WIDGET_SPIN) ? 7 : 14) 0753 0754 namespace QtCurve { 0755 0756 static inline bool 0757 widgetIsButton(EWidget w) 0758 { 0759 return oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, WIDGET_TOGGLE_BUTTON, 0760 WIDGET_CHECKBOX, WIDGET_RADIO_BUTTON, WIDGET_RADIO_BUTTON, 0761 WIDGET_COMBO, WIDGET_COMBO_BUTTON, 0762 WIDGET_UNCOLOURED_MO_BUTTON, WIDGET_TOOLBAR_BUTTON); 0763 } 0764 0765 static inline bool 0766 isMaxRoundWidget(EWidget w) 0767 { 0768 return oneOf(w, WIDGET_STD_BUTTON, WIDGET_DEF_BUTTON, WIDGET_TOGGLE_BUTTON); 0769 } 0770 0771 static inline bool 0772 isExtraRoundWidget(EWidget w) 0773 { 0774 return noneOf(w, WIDGET_MENU_ITEM, WIDGET_TAB_FRAME, WIDGET_PBAR_TROUGH, 0775 WIDGET_PROGRESSBAR); 0776 } 0777 0778 static inline int 0779 sbSliderMOLen(const Options &opts, int len) 0780 { 0781 if (len < 22 && opts.round < ROUND_FULL) 0782 return 2; 0783 if (len < 32 || noneOf(opts.shadeSliders, SHADE_SELECTED, 0784 SHADE_BLEND_SELECTED)) 0785 return 4; 0786 return 6; 0787 } 0788 0789 } 0790 0791 #define EXTRA_INNER_RADIUS 4 0792 #define EXTRA_OUTER_RADIUS 5 0793 #define EXTRA_ETCH_RADIUS 6 0794 #define FULL_INNER_RADIUS 2 0795 #define FULL_OUTER_RADIUS 3 0796 #define FULL_ETCH_RADIUS 4 0797 #define SLIGHT_INNER_RADIUS 1 0798 #define SLIGHT_OUTER_RADIUS 2 0799 #define SLIGHT_ETCH_RADIUS 3 0800 0801 #define MAX_RADIUS_INTERNAL 9.0 0802 #define MAX_RADIUS_EXTERNAL (MAX_RADIUS_INTERNAL + 2.0) 0803 0804 ERound qtcGetWidgetRound(const Options *opts, int w, int h, EWidget widget); 0805 double qtcGetRadius(const Options *opts, int w, int h, EWidget widget, 0806 ERadius rad); 0807 0808 #endif // __COMMON_H__