From: Jens Bache-Wiig Date: Fri, 2 Nov 2012 12:28:57 +0000 (+0100) Subject: Fix font and positioning of headerview labels on mac X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d497846f0a44e796b347c5c7bb355237d1a409d;p=profile%2Fivi%2Fqtbase.git Fix font and positioning of headerview labels on mac The old code rendered text too large. On desktop components, the widget workaround ensured that text was clipped. This should address both problems. Since we anyway do not adapt the height to font size, I dont se a point in supporting custom fonts here. Change-Id: If3c0509cdff4dbadfd98bd4b1934eaa665148cbf Reviewed-by: Jens Bache-Wiig Reviewed-by: Richard Moe Gustavsen --- diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 83895b6..04fdb99 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -3451,6 +3451,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter break; case CE_HeaderLabel: if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + p->save(); QRect textr = header->rect; if (!header->icon.isNull()) { QIcon::Mode mode = QIcon::Disabled; @@ -3464,8 +3465,10 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter textr.translate(pixmap.width() + 2, 0); } + p->setFont(qt_app_fonts_hash()->value("QSmallFont", QFont())); proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, header->state & State_Enabled, header->text, QPalette::ButtonText); + p->restore(); } break; case CE_ToolButtonLabel: @@ -4558,17 +4561,22 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt, rect = qt_qrectForHIRect(contentRect); } break; - case SE_HeaderLabel: - if (qstyleoption_cast(opt)) { - rect = QCommonStyle::subElementRect(sr, opt, widget); - if (widget && widget->height() <= 22){ - // We need to allow the text a bit more space when the header is - // small, otherwise it gets clipped: - rect.setY(0); - rect.setHeight(widget->height()); + case SE_HeaderLabel: { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); + rect.setRect(opt->rect.x() + margin, opt->rect.y(), + opt->rect.width() - margin * 2, opt->rect.height() - 2); + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // Subtract width needed for arrow, if there is one + if (header->sortIndicator != QStyleOptionHeader::None) { + if (opt->state & State_Horizontal) + rect.setWidth(rect.width() - (opt->rect.height() / 2) - (margin * 2)); + else + rect.setHeight(rect.height() - (opt->rect.width() / 2) - (margin * 2)); } } + rect = visualRect(opt->direction, opt->rect, rect); break; + } case SE_ProgressBarGroove: case SE_ProgressBarLabel: break;