#include "ElaText.h" #include #include #include "ElaTheme.h" #include "private/ElaTextPrivate.h" ElaText::ElaText(QWidget* parent) : QLabel(parent), d_ptr(new ElaTextPrivate()) { Q_D(ElaText); d->q_ptr = this; d->_pTextStyle = ElaTextType::NoStyle; d->_pElaIcon = ElaIconType::None; setObjectName("ElaText"); setStyleSheet("#ElaText{background-color:transparent;}"); QFont textFont = font(); textFont.setLetterSpacing(QFont::AbsoluteSpacing, d->_textSpacing); textFont.setPixelSize(28); setFont(textFont); setWordWrap(true); d->_themeMode = eTheme->getThemeMode(); d->onThemeChanged(eTheme->getThemeMode()); connect(eTheme, &ElaTheme::themeModeChanged, d, &ElaTextPrivate::onThemeChanged); } ElaText::ElaText(QString text, QWidget* parent) : ElaText(parent) { setText(text); } ElaText::ElaText(QString text, int pixelSize, QWidget* parent) : ElaText(text, parent) { QFont font = this->font(); font.setPixelSize(pixelSize); setFont(font); } ElaText::~ElaText() { } void ElaText::setIsWrapAnywhere(bool isWrapAnywhere) { Q_D(ElaText); setWordWrap(isWrapAnywhere); d->_isWrapAnywhere = isWrapAnywhere; } bool ElaText::getIsWrapAnywhere() const { Q_D(const ElaText); return d->_isWrapAnywhere; } void ElaText::setTextPixelSize(int size) { QFont font = this->font(); font.setPixelSize(size); setFont(font); } int ElaText::getTextPixelSize() const { return this->font().pixelSize(); } void ElaText::setTextPointSize(int size) { QFont font = this->font(); font.setPointSize(size); setFont(font); } int ElaText::getTextPointSize() const { return this->font().pointSize(); } void ElaText::setTextStyle(ElaTextType::TextStyle textStyle) { Q_D(ElaText); QFont textFont = font(); d->_pTextStyle = textStyle; switch (textStyle) { case ElaTextType::NoStyle: { break; } case ElaTextType::Caption: { textFont.setPixelSize(12); break; } case ElaTextType::Body: { textFont.setPixelSize(13); break; } case ElaTextType::BodyStrong: { textFont.setPixelSize(13); textFont.setWeight(QFont::DemiBold); break; } case ElaTextType::Subtitle: { textFont.setPixelSize(20); textFont.setWeight(QFont::DemiBold); break; } case ElaTextType::Title: { textFont.setPixelSize(28); textFont.setWeight(QFont::DemiBold); break; } case ElaTextType::TitleLarge: { textFont.setPixelSize(40); textFont.setWeight(QFont::DemiBold); break; } case ElaTextType::Display: { textFont.setPixelSize(48); textFont.setWeight(QFont::DemiBold); break; } } setFont(textFont); } ElaTextType::TextStyle ElaText::getTextStyle() const { Q_D(const ElaText); return d->_pTextStyle; } void ElaText::setElaIcon(ElaIconType::IconName elaIcon) { Q_D(ElaText); d->_pElaIcon = elaIcon; update(); Q_EMIT pElaIconChanged(); } ElaIconType::IconName ElaText::getElaIcon() const { Q_D(const ElaText); return d->_pElaIcon; } void ElaText::paintEvent(QPaintEvent* event) { Q_D(ElaText); if (palette().color(QPalette::WindowText) != ElaThemeColor(d->_themeMode, BasicText)) { d->onThemeChanged(d->_themeMode); } if (d->_pElaIcon != ElaIconType::None) { QPainter painter(this); painter.save(); painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing | QPainter::TextAntialiasing); QFont iconFont = QFont("ElaAwesome"); iconFont.setPixelSize(this->font().pixelSize()); painter.setFont(iconFont); painter.setPen(ElaThemeColor(d->_themeMode, BasicText)); painter.drawText(rect(), Qt::AlignCenter, QChar((unsigned short)d->_pElaIcon)); painter.restore(); } else { if (wordWrap() && d->_isWrapAnywhere) { QPainter painter(this); painter.save(); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); painter.setPen(ElaThemeColor(d->_themeMode, BasicText)); painter.drawText(rect(), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextWordWrap | Qt::TextWrapAnywhere, text()); painter.restore(); } else { QLabel::paintEvent(event); } } }