View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0017283 | Scribus | General | public | 2024-10-04 21:31 | 2024-10-23 18:42 |
Reporter | nitramr | Assigned To | nitramr | ||
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Platform | Desktop PC | OS | Ubuntu | OS Version | 24.04 64-bit |
Product Version | 1.7.0.svn | ||||
Target Version | 1.7.0 | Fixed in Version | 1.7.0.svn | ||
Summary | 0017283: Fixes for UI widgets | ||||
Description | The attached patch includes the following fixes and improvements: 1. Switch - Bug fix: toggle animation was strangely interrupted when toggle state changed during the animation 2. FontListModel - Bug fix: Scribus crashes if font.scName is empty 3. IconManager - Improvement: support for non-squared icons/images - Improvement: Non-squared images have an auto aspect ratio scaling if one size is invalid (-1) or not specified 4. ColorListBox - Bug fix: color box border was always black, even on dark UI. Now it uses the window text color 5. FormWidget - Improvement: Support for Icon and Label at the same time - Improvement: Separate position and visibility setting for the icon 6. SectionContainer - Improvement: New configurable header style and size available | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
|
fixes_2024-10-04_01.patch (24,779 bytes)
Index: scribus/ui/widgets/switch.cpp =================================================================== --- scribus/ui/widgets/switch.cpp (Revision 26312) +++ scribus/ui/widgets/switch.cpp (Arbeitskopie) @@ -64,16 +64,14 @@ void Switch::animate(bool toggled) { + m_anim->stop(); + m_anim->setDuration(120); + m_anim->setStartValue(position()); + if (toggled) - { - m_anim->setStartValue(m_margin + m_radius); m_anim->setEndValue(width() - m_radius - m_margin); - } else - { - m_anim->setStartValue(position()); m_anim->setEndValue(m_margin + m_radius); - } - m_anim->setDuration(120); + m_anim->start(); } Index: scribus/fontlistmodel.cpp =================================================================== --- scribus/fontlistmodel.cpp (Revision 26312) +++ scribus/fontlistmodel.cpp (Arbeitskopie) @@ -198,6 +198,8 @@ case FontListModel::FontFile: return font.fontPath(); case FontListModel::SortIndex: + if (font.scName().isEmpty()) + return font.scName(); if (font.scName().at(0) == QChar('.')) return font.scName().mid(1).toLower(); return font.scName().toLower(); Index: scribus/iconmanager.cpp =================================================================== --- scribus/iconmanager.cpp (Revision 26312) +++ scribus/iconmanager.cpp (Arbeitskopie) @@ -81,10 +81,20 @@ return QIcon(loadPixmap(name, width)); } +QIcon IconManager::loadIcon(const QString &name, QSize size) +{ + return QIcon(loadPixmap(name, size)); +} + QPixmap IconManager::loadPixmap(const QString &name, int width) { - QString cName = buildName(name, "icon_", QString::number(width)); + return loadPixmap(name, QSize(width, width)); +} +QPixmap IconManager::loadPixmap(const QString &name, QSize size) +{ + QString cName = buildName(name, "icon_", QString::number(size.width()) + "_" + QString::number(size.height())); + // Use icon from icon cache if (m_pxCache.contains(cName)) return *m_pxCache[cName]; @@ -93,7 +103,7 @@ if (m_lookupTable.contains(name)) { Item item = m_lookupTable[name]; - m_pxCache.insert(cName, pixmapFromFile(item.filePath, item.color, width)); + m_pxCache.insert(cName, pixmapFromFile(item.filePath, item.color, size)); return *m_pxCache[cName]; } @@ -422,7 +432,7 @@ } #endif -QPixmap *IconManager::pixmapFromFile(const QString filePath, QColor color, int width) +QPixmap *IconManager::pixmapFromFile(const QString filePath, QColor color, QSize size) { QDomDocument document; // Load SVG file @@ -433,13 +443,37 @@ QSvgRenderer svgRenderer(document.toByteArray()); - QSize size = (width > -1) ? QSize(width, width) : svgRenderer.defaultSize(); - QPixmap *iconPixmap = new QPixmap(size * m_devicePixelRatio); + double svgWidth = svgRenderer.defaultSize().width(); + double svgHeight = svgRenderer.defaultSize().height(); + double width = (size.width() > 0) ? size.width() : svgWidth; + double height = (size.height() > 0) ? size.height() : svgHeight; + + QSize newSize(QSize(width, height)); + + // invalid width + if (size.width() < 1) + { + double scaleFactor = (svgHeight > height) ? svgHeight / height : height / svgHeight; + newSize.setWidth(svgWidth * scaleFactor); + } + + // invalid height + if (size.height() < 1) + { + double scaleFactor = (svgWidth > width) ? svgWidth / width : width / svgWidth; + newSize.setHeight(svgHeight * scaleFactor); + } + + // something goes wrong and we fallback to original SVG size + if (!newSize.isValid()) + newSize = svgRenderer.defaultSize(); + + QPixmap *iconPixmap = new QPixmap(newSize * m_devicePixelRatio); iconPixmap->setDevicePixelRatio(m_devicePixelRatio); iconPixmap->fill(Qt::transparent); QPainter painter(iconPixmap); - svgRenderer.render(&painter, QRect(QPoint(0, 0), size)); + svgRenderer.render(&painter, QRect(QPoint(0, 0), newSize)); painter.end(); return iconPixmap; @@ -452,8 +486,9 @@ QPixmap *IconManager::pixmapFromPainterPath(QPainterPath path) { - QSize size(path.boundingRect().width(), path.boundingRect().height()); - QPixmap pixmap(size); + QSize size(path.boundingRect().size().toSize()); + QPixmap pixmap(size * m_devicePixelRatio); + pixmap.setDevicePixelRatio(m_devicePixelRatio); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.setRenderHint(QPainter::Antialiasing, true); Index: scribus/iconmanager.h =================================================================== --- scribus/iconmanager.h (Revision 26312) +++ scribus/iconmanager.h (Arbeitskopie) @@ -52,7 +52,9 @@ QCursor loadCursor(const QString& name, int hotX = -1, int hotY = -1, int width = -1); QIcon loadIcon(const QString& name, int width = -1); + QIcon loadIcon(const QString& name, QSize size); QPixmap loadPixmap(const QString& name, int width = -1); + QPixmap loadPixmap(const QString& name, QSize size); void addIconFromPainterPath(const QString & name, QPainterPath path); @@ -100,7 +102,7 @@ bool createLookupTable(); bool readXMLFile(QString filePath, QDomDocument &document, QString fileExtension); - QPixmap *pixmapFromFile(const QString filePath, QColor color, int width = -1); + QPixmap *pixmapFromFile(const QString filePath, QColor color, QSize size); QPixmap *pixmapFromPainterPath(QPainterPath path); QString buildName(const QString &name, const QString &prefix = "", const QString &suffix = "") const; Index: scribus/ui/colorlistbox.cpp =================================================================== --- scribus/ui/colorlistbox.cpp (Revision 26312) +++ scribus/ui/colorlistbox.cpp (Arbeitskopie) @@ -26,6 +26,7 @@ #include "scribusapp.h" #include "scribusdoc.h" #include "util_color.h" +#include "util_gui.h" class SCRIBUS_API ColorSmallItemDelegate : public ScListBoxPixmap<15, 15> { @@ -79,12 +80,8 @@ { ColorPixmapValue item(data.value<ColorPixmapValue>()); QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc); - pPixmap->fill(rgb); QPainter painter(pPixmap); - painter.setBrush(Qt::NoBrush); - QPen b(Qt::black, 1); - painter.setPen(b); - painter.drawRect(0, 0, 15, 15); + drawColorBox(&painter, QRect(0, 0, pPixmap->width(), pPixmap->height()), rgb); painter.end(); } } @@ -97,7 +94,9 @@ { ColorPixmapValue item(data.value<ColorPixmapValue>()); QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc); - pPixmap->fill(rgb); + QPainter painter(pPixmap); + drawColorBox(&painter, QRect(0, 0, pPixmap->width(), pPixmap->height()), rgb); + painter.end(); } } @@ -110,15 +109,10 @@ if (data.canConvert<ColorPixmapValue>()) { - ColorPixmapValue item(data.value<ColorPixmapValue>()); - + ColorPixmapValue item(data.value<ColorPixmapValue>()); QColor rgb = ScColorEngine::getDisplayColor(item.m_color, item.m_doc); - smallPix.fill(rgb); QPainter painter(&smallPix); - painter.setBrush(Qt::NoBrush); - QPen b(Qt::black, 1); - painter.setPen(b); - painter.drawRect(0, 0, 15, 15); + drawColorBox(&painter, QRect(0, 0, smallPix.width(), smallPix.height()), rgb); painter.end(); paintAlert(smallPix, *pPixmap, 0, 0); Index: scribus/ui/widgets/form_widget.cpp =================================================================== --- scribus/ui/widgets/form_widget.cpp (Revision 26312) +++ scribus/ui/widgets/form_widget.cpp (Arbeitskopie) @@ -12,11 +12,9 @@ FormWidget::FormWidget(QWidget *parent) : QWidget(parent) { - QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Minimum); m_font = this->font(); - m_devicePixelRatio = qApp->devicePixelRatio(); - setSizePolicy(policy); + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); calculateFrame(); } @@ -29,8 +27,13 @@ QSize FormWidget::minimumSizeHint() const { - int w = 0, h = 0; - labelSize(w,h); + int l = 0; + int t = 0; + int r = 0; + int b = 0; + int w = 0; + int h = 0; + labelSize(l, t, r, b, w, h); return QSize(w, h).expandedTo(QWidget::minimumSizeHint()); } @@ -43,26 +46,15 @@ void FormWidget::calculateFrame() { + int l = 0; + int t = 0; + int r = 0; + int b = 0; + int w = 0; + int h = 0; + labelSize(l, t, r, b, w, h); + setContentsMargins(l, t, r, b); - int w, h; - labelSize(w,h); - - switch (m_position) - { - case Left: - setContentsMargins(w, 0, 0, 0); - break; - case Right: - setContentsMargins(0, 0, w, 0); - break; - case Top: - setContentsMargins(0, h, 0, 0); - break; - case Bottom: - setContentsMargins(0, 0, 0, h); - break; - } - update(); } @@ -71,7 +63,7 @@ m_shortcutId = 0; m_hasShortcut = false; - if (hasPixmap() || m_label.isEmpty() || m_labelVisibility == false) + if (m_label.isEmpty() || m_labelVisibility == false) return; if (!m_label.contains(QLatin1Char('&'))) @@ -93,7 +85,7 @@ { QWidget::paintEvent(e); - if (!labelVisibility()) return; + if (!labelVisibility() && !iconVisibility()) return; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); @@ -111,67 +103,85 @@ painter.setPen(pen); painter.setFont(tmpFont); - QRect r = rect(); + QRect rLabel = rect(); + QRect rIcon = rect(); QPixmap pix = m_pixmap; + pix.setDevicePixelRatio(devicePixelRatio()); + QRect rWidgets = contentsRect(); - if (hasPixmap() && pix.size() != m_pixmapSize) - pix = pix.scaled(m_pixmapSize * m_devicePixelRatio, Qt::KeepAspectRatio, Qt::SmoothTransformation); + // painter.setBrush(Qt::NoBrush); + // painter.setPen(Qt::magenta); + // painter.drawRect(rect()); + // painter.setPen(Qt::blue); + // painter.drawRect(rWidgets); + if (canUsePixmap() && pix.size() != m_pixmapSize) + pix = pix.scaled(m_pixmapSize * devicePixelRatio(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + if (!isEnabled()) pix = style->generatedIconPixmap(QIcon::Disabled, pix, &opt); + if (canUsePixmap()) + { + rIcon = QRect(0, 0, m_pixmap.deviceIndependentSize().width(), m_pixmap.deviceIndependentSize().height()); + rIcon.moveCenter(rWidgets.center()); - switch (m_position){ - case Left: - if (hasPixmap()) - { - r= QRect (0, (height() - m_pixmap.height()) / 2, m_pixmap.width(), m_pixmap.height()); - style->drawItemPixmap(&painter, r, align, pix); - + switch (m_iconPosition){ + default: + case Left: + rIcon.moveLeft(0); + rLabel = rLabel.adjusted(rIcon.width() + m_space, 0, 0, 0); + break; + case Right: + rIcon.moveRight(width()); + rLabel = rLabel.adjusted(0, 0, -rIcon.width() - m_space, 0); + break; + case Top: + rIcon.moveTop(0); + rLabel = rLabel.adjusted(0, rIcon.height() + m_space, 0, 0); + break; + case Bottom: + rIcon.moveBottom(height()); + rLabel = rLabel.adjusted(0, 0, 0, -rIcon.height() - m_space); + break; } - else - style->drawItemText(&painter, r, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); - break; - case Right: - if (hasPixmap()) - { - r= QRect (width() - m_pixmap.width(), (height() - m_pixmap.height()) / 2, m_pixmap.width(), m_pixmap.height()); - style->drawItemPixmap(&painter, r, align, pix); - } - else - style->drawItemText(&painter, r, Qt::AlignRight | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + style->drawItemPixmap(&painter, rIcon, align, pix); - break; - case Top: - if (hasPixmap()) - { - r= QRect ((width() - m_pixmap.width()) / 2, 0, m_pixmap.width(), m_pixmap.height()); - style->drawItemPixmap(&painter, r, align, pix); - } - else - style->drawItemText(&painter, r, Qt::AlignHCenter | Qt::AlignTop | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + // painter.setBrush(Qt::NoBrush); + // painter.setPen(Qt::red); + // painter.drawRect(rIcon); + } - break; - case Bottom: - if (hasPixmap()) - { - r= QRect ((width() - m_pixmap.width()) / 2, height() - m_pixmap.height(), m_pixmap.width(), m_pixmap.height()); - style->drawItemPixmap(&painter, r, align, pix); + if (canUseLabel()) + { + switch (m_position){ + case Left: + style->drawItemText(&painter, rLabel, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + break; + case Right: + style->drawItemText(&painter, rLabel, Qt::AlignRight | Qt::AlignVCenter | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + break; + case Top: + style->drawItemText(&painter, rLabel, Qt::AlignHCenter | Qt::AlignTop | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + break; + case Bottom: + style->drawItemText(&painter, rLabel, Qt::AlignHCenter | Qt::AlignBottom | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); + break; } - else - style->drawItemText(&painter, r, Qt::AlignHCenter | Qt::AlignBottom | Qt::TextShowMnemonic, opt.palette, isEnabled(), m_label, foregroundRole()); - break; + // painter.setBrush(Qt::NoBrush); + // painter.setPen(Qt::green); + // painter.drawRect(rLabel); } } bool FormWidget::event(QEvent *e) -{ - QEvent::Type type = e->type(); +{ #ifndef EXCLUDE_FOR_DESIGNER_PLUGIN + QEvent::Type type = e->type(); if (type == QEvent::Shortcut && this->layout()->count() > 0) { QShortcutEvent *se = static_cast<QShortcutEvent *>(e); if (se->shortcutId() == m_shortcutId) { @@ -243,53 +253,89 @@ * ********************************************************************************* */ -void FormWidget::labelSize(int &w, int &h) const +void FormWidget::labelSize(int &l, int &t, int &r, int &b, int &w, int &h) const { + l = 0; + t = 0; + r = 0; + b = 0; w = 0; h = 0; - if (hasPixmap()) + if (canUsePixmap()) { - w = m_pixmapSize.width() * m_devicePixelRatio + m_space; - h = m_pixmapSize.height() * m_devicePixelRatio + m_space; - } - else - { + int iconWidth = m_pixmapSize.width() + m_space; + int iconHeight = m_pixmapSize.height() + m_space; - if ((m_label.isEmpty() && m_preserveLabelSpace == false) || m_labelVisibility == false) + w += iconWidth; + h += iconHeight; + + switch (m_iconPosition) { - w = 0; - h = 0; + case Left: + l += iconWidth; + break; + case Right: + r += iconWidth; + break; + case Top: + t += iconHeight; + break; + case Bottom: + b += iconHeight; + break; } - else - { - QFont tmpFont(m_font); - if (m_useSmallFont) - tmpFont.setPointSize(smallFontSize()); - QFontMetrics metrics(tmpFont); - QString label = m_label; + } - // calculate width without hidden "&" - if (m_hasShortcut) + if (canUseLabel()) + { + QFont tmpFont(m_font); + if (m_useSmallFont) + tmpFont.setPointSize(smallFontSize()); + + QFontMetrics metrics(tmpFont); + QString label = m_label; + + // calculate width without hidden "&" + if (m_hasShortcut) + { + int pos = 0; + while ( pos < m_label.size()) { - int pos = 0; - while ( pos < m_label.size()) - { - int index = label.indexOf(QLatin1String("&"), pos); + int index = label.indexOf(QLatin1String("&"), pos); - if (pos == index) - label = label.replace(index, 1, ""); + if (pos == index) + label = label.replace(index, 1, ""); - pos++; - } + pos++; } + } - w = metrics.horizontalAdvance(label) + metrics.horizontalAdvance(QLatin1Char(' ')) + m_space; - h = metrics.height() + m_space; + int labelWidth = metrics.horizontalAdvance(label) + metrics.horizontalAdvance(QLatin1Char(' ')) + m_space; + int labelHeight = metrics.height() + m_space; + w += labelWidth; + h += labelHeight; + + switch (m_position) + { + case Left: + l += labelWidth; + break; + case Right: + r += labelWidth; + break; + case Top: + t += labelHeight; + break; + case Bottom: + b += labelHeight; + break; } + } + } int FormWidget::smallFontSize() const @@ -338,6 +384,12 @@ calculateFrame(); } +void FormWidget::setIconDirection(LabelPosition direction) +{ + m_iconPosition = direction; + calculateFrame(); +} + void FormWidget::setFont(QFont font) { m_font = font; @@ -359,7 +411,6 @@ void FormWidget::setPixmap(QPixmap icon) { m_pixmap = icon; - updateShortcut(); calculateFrame(); } @@ -370,6 +421,12 @@ calculateFrame(); } +void FormWidget::setIconVisibility(bool visible) +{ + m_iconVisibility = visible; + calculateFrame(); +} + void FormWidget::addWidget(QWidget* widget) { if (layout() != nullptr) Index: scribus/ui/widgets/form_widget.h =================================================================== --- scribus/ui/widgets/form_widget.h (Revision 26312) +++ scribus/ui/widgets/form_widget.h (Arbeitskopie) @@ -15,17 +15,19 @@ class FormWidget : public QWidget { Q_OBJECT - Q_CLASSINFO("Version", "1.1.0") + Q_CLASSINFO("Version", "1.2.0") Q_PROPERTY(QString label READ text WRITE setText) Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) Q_PROPERTY(QSize pixmapSize READ pixmapSize WRITE setPixmapSize) Q_PROPERTY(LabelPosition direction READ direction WRITE setDirection) + Q_PROPERTY(LabelPosition iconDirection READ iconDirection WRITE setIconDirection) Q_PROPERTY(QFont font READ font WRITE setFont STORED true) Q_PROPERTY(bool useSmallFont READ useSmallFont WRITE setUseSmallFont) Q_PROPERTY(int space READ space WRITE setSpace) Q_PROPERTY(bool preserveLabelSpace READ preserveLabelSpace WRITE setPreserveLabelSpace) Q_PROPERTY(bool labelVisibility READ labelVisibility WRITE setLabelVisibility) + Q_PROPERTY(bool iconVisibility READ iconVisibility WRITE setIconVisibility) public: @@ -43,6 +45,9 @@ void setLabelVisibility(bool visible); bool labelVisibility() { return m_labelVisibility; }; + void setIconVisibility(bool visible); + bool iconVisibility() const { return m_iconVisibility; }; + void setPreserveLabelSpace(bool preserveSpace); bool preserveLabelSpace() { return m_preserveLabelSpace; }; @@ -49,6 +54,9 @@ void setDirection(FormWidget::LabelPosition direction); FormWidget::LabelPosition direction() { return m_position; }; + void setIconDirection(FormWidget::LabelPosition direction); + FormWidget::LabelPosition iconDirection() { return m_iconPosition; }; + void setFont(QFont font); QFont font() { return m_font; }; @@ -66,7 +74,8 @@ void setPixmapSize(QSize size); QSize pixmapSize() { return m_pixmapSize; }; - bool hasPixmap() const { return !m_pixmap.isNull(); }; + bool canUsePixmap() const { return (!m_pixmap.isNull() && m_iconVisibility); }; + bool canUseLabel() const { return (!m_label.isEmpty() && m_labelVisibility) || (m_preserveLabelSpace && m_labelVisibility); }; void addWidget(QWidget* widget); @@ -76,21 +85,22 @@ private: LabelPosition m_position {LabelPosition::Bottom}; + LabelPosition m_iconPosition {LabelPosition::Left}; int m_space {4}; QSize m_pixmapSize {QSize(16,16)}; QString m_label {"Label"}; QFont m_font; QPixmap m_pixmap {QPixmap()}; + bool m_iconVisibility {true}; bool m_preserveLabelSpace {false}; bool m_labelVisibility {true}; bool m_hasShortcut {false}; int m_shortcutId {0}; - qreal m_devicePixelRatio {1.0}; bool m_useSmallFont {true}; void calculateFrame(); void updateShortcut(); - void labelSize(int &w, int &h) const; + void labelSize(int &l, int &t, int &r, int &b, int &w, int &h) const; }; Index: scribus/ui/widgets/section_container.cpp =================================================================== --- scribus/ui/widgets/section_container.cpp (Revision 26312) +++ scribus/ui/widgets/section_container.cpp (Arbeitskopie) @@ -109,6 +109,57 @@ return m_hasStyle; } +void SectionContainer::setHeaderType(SectionContainerHeader::HeaderType type) +{ + header->m_headerType = type; + + QFont fnt = font(); + + if (type == SectionContainerHeader::Header) + fnt.setBold(true); + + header->labelTitle->setFont(fnt); + + update(); +} + +SectionContainerHeader::HeaderType SectionContainer::headerType() const +{ + return header->m_headerType; +} + +void SectionContainer::setHeaderSize(SectionContainerHeader::HeaderSize size) +{ + int pt = 4; + int pb = 4; + + switch (size) + { + case SectionContainerHeader::Large: + pt = 8; + pb = 4; + + break; + case SectionContainerHeader::Condensed: + pt = 2; + pb = 2; + break; + default: + case SectionContainerHeader::Normal: + break; + } + + header->m_headerSize = size; + header->layoutHeader->setContentsMargins(4, pt, 4, pb); + header->setFixedHeight(header->buttonCollapse->height() + pt + pb); + +} + +SectionContainerHeader::HeaderSize SectionContainer::headerSize() const +{ + return header->m_headerSize; +} + void SectionContainer::setCanSaveState(bool saveState) { m_canSaveState = saveState; @@ -375,13 +426,13 @@ return; int lineWidth = 1; - QColor bottomLineColor(palette().color(QPalette::Dark)); + QColor bottomLineColor(palette().color(QPalette::Mid)); QPainter painter(this); // Bottom Line painter.setPen(QPen(bottomLineColor, lineWidth)); - painter.drawLine(8, this->height() - lineWidth, this->width() - 8, + painter.drawLine(0, this->height() - lineWidth, this->width(), this->height() - lineWidth); } @@ -439,7 +490,6 @@ SectionContainerHeader::SectionContainerHeader(QString title, QWidget *parent) : QWidget(parent) { int padding = 6; - m_hasStyle = true; layoutHeader = new QHBoxLayout; layoutHeaderPrefix = new QHBoxLayout; @@ -493,39 +543,41 @@ { Q_UNUSED(event) - if (!m_hasStyle) - return; - int lineWidth = 1; - // QColor topLineColor( palette().color(QPalette::Mid) ); - QColor bottomLineColor(palette().color(QPalette::Dark)); + int headerHeight = this->height(); + QColor bottomLineColor(palette().color(QPalette::Mid)); + QRect headerRect(0, 0, this->width(), headerHeight - lineWidth); + QPainter painter(this); + painter.setPen(Qt::NoPen); + + if (m_hasStyle) + { + #ifndef EXCLUDE_FOR_DESIGNER_PLUGIN - QColor bgColor = colorByRole(QPalette::WindowText, 0.07, isEnabled()); + QColor bgColor = colorByRole(QPalette::WindowText, 0.16, isEnabled()); + + if (m_headerType == SectionContainerHeader::Subheader) + bgColor = colorByRole(QPalette::WindowText, 0.08, isEnabled()); #else - QColor bgColor(palette().color(QPalette::WindowText)); - bgColor.setAlphaF(0.07f); + QColor bgColor(palette().color(QPalette::WindowText)); + bgColor.setAlphaF(0.16f); + + if (m_headerType == SectionContainerHeader::Subheader) + bgColor.setAlphaF(0.08f); #endif - int headerHeight = this->height(); - QRect headerRect(0, 0, this->width(), headerHeight - lineWidth); + painter.setBrush(bgColor); + painter.drawRect(headerRect); + } - QPainter painter(this); - - painter.setPen(Qt::NoPen); - painter.setBrush(bgColor); - painter.drawRect(headerRect); - painter.setBrush(Qt::NoBrush); - // Top Line - // painter.setPen( QPen(topLineColor, lineWidth) ); - // painter.drawLine( 0, 0,this->width(), 0 ); - // Bottom Line painter.setPen(QPen(bottomLineColor, lineWidth)); painter.drawLine(0, headerHeight - lineWidth, this->width(), headerHeight - lineWidth); + painter.end(); } void SectionContainerHeader::mousePressEvent(QMouseEvent *mouseEvent) Index: scribus/ui/widgets/section_container.h =================================================================== --- scribus/ui/widgets/section_container.h (Revision 26312) +++ scribus/ui/widgets/section_container.h (Arbeitskopie) @@ -23,6 +23,20 @@ friend class SectionContainer; public: + + enum HeaderType { + Header = 1, + Subheader = 2 + }; + Q_ENUM(HeaderType) + + enum HeaderSize { + Normal = 0, + Large = 1, + Condensed = 2 + }; + Q_ENUM(HeaderSize) + SectionContainerHeader(QWidget *parent = nullptr); SectionContainerHeader(QString title, QWidget *parent = nullptr); @@ -35,6 +49,8 @@ QLabel* labelTitle { nullptr }; + HeaderType m_headerType = {HeaderType::Subheader}; + HeaderSize m_headerSize = {HeaderSize::Normal}; bool m_hasStyle { true }; protected: @@ -55,12 +71,13 @@ class SectionContainer : public QWidget { Q_OBJECT - Q_CLASSINFO("Version", "1.0.0") + Q_CLASSINFO("Version", "1.1.0") Q_PROPERTY(QString title READ text WRITE setText) Q_PROPERTY(bool isCollapsible READ isCollapsible WRITE setIsCollapsible) Q_PROPERTY(bool isCollapsed READ isCollapsed WRITE setIsCollapsed) Q_PROPERTY(bool hasStyle READ hasStyle WRITE setHasStyle) + Q_PROPERTY(SectionContainerHeader::HeaderType headerType READ headerType WRITE setHeaderType) public: @@ -76,6 +93,12 @@ void setHasStyle(bool hasStyle); bool hasStyle() const; + void setHeaderType(SectionContainerHeader::HeaderType type); + SectionContainerHeader::HeaderType headerType() const; + + void setHeaderSize(SectionContainerHeader::HeaderSize size); + SectionContainerHeader::HeaderSize headerSize() const; + void setCanSaveState(bool saveState); bool canSaveState(); |
Date Modified | Username | Field | Change |
---|---|---|---|
2024-10-04 21:31 | nitramr | New Issue | |
2024-10-04 21:31 | nitramr | File Added: fixes_2024-10-04_01.patch | |
2024-10-07 05:25 | cbradney | Assigned To | => nitramr |
2024-10-07 05:25 | cbradney | Status | new => resolved |
2024-10-07 05:25 | cbradney | Resolution | open => fixed |
2024-10-07 05:25 | cbradney | Fixed in Version | => 1.7.0.svn |
2024-10-23 18:42 | cbradney | Status | resolved => closed |