void QtCurveToggleButton::drawButton(QPainter *painter) { QRect r(0, 0, width(), height()); bool active(m_client->isActive()), sunken(isDown()); QColor col(KDecoration::options()->color(KDecoration::ColorFont, active/* || faded*/)); col.setAlphaF(m_hover ? 0.99 : 0.15); painter->setRenderHint(QPainter::Antialiasing, true); //painter->setPen(QPen(col, (isChecked() ? 2.0 : 1.0))); painter->setPen(col); r.adjust(1, 1, -1, -1); QFont font(Handler()->titleFont()); int maxPixelSize=r.height()-2, fontPixelSize=font.pixelSize(); bool drawBorder=true; if(maxPixelSize<9) { maxPixelSize=r.height()+2; drawBorder=false; r.adjust(-1, -1, 1, 1); } if(-1==fontPixelSize) fontPixelSize=point2Pixel(font.pointSizeF()); if(fontPixelSize>maxPixelSize) font.setPixelSize(maxPixelSize-2); painter->setFont(font); QRectF ellipse(r.x()+0.5, r.y()+0.5, r.width(), r.height()); QColor bgnd(KDecoration::options()->color(KDecoration::ColorTitleBar, active)); bool round=Handler()->wStyle()->pixelMetric((QStyle::PixelMetric)QtC_TitleBarButtons, 0L, 0L)&TITLEBAR_BUTTON_ROUND; double squareRad=round || Handler()->wStyle()->pixelMetric((QStyle::PixelMetric)QtC_Round, 0L, 0L)<ROUND_FULL ? 0.0 : 2.0; QPainterPath path; bgnd.setAlphaF(m_hover ? 0.9 : 0.4); if(round) path.addEllipse(ellipse); else path.addRoundedRect(ellipse, squareRad+0.5, squareRad+0.5); painter->fillPath(path, bgnd); if(sunken) { bgnd=col; bgnd.setAlphaF(0.2); painter->fillPath(path, bgnd); } if(drawBorder) { if(round) painter->drawEllipse(ellipse); else painter->drawRoundedRect(ellipse, squareRad, squareRad); } if(sunken) r.adjust(1, 1, 1, 1); painter->setPen(col); painter->drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, isMenuBar ? i18n("M") : i18n("S")); }
bool CFontThumbnail::create(const QString &path, int width, int height, QImage &img) { QString realPath(path); KTempDir *tempDir = 0; KFI_DBUG << "Create font thumbnail for:" << path << endl; // Is this a appliaction/vnd.kde.fontspackage file? If so, extract 1 scalable font... if(Misc::isPackage(path) || "application/zip"==KMimeType::findByFileContent(path)->name()) { KZip zip(path); if(zip.open(QIODevice::ReadOnly)) { const KArchiveDirectory *zipDir=zip.directory(); if(zipDir) { QStringList fonts(zipDir->entries()); if(fonts.count()) { QStringList::ConstIterator it(fonts.begin()), end(fonts.end()); for(; it!=end; ++it) { const KArchiveEntry *entry=zipDir->entry(*it); if(entry && entry->isFile()) { delete tempDir; tempDir=new KTempDir(KStandardDirs::locateLocal("tmp", KFI_TMP_DIR_PREFIX)); tempDir->setAutoRemove(true); ((KArchiveFile *)entry)->copyTo(tempDir->name()); QString mime(KMimeType::findByPath(tempDir->name()+entry->name())->name()); if(mime=="application/x-font-ttf" || mime=="application/x-font-otf" || mime=="application/x-font-type1") { realPath=tempDir->name()+entry->name(); break; } else ::unlink(QFile::encodeName(tempDir->name()+entry->name()).data()); } } } } } } QColor bgnd(Qt::black); bgnd.setAlpha(0); img=itsEngine.draw(realPath, KFI_NO_STYLE_INFO, 0, QApplication::palette().text().color(), bgnd, width, height, true); delete tempDir; return !img.isNull(); }