virtual void Render(StyledWindow *window) const { wxAutoBufferedPaintDC deviceContext(window); auto g = std::unique_ptr<wxGraphicsContext>(wxGraphicsContext::Create(deviceContext)); ClearBackground(window, g.get()); DrawCheckbox(window, g.get()); DrawText(window, g.get()); }
void MailTreeDelegate::paint (QPainter *painter, const QStyleOptionViewItem& stockItem, const QModelIndex& index) const { const bool isEnabled = index.flags () & Qt::ItemIsEnabled; QStyleOptionViewItemV4 option { stockItem }; if (!isEnabled) option.font.setStrikeOut (true); const auto style = GetStyle (option); painter->save (); style->drawPrimitive (QStyle::PE_PanelItemViewItem, &option, painter, option.widget); if (option.state & QStyle::State_Selected) painter->setPen (option.palette.color (QPalette::HighlightedText)); if (Mode_ == MailListMode::MultiSelect) DrawCheckbox (painter, style, option, index); const auto& subject = GetString (index, MailModel::Column::Subject); const auto& subjFontInfo = GetSubjectFont (index, option); const auto subjHeight = subjFontInfo.second.boundingRect (subject).height (); auto y = option.rect.top () + subjHeight; const auto actionsWidth = GetActionsBarWidth (index, option, subjHeight); painter->setFont (subjFontInfo.first); painter->drawText (option.rect.left (), y, subjFontInfo.second.elidedText (subject, Qt::ElideRight, option.rect.width () - actionsWidth)); const QFontMetrics fontFM { option.font }; auto stringHeight = [&fontFM] (const QString& str) { return fontFM.boundingRect (str).height (); }; auto from = GetString (index, MailModel::Column::From); if (const auto childrenCount = index.data (MailModel::MailRole::TotalChildrenCount).toInt ()) { from += " ("; if (const auto unread = index.data (MailModel::MailRole::UnreadChildrenCount).toInt ()) from += QString::number (unread) + "/"; from += QString::number (childrenCount) + ")"; } const auto& date = GetString (index, MailModel::Column::Date); y += std::max ({ stringHeight (from), stringHeight (date) }); painter->setFont (option.font); const auto dateWidth = fontFM.boundingRect (date).width (); painter->drawText (option.rect.right () - dateWidth, y, date); painter->drawText (option.rect.left (), y, fontFM.elidedText (from, Qt::ElideRight, option.rect.width () - dateWidth - 5 * Padding)); painter->restore (); }
void JXTextMenuTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& origRect ) { JRect rect = AdjustRectForSeparator(cell.y, origRect); if (cell.x == kCheckboxColumnIndex) { rect.left += kHilightBorderWidth; DrawCheckbox(p, cell.y, rect); } else if (cell.x == kImageColumnIndex) { const JXImage* image; if (itsTextMenuData->GetImage(cell.y, &image)) { p.Image(*image, image->GetBounds(), rect); } } else if (cell.x == kTextColumnIndex) { JIndex ulIndex; JFontID id; JSize size; JFontStyle style; const JString& text = itsTextMenuData->GetText(cell.y, &ulIndex, &id, &size, &style); if (!itsTextMenuData->IsEnabled(cell.y)) { style.color = (GetColormap())->GetInactiveLabelColor(); } p.SetFont(id, size, style); rect.left += kHMarginWidth; JXWindowPainter* xp = dynamic_cast<JXWindowPainter*>(&p); assert( xp != NULL ); xp->String(rect.left, rect.top, text, ulIndex, rect.width(), JPainter::kHAlignLeft, rect.height(), JPainter::kVAlignCenter); } else if (cell.x == kSubmenuColumnIndex && itsTextMenuData->HasSubmenu(cell.y)) { rect.right -= kHilightBorderWidth; rect.left = rect.right - JXMenuTable::kSubmenuColWidth; DrawSubmenuIndicator(p, cell.y, rect, JConvertToBoolean(((JIndex) cell.y) == itsHilightRow)); } else if (cell.x == kSubmenuColumnIndex) { const JString* nmShortcut; JFontID id; JSize size; JFontStyle style; if (itsTextMenuData->GetNMShortcut(cell.y, &nmShortcut, &id, &size, &style)) { if (!itsTextMenuData->IsEnabled(cell.y)) { style.color = (GetColormap())->GetInactiveLabelColor(); } p.SetFont(id, size, style); rect.left += kHNMSMarginWidth; rect.right -= kHilightBorderWidth; p.String(rect, *nmShortcut, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } } }