void ConfigTabAppearance::updateFontButtons() { if ( !isVisible() ) return; const int iconExtent = pointsToPixels(12); const QSize iconSize(iconExtent * 2, iconExtent); const auto ratio = ui->scrollAreaTheme->devicePixelRatio(); QPixmap pix(iconSize * ratio); pix.setDevicePixelRatio(ratio); const QRect textRect( QPoint(0, 0), iconSize ); const QRegExp re("^pushButton(.*)Font$"); QList<QPushButton *> buttons = ui->scrollAreaTheme->findChildren<QPushButton *>(re); for (auto button : buttons) { if ( re.indexIn(button->objectName()) == -1 ) Q_ASSERT(false); const QString colorButtonName = "pushButtonColor" + re.cap(1); QPushButton *buttonFg = ui->scrollAreaTheme->findChild<QPushButton *>(colorButtonName + "Fg"); QColor colorFg = (buttonFg == nullptr) ? m_theme.color("fg") : evalColor( buttonFg->property("VALUE").toString(), m_theme ); QPushButton *buttonBg = ui->scrollAreaTheme->findChild<QPushButton *>(colorButtonName + "Bg"); QColor colorBg = (buttonBg == nullptr) ? m_theme.color("bg") : evalColor( buttonBg->property("VALUE").toString(), m_theme ); pix.fill(colorBg); QPainter painter(&pix); painter.setPen(colorFg); QFont font = m_theme.themeFontFromString( button->property("VALUE").toString() ); painter.setFont(font); painter.drawText( textRect, Qt::AlignCenter, tr("Abc", "Preview text for font settings in appearance dialog") ); button->setIcon(pix); button->setIconSize(iconSize); } }
void ConfigTabAppearance::updateColorButtons() { if ( !isVisible() ) return; /* color indicating icons for color buttons */ const QSize iconSize = ui->pushButtonColorFg->iconSize(); QPixmap pix(iconSize); QList<QPushButton *> buttons = ui->scrollAreaTheme->findChildren<QPushButton *>(QRegExp("^pushButtonColor")); for (auto button : buttons) { QColor color = evalColor( button->property("VALUE").toString(), m_theme ); pix.fill(color); button->setIcon(pix); button->setIconSize(pix.size()); } }
void ConfigTabAppearance::colorButtonClicked(QObject *button) { QColor color = evalColor( button->property("VALUE").toString(), m_theme ); QColorDialog dialog(this); dialog.setOptions(dialog.options() | QColorDialog::ShowAlphaChannel); dialog.setCurrentColor(color); if ( dialog.exec() == QDialog::Accepted ) { color = dialog.selectedColor(); button->setProperty( "VALUE", serializeColor(color) ); decoratePreview(); const QSize iconSize = button->property("iconSize").toSize(); QPixmap pix(iconSize); pix.fill(color); button->setProperty("icon", QIcon(pix)); updateFontButtons(); } }
QString Theme::themeStyleSheet(const QString &name) const { QString css = value(name).toString(); int i = 0; forever { i = css.indexOf("${", i); if (i == -1) break; int j = css.indexOf('}', i + 2); if (j == -1) break; const QString var = css.mid(i + 2, j - i - 2); const QString colorName = serializeColor( evalColor(var, *this) ); css.replace(i, j - i + 1, colorName); i += colorName.size(); } return css; }
float RoundCorners::evalMono(const Corona::IShadeContext& context, Corona::TextureCache* cache, float& outAlpha) { return evalColor(context, cache, outAlpha).grayValue(); }
void Theme::decorateBrowser(QAbstractScrollArea *c) const { decorateScrollArea(c); const QColor bg = color("bg"); QColor unfocusedSelectedBg = color("sel_bg"); unfocusedSelectedBg.setRgb( (bg.red() + unfocusedSelectedBg.red()) / 2, (bg.green() + unfocusedSelectedBg.green()) / 2, (bg.blue() + unfocusedSelectedBg.blue()) / 2 ); Theme unfocusedTheme; for (auto it = m_theme.constBegin(); it != m_theme.constEnd(); ++it) unfocusedTheme.m_theme[it.key()] = Option(it.value().value()); unfocusedTheme.m_theme["sel_bg"].setValue( serializeColor(unfocusedSelectedBg) ); // colors and font c->setStyleSheet( "#ClipboardBrowser,#item,#item_child{" + getFontStyleSheet( value("font").toString() ) + "color:" + themeColorString("fg") + ";" "background:" + themeColorString("bg") + ";" "}" "#ClipboardBrowser::item:alternate{" "color:" + themeColorString("alt_fg") + ";" "background:" + themeColorString("alt_bg") + ";" "}" "#ClipboardBrowser::item:selected,#item[CopyQ_selected=\"true\"],#item[CopyQ_selected=\"true\"] #item_child{" "color:" + themeColorString("sel_fg") + ";" "background:" + themeColorString("sel_bg") + ";" "}" "#item #item_child{background:transparent}" "#item[CopyQ_selected=\"true\"] #item_child{background:transparent}" // Desaturate selected item background if item list is not focused. "#ClipboardBrowser::item:selected:!active{" "background:" + serializeColor( evalColor("sel_bg", unfocusedTheme) ) + ";" + unfocusedTheme.themeStyleSheet("sel_item_css") + "}" // Omit showing current item outline. "#ClipboardBrowser::focus{outline:0}" "#ClipboardBrowser::item:focus{" + themeStyleSheet("cur_item_css") + "}" + getToolTipStyleSheet() + // Allow user to change CSS. "#ClipboardBrowser{" + themeStyleSheet("item_css") + "}" "#ClipboardBrowser::item:alternate{" + themeStyleSheet("alt_item_css") + "}" "#ClipboardBrowser::item:selected{" + themeStyleSheet("sel_item_css") + "}" "#item_child[CopyQ_item_type=\"notes\"] {" + getFontStyleSheet( value("notes_font").toString() ) + "}" ); }
QColor Theme::evalColorExpression(const QString &expr) const { return evalColor( expr, *this ); }
QColor Theme::color(const QString &name) const { return evalColor( value(name).toString(), *this ); }