diff -r 730c025d4b77 -r f378acbc9cfb src/hbcore/image/hbbadgeicon.cpp --- a/src/hbcore/image/hbbadgeicon.cpp Thu Jul 15 14:03:49 2010 +0100 +++ b/src/hbcore/image/hbbadgeicon.cpp Thu Jul 22 16:36:53 2010 +0100 @@ -23,9 +23,9 @@ ** ****************************************************************************/ +#include "hbbadgeicon_p.h" #include "hbicon.h" #include "hbbadgeiconinfo_p.h" -#include "hbbadgeicon_p.h" #include /*! @@ -73,18 +73,19 @@ */ void HbBadgeIcon::addBadge(Qt::Alignment alignment, const HbIcon &icon, - int zValue) + int zValue, + const QSizeF &sizeFactor, + Qt::AspectRatioMode aspectRatio) { - HbBadgeIconInfo info(icon, alignment, zValue); - int size = mBadgeIcons.size(); - if (size == 0) { + HbBadgeIconInfo info(icon, alignment, zValue, sizeFactor, aspectRatio); + int badgeCount = mBadgeIcons.count(); + if (badgeCount == 0) { mBadgeIcons.append(info); - } - else { + } else { bool added = false; //Find a spot to insert the badgeinfo in the list. - for (int i = size - 1; i >= 0; i--){ - if (mBadgeIcons[i].zValue() > zValue){ + for (int i = badgeCount - 1; i >= 0; i--) { + if (mBadgeIcons[i].zValue() > zValue) { mBadgeIcons.insert(i + 1, info); added = true; break; @@ -147,7 +148,7 @@ Paint all badges in z-order. */ void HbBadgeIcon::paint(QPainter *painter, - const QRectF& rect, + const QRectF &rect, QIcon::Mode mode, QIcon::State state, bool mirror) @@ -155,12 +156,12 @@ int count = mBadgeIcons.count(); for (int i = count - 1; i >= 0; i--) { - HbBadgeIconInfo aIcon = mBadgeIcons[i]; - Qt::Alignment align = aIcon.alignment(); + HbBadgeIconInfo badge = mBadgeIcons.at(i); + // Fix the alignment. + Qt::Alignment align = badge.alignment(); Qt::Alignment absAlign = align; if (mirror) { absAlign = align & ~(Qt::AlignRight | Qt::AlignLeft); - if (align & Qt::AlignLeft) { absAlign |= Qt::AlignRight; } @@ -168,30 +169,44 @@ absAlign |= Qt::AlignLeft; } } - // ... and then draw at the specified location. - aIcon.icon().paint(painter, - rect, - Qt::KeepAspectRatio, - absAlign, - mode, - state); + // Update the size. + QSizeF sizeFactor = badge.sizeFactor(); + if (!sizeFactor.isNull()) { + QSizeF targetSizeF(sizeFactor.width() * rect.width(), sizeFactor.height() * rect.height()); + QSize targetSize = targetSizeF.toSize(); + HbIcon icon = badge.icon(); + if (targetSize != icon.size().toSize()) { + icon.setSize(targetSize); + badge.setIcon(icon); + mBadgeIcons[i] = badge; + } + } + // And finally draw the badge. + badge.icon().paint(painter, + rect, + badge.aspectRatio(), + absAlign, + mode, + state); } } /*! \internal */ -void HbBadgeIcon::externalize(QDataStream& stream) +void HbBadgeIcon::externalize(QDataStream &stream) { - int size = mBadgeIcons.size(); + int count = mBadgeIcons.count(); // Write out how many badges we'll save first - stream << size; + stream << count; // And write each item - for (int i = 0; i < size; i++) { - HbBadgeIconInfo aIcon = mBadgeIcons[i]; - stream << aIcon.icon(); - stream << (qint32)(aIcon.alignment()); - stream << aIcon.zValue(); + for (int i = 0; i < count; i++) { + const HbBadgeIconInfo &badge(mBadgeIcons.at(i)); + stream << badge.icon(); + stream << (qint32) badge.alignment(); + stream << badge.zValue(); + stream << badge.sizeFactor(); + stream << (qint32) badge.aspectRatio(); } } @@ -199,19 +214,24 @@ /*! \Internal */ -void HbBadgeIcon::internalize(QDataStream& stream) +void HbBadgeIcon::internalize(QDataStream &stream) { int howManyBadges; stream >> howManyBadges; - for (int i = 0; i> icon; stream >> align; stream >> zValue; + stream >> sizeFactor; + stream >> aspectRatio; - HbBadgeIconInfo info(icon, (Qt::Alignment)align, zValue); + HbBadgeIconInfo info(icon, (Qt::Alignment) align, zValue, + sizeFactor, (Qt::AspectRatioMode) aspectRatio); mBadgeIcons.append(info); - }; + } }