QPixmap StylePainterMobile::findRadio(const QSize& size, bool checked, bool enabled) const { ASSERT(size.width() == size.height()); QPixmap result; KeyIdentifier id; id.type = KeyIdentifier::Radio; id.height = size.height(); id.trait1 = enabled; id.trait2 = checked; if (!findCachedControl(id, &result)) { result = QPixmap(size); result.fill(Qt::transparent); QPainter cachePainter(&result); drawRadio(&cachePainter, size, checked, enabled); insertIntoCache(id, result); } return result; }
void Style::drawGroupBox(const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const { ASSURE_OPTION(groupBox, GroupBox); OPT_ENABLED // Frame if (groupBox->subControls & QStyle::SC_GroupBoxFrame) { QStyleOptionFrameV2 frame; frame.QStyleOption::operator=(*groupBox); frame.features = groupBox->features; frame.lineWidth = groupBox->lineWidth; frame.midLineWidth = groupBox->midLineWidth; frame.rect = subControlRect(CC_GroupBox, option, SC_GroupBoxFrame, widget); drawGroupBoxFrame(&frame, painter, widget); } // Title if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) { QColor textColor = groupBox->textColor; QPalette::ColorRole role = QPalette::WindowText; // NOTICE, WORKAROUND: groupBox->textColor is black by def. and should be invalid - but it's not // so assuming everything is optimized for a black on white world, we assume the // CUSTOM groupBox->textColor to be only valid if it's != Qt::black // THIS IS A HACK! if (textColor.isValid() && textColor != Qt::black) { if (!isEnabled) textColor.setAlpha(48); painter->setPen(textColor); role = QPalette::NoRole; } setTitleFont(painter, groupBox->text, RECT.width()); QStyleOptionGroupBox copy = *groupBox; copy.fontMetrics = QFontMetrics(painter->font()); QRect textRect = subControlRect(CC_GroupBox, ©, SC_GroupBoxLabel, widget); drawItemText(painter, textRect, BESPIN_MNEMONIC, groupBox->palette, isEnabled, groupBox->text, role); if (groupBox->features & QStyleOptionFrameV2::Flat) { Tile::PosFlags pf = Tile::Center; if (option->direction == Qt::LeftToRight) { textRect.setLeft(RECT.left()); textRect.setRight(textRect.right() + (RECT.right()-textRect.right())/2); pf |= Tile::Right; } else { textRect.setRight(RECT.right()); textRect.setLeft(textRect.left() - (textRect.left() - RECT.left())/2); pf |= Tile::Left; } shadows.line[0][Sunken].render(textRect, painter, pf, true); // const int x = textRect.right(); // textRect.setRight(RECT.right()); textRect.setLeft(x); // shadows.line[0][Sunken].render(textRect, painter, Tile::Center | Tile::Right, true); } else if (config.groupBoxMode) { const int x = textRect.width()/8; textRect.adjust(x,0,-x,0); shadows.line[0][Sunken].render(textRect, painter, Tile::Full, true); } } // Checkbox // TODO: doesn't hover - yet. if (groupBox->subControls & SC_GroupBoxCheckBox) { QStyleOptionButton box; box.QStyleOption::operator=(*groupBox); box.rect = subControlRect(CC_GroupBox, option, SC_GroupBoxCheckBox, widget); // box.state |= State_HasFocus; // focus to signal this to the user if (groupBox->activeSubControls & SC_GroupBoxCheckBox) box.state |= State_MouseOver; drawRadio(&box, painter, 0L); } }