QIcon Flags::createIcon(const QString& layout) { QIcon icon; if( ! layout.isEmpty() ) { if( layout == "epo" ) { QString file = KStandardDirs::locate("data", "kcmkeyboard/pics/epo.png"); icon.addFile(file); } else { QString countryCode = getCountryFromLayoutName( layout ); if( ! countryCode.isEmpty() ) { QString file = KStandardDirs::locate("locale", QString(flagTemplate).arg(countryCode)); // kDebug() << "Creating icon for" << layout << "with" << file; icon.addFile(file); } } } return icon; }
const QPixmap& LayoutIcon::findPixmap(const QString& code_, bool showFlag, const QString& displayName_) { QPixmap* pm = NULL; if( code_ == ERROR_CODE ) { pm = m_pixmapCache[ERROR_CODE]; if( pm == NULL ) { pm = createErrorPixmap(); m_pixmapCache.insert(ERROR_CODE, pm); } return *pm; } QString displayName(displayName_); if( displayName.isEmpty() ) { displayName = KxkbConfig::getDefaultDisplayName(code_); } if( displayName.length() > 3 ) displayName = displayName.left(3); const QString pixmapKey( showFlag ? code_ + "." + displayName : displayName ); pm = m_pixmapCache[pixmapKey]; if( pm ) return *pm; QString flag; if( showFlag ) { QString countryCode = getCountryFromLayoutName( code_ ); flag = locate("locale", flagTemplate.arg(countryCode)); } if( flag.isEmpty() ) { pm = new QPixmap(FLAG_MAX_WIDTH, FLAG_MAX_HEIGHT); pm->fill(Qt::gray); } else { pm = new QPixmap(flag); dimPixmap( *pm ); #if 0 if( pm->height() < FLAG_MAX_HEIGHT ) { QPixmap* pix = new QPixmap(FLAG_MAX_WIDTH, FLAG_MAX_HEIGHT); pix->fill( Qt::lightGray ); // pix->fill( QColor(qRgba(127,127,127,255)) ); // QBitmap mask; // mask.fill(1); // pix->setMask(mask); int dy = (pix->height() - pm->height()) / 2; copyBlt( pix, 0, dy, pm, 0, 0, -1, -1 ); // QPixmap* px = new QPixmap(21, 14); // px->convertFromImage(img);*/ delete pm; pm = pix; } #endif } QPainter p(pm); p.setFont(m_labelFont); p.setPen(Qt::black); p.drawText(1, 1, pm->width(), pm->height()-2, Qt::AlignCenter, displayName); p.setPen(Qt::white); p.drawText(0, 0, pm->width(), pm->height()-2, Qt::AlignCenter, displayName); m_pixmapCache.insert(pixmapKey, pm); return *pm; }