void UIGDetailsElement::paintBackground(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption) { /* Save painter: */ pPainter->save(); /* Prepare variables: */ int iMargin = data(ElementData_Margin).toInt(); int iHeaderHeight = 2 * iMargin + m_iMinimumHeaderHeight; QRect optionRect = pOption->rect; QRect fullRect = !m_fAnimationRunning ? optionRect : QRect(optionRect.topLeft(), QSize(optionRect.width(), iHeaderHeight + m_iAdditionalHeight)); int iFullHeight = fullRect.height(); /* Prepare color: */ QPalette pal = palette(); QColor headerColor = pal.color(QPalette::Active, QPalette::Button); QColor strokeColor = pal.color(QPalette::Active, QPalette::Mid); QColor bodyColor = pal.color(QPalette::Active, QPalette::Base); /* Add clipping: */ QPainterPath path; path.moveTo(m_iCornerRadius, 0); path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-m_iCornerRadius, 0), 90, 90); path.lineTo(path.currentPosition().x(), iFullHeight - m_iCornerRadius); path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(0, -m_iCornerRadius), 180, 90); path.lineTo(fullRect.width() - m_iCornerRadius, path.currentPosition().y()); path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-m_iCornerRadius, -2 * m_iCornerRadius), 270, 90); path.lineTo(path.currentPosition().x(), m_iCornerRadius); path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-2 * m_iCornerRadius, -m_iCornerRadius), 0, 90); path.closeSubpath(); pPainter->setClipPath(path); /* Calculate top rectangle: */ QRect tRect = fullRect; tRect.setBottom(tRect.top() + iHeaderHeight); /* Calculate bottom rectangle: */ QRect bRect = fullRect; bRect.setTop(tRect.bottom()); /* Prepare top gradient: */ QLinearGradient tGradient(tRect.bottomLeft(), tRect.topLeft()); tGradient.setColorAt(0, headerColor.darker(110)); tGradient.setColorAt(1, headerColor.darker(animationDarkness())); /* Paint all the stuff: */ pPainter->fillRect(tRect, tGradient); pPainter->fillRect(bRect, bodyColor); /* Stroke path: */ pPainter->setClipping(false); pPainter->strokePath(path, strokeColor); /* Restore painter: */ pPainter->restore(); }
void UIGChooserItemMachine::paintBackground(QPainter *pPainter, const QRect &rect) { /* Save painter: */ pPainter->save(); /* Prepare color: */ QPalette pal = palette(); /* Selection background: */ if (model()->selectionList().contains(this)) { /* Highlight color: */ QColor highlight = pal.color(QPalette::Highlight); /* Calculate top rectangle: */ QRect tRect = rect; tRect.setBottom(tRect.top() + tRect.height() / 3); /* Calculate bottom rectangle: */ QRect bRect = rect; bRect.setTop(bRect.bottom() - bRect.height() / 3); /* Calculate middle rectangle: */ QRect midRect = QRect(tRect.bottomLeft(), bRect.topRight()); /* Prepare top gradient: */ QLinearGradient tGradient(tRect.bottomLeft(), tRect.topLeft()); tGradient.setColorAt(1, highlight.darker(blackoutDarkness())); tGradient.setColorAt(0, highlight.darker(defaultDarkness())); /* Prepare bottom gradient: */ QLinearGradient bGradient(bRect.topLeft(), bRect.bottomLeft()); bGradient.setColorAt(0, highlight.darker(defaultDarkness())); bGradient.setColorAt(1, highlight.darker(blackoutDarkness())); /* Paint all the stuff: */ pPainter->fillRect(midRect, highlight.darker(defaultDarkness())); pPainter->fillRect(tRect, tGradient); pPainter->fillRect(bRect, bGradient); } /* Hovering background: */ if (isHovered()) { /* Choose color: */ QColor baseLight = model()->selectionList().contains(this) ? pal.color(QPalette::Active, QPalette::Highlight) : QColor(Qt::white); QColor blurBase = model()->selectionList().contains(this) ? pal.color(QPalette::Active, QPalette::Highlight) : QColor(Qt::white); if (!model()->selectionList().contains(this) && !parentItem()->isRoot()) blurBase = blurBase.darker(defaultDarkness()); blurBase.setAlpha(0); /* Draw background for blur: */ QImage background(rect.size(), QImage::Format_ARGB32); background.fill(blurBase.rgba()); /* Add blur itself: */ QPainter blurPainter(&background); blurPainter.setBrush(baseLight.darker(animationDarkness())); blurPainter.setPen(Qt::NoPen); blurPainter.drawRoundedRect(rect.adjusted(5, 5, -5, -5), 5, 5); blurPainter.end(); QImage bluredBackground(rect.size(), QImage::Format_ARGB32); blurImage(background, bluredBackground, 5); /* Paint highlight bar: */ pPainter->drawImage(QPoint(0, 0), bluredBackground); } /* Paint drag token UP? */ if (dragTokenPlace() != DragToken_Off) { /* Window color: */ QColor base = pal.color(QPalette::Active, model()->selectionList().contains(this) ? QPalette::Highlight : QPalette::Window); QLinearGradient dragTokenGradient; QRect dragTokenRect = rect; if (dragTokenPlace() == DragToken_Up) { dragTokenRect.setHeight(5); dragTokenGradient.setStart(dragTokenRect.bottomLeft()); dragTokenGradient.setFinalStop(dragTokenRect.topLeft()); } else if (dragTokenPlace() == DragToken_Down) { dragTokenRect.setTopLeft(dragTokenRect.bottomLeft() - QPoint(0, 5)); dragTokenGradient.setStart(dragTokenRect.topLeft()); dragTokenGradient.setFinalStop(dragTokenRect.bottomLeft()); } dragTokenGradient.setColorAt(0, base.darker(blackoutDarkness())); dragTokenGradient.setColorAt(1, base.darker(dragTokenDarkness())); pPainter->fillRect(dragTokenRect, dragTokenGradient); } /* Restore painter: */ pPainter->restore(); }