QPixmap StylePainterMobile::findRadio(const QSize& size, bool checked, bool enabled) const { ASSERT(size.width() == size.height()); QPixmap result; KeyIdentifier id; id.type = KeyIdentifier::Radio; id.height = size.height(); id.trait1 = enabled; id.trait2 = checked; if (!findCachedControl(id, &result)) { result = QPixmap(size); result.fill(Qt::transparent); QPainter cachePainter(&result); drawRadio(&cachePainter, size, checked, enabled); insertIntoCache(id, result); } return result; }
void StylePainterMobile::drawSliderThumb(const QRect & rect, bool pressed) const { QPixmap result; const QSize size = sizeForPainterScale(rect); KeyIdentifier id; id.type = KeyIdentifier::SliderThumb; id.width = size.width(); id.height = size.height(); id.trait1 = pressed; if (!findCachedControl(id, &result)) { if (size.isNull()) return; result = QPixmap(size); result.fill(Qt::transparent); QPainter cachePainter(&result); drawControlBackground(&cachePainter, borderPen(painter), QRect(QPoint(0, 0), size), pressed? Qt::lightGray : buttonGradientBottom); insertIntoCache(id, result); } painter->drawPixmap(rect, result); }
QPixmap StylePainterMobile::findCheckBox(const QSize& size, bool checked, bool enabled) const { ASSERT(size.width() == size.height()); QPixmap result; KeyIdentifier id; id.type = KeyIdentifier::CheckBox; id.height = size.height(); id.trait1 = enabled; id.trait2 = checked; if (!findCachedControl(id, &result)) { result = QPixmap(size); result.fill(Qt::transparent); QPainter cachePainter(&result); QRect rect(QPoint(0, 0), size); drawCheckableBackground(&cachePainter, rect, checked, enabled); if (checked || !enabled) drawChecker(&cachePainter, rect, enabled ? Qt::white : Qt::gray); insertIntoCache(id, result); } return result; }
QPixmap StylePainterMobile::findPushButton(const QSize& size, bool sunken, bool enabled) const { QPixmap result; KeyIdentifier id; id.type = KeyIdentifier::PushButton; id.width = size.width(); id.height = size.height(); id.trait1 = sunken; id.trait2 = enabled; if (!findCachedControl(id, &result)) { const qreal dropShadowSize = painterScale(painter); result = QPixmap(size); result.fill(Qt::transparent); const QRect rect = QRect(0, 0, size.width(), size.height() - dropShadowSize); QPainter cachePainter(&result); drawControlBackground(&cachePainter, Qt::NoPen, rect.adjusted(0, dropShadowSize, 0, dropShadowSize), shadowColor); QBrush brush; if (enabled && !sunken) { QLinearGradient linearGradient; linearGradient.setStart(rect.bottomLeft()); linearGradient.setFinalStop(rect.topLeft()); linearGradient.setColorAt(0.0, buttonGradientBottom); linearGradient.setColorAt(1.0, Qt::white); brush = linearGradient; } else if (!enabled) brush = QColor(241, 242, 243); else { // sunken QLinearGradient linearGradient; linearGradient.setStart(rect.bottomLeft()); linearGradient.setFinalStop(rect.topLeft()); linearGradient.setColorAt(0.0, highlightColor); linearGradient.setColorAt(1.0, highlightColor.lighter()); brush = linearGradient; } drawControlBackground(&cachePainter, borderPen(painter), rect, brush); insertIntoCache(id, result); } return result; }
nsresult nsStringBundleService::getStringBundle(const char *aURLSpec, nsIStringBundle **aResult) { nsCStringKey completeKey(aURLSpec); bundleCacheEntry_t* cacheEntry = (bundleCacheEntry_t*)mBundleMap.Get(&completeKey); if (cacheEntry) { // cache hit! // remove it from the list, it will later be reinserted // at the head of the list PR_REMOVE_LINK((PRCList*)cacheEntry); } else { // hasn't been cached, so insert it into the hash table nsStringBundle* bundle = new nsStringBundle(aURLSpec, mOverrideStrings); if (!bundle) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(bundle); cacheEntry = insertIntoCache(bundle, &completeKey); NS_RELEASE(bundle); // cache should now be holding a ref // in the cacheEntry } // at this point the cacheEntry should exist in the hashtable, // but is not in the LRU cache. // put the cache entry at the front of the list PR_INSERT_LINK((PRCList *)cacheEntry, &mBundleCache); // finally, return the value *aResult = cacheEntry->mBundle; NS_ADDREF(*aResult); return NS_OK; }