//________________________________________________________________ void ColorSettings::init(const QPalette &palette) { m_palette = palette; { KConfigGroup wmConfig(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("WM")); m_activeFrameColor = wmConfig.readEntry("frame", palette.color(QPalette::Active, QPalette::Background)); m_inactiveFrameColor = wmConfig.readEntry("inactiveFrame", m_activeFrameColor); m_activeTitleBarColor = wmConfig.readEntry("activeBackground", palette.color(QPalette::Active, QPalette::Highlight)); m_inactiveTitleBarColor = wmConfig.readEntry("inactiveBackground", m_inactiveFrameColor); m_activeFontColor = wmConfig.readEntry("activeForeground", palette.color(QPalette::Active, QPalette::HighlightedText)); m_inactiveFontColor = wmConfig.readEntry("inactiveForeground", m_activeFontColor.dark()); } { KConfigGroup wmConfig(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("Colors:Window")); m_closeButtonColor = wmConfig.readEntry("ForegroundNegative", QColor(237, 21, 2)); } }
void ColorSettings::init(const QPalette &pal) { m_palette = pal; KConfigGroup wmConfig(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("WM")); m_activeFrameColor = wmConfig.readEntry("frame", pal.color(QPalette::Active, QPalette::Background)); m_inactiveFrameColor = wmConfig.readEntry("inactiveFrame", m_activeFrameColor); m_activeTitleBarColor = wmConfig.readEntry("activeBackground", pal.color(QPalette::Active, QPalette::Highlight)); m_inactiveTitleBarColor = wmConfig.readEntry("inactiveBackground", m_inactiveFrameColor); m_activeTitleBarBlendColor = wmConfig.readEntry("activeBlend", m_activeTitleBarColor.dark(110)); m_inactiveTitleBarBlendColor = wmConfig.readEntry("inactiveBlend", m_inactiveTitleBarColor.dark(110)); m_activeFontColor = wmConfig.readEntry("activeForeground", pal.color(QPalette::Active, QPalette::HighlightedText)); m_inactiveFontColor = wmConfig.readEntry("inactiveForeground", m_activeFontColor.dark()); m_activeButtonColor = wmConfig.readEntry("activeTitleBtnBg", m_activeFrameColor.light(130)); m_inactiveButtonColor = wmConfig.readEntry("inactiveTitleBtnBg", m_inactiveFrameColor.light(130)); m_activeHandle = wmConfig.readEntry("handle", m_activeFrameColor); m_inactiveHandle = wmConfig.readEntry("inactiveHandle", m_activeHandle); }
QPixmap PlastikButtonProvider::icon(ButtonIcon icon, int size, bool active, bool shadow) { Q_UNUSED(active); if (size%2 == 0) --size; QPixmap image(size, size); image.fill(Qt::transparent); QPainter p(&image); KConfigGroup wmConfig(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("WM")); const QColor color = wmConfig.readEntry("activeForeground", QPalette().color(QPalette::Active, QPalette::HighlightedText)); if (shadow) { p.setPen(KColorScheme::shade(color, KColorScheme::ShadowShade)); } else { p.setPen(color); } const QRect r = image.rect(); // line widths int lwTitleBar = 1; if (r.width() > 16) { lwTitleBar = 4; } else if (r.width() > 4) { lwTitleBar = 2; } int lwArrow = 1; if (r.width() > 16) { lwArrow = 4; } else if (r.width() > 7) { lwArrow = 2; } switch(icon) { case CloseIcon: { int lineWidth = 1; if (r.width() > 16) { lineWidth = 3; } else if (r.width() > 4) { lineWidth = 2; } drawObject(p, DiagonalLine, r.x(), r.y(), r.width(), lineWidth); drawObject(p, CrossDiagonalLine, r.x(), r.bottom(), r.width(), lineWidth); break; } case MaxIcon: { int lineWidth2 = 1; // frame if (r.width() > 16) { lineWidth2 = 2; } else if (r.width() > 4) { lineWidth2 = 1; } drawObject(p, HorizontalLine, r.x(), r.top(), r.width(), lwTitleBar); drawObject(p, HorizontalLine, r.x(), r.bottom()-(lineWidth2-1), r.width(), lineWidth2); drawObject(p, VerticalLine, r.x(), r.top(), r.height(), lineWidth2); drawObject(p, VerticalLine, r.right()-(lineWidth2-1), r.top(), r.height(), lineWidth2); break; } case MaxRestoreIcon: { int lineWidth2 = 1; // frame if (r.width() > 16) { lineWidth2 = 2; } else if (r.width() > 4) { lineWidth2 = 1; } int margin1, margin2; margin1 = margin2 = lineWidth2*2; if (r.width() < 8) margin1 = 1; // background window drawObject(p, HorizontalLine, r.x()+margin1, r.top(), r.width()-margin1, lineWidth2); drawObject(p, HorizontalLine, r.right()-margin2, r.bottom()-(lineWidth2-1)-margin1, margin2, lineWidth2); drawObject(p, VerticalLine, r.x()+margin1, r.top(), margin2, lineWidth2); drawObject(p, VerticalLine, r.right()-(lineWidth2-1), r.top(), r.height()-margin1, lineWidth2); // foreground window drawObject(p, HorizontalLine, r.x(), r.top()+margin2, r.width()-margin2, lwTitleBar); drawObject(p, HorizontalLine, r.x(), r.bottom()-(lineWidth2-1), r.width()-margin2, lineWidth2); drawObject(p, VerticalLine, r.x(), r.top()+margin2, r.height(), lineWidth2); drawObject(p, VerticalLine, r.right()-(lineWidth2-1)-margin2, r.top()+margin2, r.height(), lineWidth2); break; } case MinIcon: { drawObject(p, HorizontalLine, r.x(), r.bottom()-(lwTitleBar-1), r.width(), lwTitleBar); break; } case HelpIcon: { int center = r.x()+r.width()/2 -1; int side = r.width()/4; // paint a question mark... code is quite messy, to be cleaned up later...! :o if (r.width() > 16) { int lineWidth = 3; // top bar drawObject(p, HorizontalLine, center-side+3, r.y(), 2*side-3-1, lineWidth); // top bar rounding drawObject(p, CrossDiagonalLine, center-side-1, r.y()+5, 6, lineWidth); drawObject(p, DiagonalLine, center+side-3, r.y(), 5, lineWidth); // right bar drawObject(p, VerticalLine, center+side+2-lineWidth, r.y()+3, r.height()-(2*lineWidth+side+2+1), lineWidth); // bottom bar drawObject(p, CrossDiagonalLine, center, r.bottom()-2*lineWidth, side+2, lineWidth); drawObject(p, HorizontalLine, center, r.bottom()-3*lineWidth+2, lineWidth, lineWidth); // the dot drawObject(p, HorizontalLine, center, r.bottom()-(lineWidth-1), lineWidth, lineWidth); } else if (r.width() > 8) { int lineWidth = 2; // top bar drawObject(p, HorizontalLine, center-(side-1), r.y(), 2*side-1, lineWidth); // top bar rounding if (r.width() > 9) { drawObject(p, CrossDiagonalLine, center-side-1, r.y()+3, 3, lineWidth); } else { drawObject(p, CrossDiagonalLine, center-side-1, r.y()+2, 3, lineWidth); } drawObject(p, DiagonalLine, center+side-1, r.y(), 3, lineWidth); // right bar drawObject(p, VerticalLine, center+side+2-lineWidth, r.y()+2, r.height()-(2*lineWidth+side+1), lineWidth); // bottom bar drawObject(p, CrossDiagonalLine, center, r.bottom()-2*lineWidth+1, side+2, lineWidth); // the dot drawObject(p, HorizontalLine, center, r.bottom()-(lineWidth-1), lineWidth, lineWidth); } else { int lineWidth = 1; // top bar drawObject(p, HorizontalLine, center-(side-1), r.y(), 2*side, lineWidth); // top bar rounding drawObject(p, CrossDiagonalLine, center-side-1, r.y()+1, 2, lineWidth); // right bar drawObject(p, VerticalLine, center+side+1, r.y(), r.height()-(side+2+1), lineWidth); // bottom bar drawObject(p, CrossDiagonalLine, center, r.bottom()-2, side+2, lineWidth); // the dot drawObject(p, HorizontalLine, center, r.bottom(), 1, 1); } break; } case NotOnAllDesktopsIcon: { int lwMark = r.width()-lwTitleBar*2-2; if (lwMark < 1) lwMark = 3; drawObject(p, HorizontalLine, r.x()+(r.width()-lwMark)/2, r.y()+(r.height()-lwMark)/2, lwMark, lwMark); // Fall through to OnAllDesktopsIcon intended! } case OnAllDesktopsIcon: { // horizontal bars drawObject(p, HorizontalLine, r.x()+lwTitleBar, r.y(), r.width()-2*lwTitleBar, lwTitleBar); drawObject(p, HorizontalLine, r.x()+lwTitleBar, r.bottom()-(lwTitleBar-1), r.width()-2*lwTitleBar, lwTitleBar); // vertical bars drawObject(p, VerticalLine, r.x(), r.y()+lwTitleBar, r.height()-2*lwTitleBar, lwTitleBar); drawObject(p, VerticalLine, r.right()-(lwTitleBar-1), r.y()+lwTitleBar, r.height()-2*lwTitleBar, lwTitleBar); break; } case NoKeepAboveIcon: { int center = r.x()+r.width()/2; // arrow drawObject(p, CrossDiagonalLine, r.x(), center+2*lwArrow, center-r.x(), lwArrow); drawObject(p, DiagonalLine, r.x()+center, r.y()+1+2*lwArrow, center-r.x(), lwArrow); if (lwArrow>1) drawObject(p, HorizontalLine, center-(lwArrow-2), r.y()+2*lwArrow, (lwArrow-2)*2, lwArrow); // Fall through to KeepAboveIcon intended! } case KeepAboveIcon: { int center = r.x()+r.width()/2; // arrow drawObject(p, CrossDiagonalLine, r.x(), center, center-r.x(), lwArrow); drawObject(p, DiagonalLine, r.x()+center, r.y()+1, center-r.x(), lwArrow); if (lwArrow>1) drawObject(p, HorizontalLine, center-(lwArrow-2), r.y(), (lwArrow-2)*2, lwArrow); break; } case NoKeepBelowIcon: { int center = r.x()+r.width()/2; // arrow drawObject(p, DiagonalLine, r.x(), center-2*lwArrow, center-r.x(), lwArrow); drawObject(p, CrossDiagonalLine, r.x()+center, r.bottom()-1-2*lwArrow, center-r.x(), lwArrow); if (lwArrow>1) drawObject(p, HorizontalLine, center-(lwArrow-2), r.bottom()-(lwArrow-1)-2*lwArrow, (lwArrow-2)*2, lwArrow); // Fall through to KeepBelowIcon intended! } case KeepBelowIcon: { int center = r.x()+r.width()/2; // arrow drawObject(p, DiagonalLine, r.x(), center, center-r.x(), lwArrow); drawObject(p, CrossDiagonalLine, r.x()+center, r.bottom()-1, center-r.x(), lwArrow); if (lwArrow>1) drawObject(p, HorizontalLine, center-(lwArrow-2), r.bottom()-(lwArrow-1), (lwArrow-2)*2, lwArrow); break; } case ShadeIcon: { drawObject(p, HorizontalLine, r.x(), r.y(), r.width(), lwTitleBar); break; } case UnShadeIcon: { int lw1 = 1; int lw2 = 1; if (r.width() > 16) { lw1 = 4; lw2 = 2; } else if (r.width() > 7) { lw1 = 2; lw2 = 1; } int h = qMax( (r.width()/2), (lw1+2*lw2) ); // horizontal bars drawObject(p, HorizontalLine, r.x(), r.y(), r.width(), lw1); drawObject(p, HorizontalLine, r.x(), r.x()+h-(lw2-1), r.width(), lw2); // vertical bars drawObject(p, VerticalLine, r.x(), r.y(), h, lw2); drawObject(p, VerticalLine, r.right()-(lw2-1), r.y(), h, lw2); break; } case AppMenuIcon: { drawObject(p, HorizontalLine, r.x(), r.top()+(lwTitleBar-1), r.width(), lwTitleBar); drawObject(p, HorizontalLine, r.x(), r.center().y(), r.width(), lwTitleBar); drawObject(p, HorizontalLine, r.x(), r.bottom()-(lwTitleBar-1), r.width(), lwTitleBar); break; } default: break; } p.end(); return image; }
void KDecorationOptionsPrivate::updateSettings(KConfig* config) { KConfigGroup wmConfig(config, "WM"); // SettingColors QColor old_colors[NUM_COLORS*2]; for (int i = 0; i < NUM_COLORS * 2; ++i) old_colors[ i ] = colors[ i ]; QPalette appPal = QApplication::palette(); // normal colors colors[ColorFrame] = appPal.color(QPalette::Active, QPalette::Background); colors[ColorFrame] = wmConfig.readEntry("frame", colors[ColorFrame]); colors[ColorHandle] = colors[ColorFrame]; colors[ColorHandle] = wmConfig.readEntry("handle", colors[ColorHandle]); // full button configuration (background, blend, and foreground if (QPixmap::defaultDepth() > 8) colors[ColorButtonBg] = colors[ColorFrame].light(130); else colors[ColorButtonBg] = colors[ColorFrame]; colors[ColorButtonBg] = wmConfig.readEntry("activeTitleBtnBg", colors[ColorFrame]); colors[ColorTitleBar] = appPal.color(QPalette::Active, QPalette::Highlight); colors[ColorTitleBar] = wmConfig.readEntry("activeBackground", colors[ColorTitleBar]); if (QPixmap::defaultDepth() > 8) colors[ColorTitleBlend] = colors[ ColorTitleBar ].dark(110); else colors[ColorTitleBlend] = colors[ ColorTitleBar ]; colors[ColorTitleBlend] = wmConfig.readEntry("activeBlend", colors[ColorTitleBlend]); colors[ColorFont] = appPal.color(QPalette::Active, QPalette::HighlightedText); colors[ColorFont] = wmConfig.readEntry("activeForeground", colors[ColorFont]); // inactive colors[ColorFrame+NUM_COLORS] = wmConfig.readEntry("inactiveFrame", colors[ColorFrame]); colors[ColorTitleBar+NUM_COLORS] = colors[ColorFrame]; colors[ColorTitleBar+NUM_COLORS] = wmConfig. readEntry("inactiveBackground", colors[ColorTitleBar+NUM_COLORS]); if (QPixmap::defaultDepth() > 8) colors[ColorTitleBlend+NUM_COLORS] = colors[ ColorTitleBar+NUM_COLORS ].dark(110); else colors[ColorTitleBlend+NUM_COLORS] = colors[ ColorTitleBar+NUM_COLORS ]; colors[ColorTitleBlend+NUM_COLORS] = wmConfig.readEntry("inactiveBlend", colors[ColorTitleBlend+NUM_COLORS]); // full button configuration if (QPixmap::defaultDepth() > 8) colors[ColorButtonBg+NUM_COLORS] = colors[ColorFrame+NUM_COLORS].light(130); else colors[ColorButtonBg+NUM_COLORS] = colors[ColorFrame+NUM_COLORS]; colors[ColorButtonBg+NUM_COLORS] = wmConfig.readEntry("inactiveTitleBtnBg", colors[ColorButtonBg]); colors[ColorHandle+NUM_COLORS] = wmConfig.readEntry("inactiveHandle", colors[ColorHandle]); colors[ColorFont+NUM_COLORS] = colors[ColorFrame].dark(); colors[ColorFont+NUM_COLORS] = wmConfig.readEntry("inactiveForeground", colors[ColorFont+NUM_COLORS]); bool colorsChanged = false; for (int i = 0; i < NUM_COLORS * 2; ++i) if (old_colors[ i ] != colors[ i ]) { colorsChanged = true; break; } if (colorsChanged) { emit q->colorsChanged(); } // SettingFont QFont old_activeFont = activeFont; QFont old_inactiveFont = inactiveFont; QFont old_activeFontSmall = activeFontSmall; QFont old_inactiveFontSmall = inactiveFontSmall; QFont activeFontGuess = QFontDatabase::systemFont(QFontDatabase::TitleFont); activeFont = wmConfig.readEntry("activeFont", activeFontGuess); if (activeFont != old_activeFont) { emit q->activeFontChanged(); } inactiveFont = wmConfig.readEntry("inactiveFont", activeFont); if (inactiveFont != old_inactiveFont) { emit q->inactiveFontChanged(); } activeFontSmall = activeFont; // TODO: Is it useful ? (Temporary hack) //activeFontSmall.setPointSize(activeFont.pointSize() - 2 > 0 ? activeFont.pointSize() - 2 : activeFont.pointSize()+1 ); activeFontSmall = wmConfig.readEntry("activeFontSmall", activeFontSmall); if (activeFontSmall != old_activeFontSmall) { emit q->smallActiveFontChanged(); } inactiveFontSmall = wmConfig.readEntry("inactiveFontSmall", activeFontSmall); if (inactiveFontSmall != old_inactiveFontSmall) { emit q->smallInactiveFontChanged(); } KConfigGroup styleConfig(config, "Style"); // SettingsButtons const auto old_title_buttons_left = title_buttons_left; const auto old_title_buttons_right = title_buttons_right; bool old_custom_button_positions = custom_button_positions; custom_button_positions = styleConfig.readEntry("CustomButtonPositions", false); if (custom_button_positions) { title_buttons_left = q->readDecorationButtons(styleConfig, "ButtonsOnLeft", KDecorationOptions::defaultTitleButtonsLeft()); title_buttons_right = q->readDecorationButtons(styleConfig, "ButtonsOnRight", KDecorationOptions::defaultTitleButtonsRight()); } else { title_buttons_left = KDecorationOptions::defaultTitleButtonsLeft(); title_buttons_right = KDecorationOptions::defaultTitleButtonsRight(); } if (old_custom_button_positions != custom_button_positions) { emit q->customButtonPositionsChanged(); } if (old_title_buttons_left != title_buttons_left) { emit q->leftButtonsChanged(); } if (old_title_buttons_right != title_buttons_right) { emit q->rightButtonsChanged(); } // SettingTooltips bool old_show_tooltips = show_tooltips; show_tooltips = styleConfig.readEntry("ShowToolTips", true); if (old_show_tooltips != show_tooltips) { emit q->showTooltipsChanged(); } // SettingBorder BorderSize old_border_size = border_size; int border_size_num = styleConfig.readEntry("BorderSize", (int)BorderNormal); if (border_size_num >= 0 && border_size_num < BordersCount) border_size = static_cast< BorderSize >(border_size_num); else border_size = BorderNormal; if (old_border_size != border_size) { emit q->borderSizeChanged(); } cached_border_size = BordersCount; // invalid // destroy cached values int i; for (i = 0; i < NUM_COLORS * 2; ++i) { if (pal[i]) { delete pal[i]; pal[i] = nullptr; } } emit q->configChanged(); }