int Font::getStyleFlags() const noexcept { int styleFlags = font->underline ? underlined : plain; if (isBold()) styleFlags |= bold; if (isItalic()) styleFlags |= italic; return styleFlags; }
bool Font::format(QDomDocument &doc, QDomElement &f, uint pos, uint len, bool all) const { f.setAttribute("id", 1); if (!all) f.setAttribute("pos", pos); if (!all) f.setAttribute("len", len); QDomElement element; Font def; if ( all || _data->family!=def._data->family ) { element = doc.createElement("FONT"); element.setAttribute("name", _data->family); f.appendChild(element); } if ( all || _pointSize!=def._pointSize ) { element = doc.createElement("SIZE"); element.setAttribute("value", _pointSize); f.appendChild(element); } if ( all || isItalic(_data->style)!=isItalic(def._data->style) ) { element = doc.createElement("ITALIC"); element.setAttribute("value", (isItalic(_data->style) ? 1 : 0)); f.appendChild(element); } if ( all || isBold(_data->style)!=isBold(def._data->style) ) { element = doc.createElement("WEIGHT"); element.setAttribute("value", (isBold(_data->style) ? QFont::Bold : QFont::Normal)); f.appendChild(element); } // if ( all || _underline!=def._underline ) { // element = doc.createElement("UNDERLINE"); // element.setAttribute("value", (_underline ? 1 : 0)); // f.appendChild(element); // } // if ( all || _strikeOut!=def._strikeOut ) { // element = doc.createElement("STRIKEOUT"); // element.setAttribute("value", (_strikeOut ? 1 : 0)); // f.appendChild(element); // } if (all) { element = doc.createElement("VERTALIGN"); element.setAttribute("value", 0); f.appendChild(element); } if ( all || _color!=def._color ) { element = doc.createElement("COLOR"); element.setAttribute("red", _color.red()); element.setAttribute("green", _color.green()); element.setAttribute("blue", _color.blue()); f.appendChild(element); } if (all) { // #### FIXME element = doc.createElement("TEXTBACKGROUNDCOLOR"); element.setAttribute("red", 255); element.setAttribute("green",255); element.setAttribute("blue", 255); f.appendChild(element); } return f.hasChildNodes(); }
void Font::init(const QString &n) { // check if font already parsed _data = _dict->find(n); if ( _data==0 ) { // kdDebug(30516) << "font " << n << endl; QString name = n; name.replace("oblique", "italic"); // check if known font _data = new Data; uint i = 0; while ( KNOWN_DATA[i].name!=0 ) { if ( name.find(KNOWN_DATA[i].name)!=-1 ) { // kdDebug(30516) << "found " << KNOWN_DATA[i].name // << " " << isBold(KNOWN_DATA[i].style) << endl; _data->family = FAMILY_DATA[KNOWN_DATA[i].family]; _data->style = KNOWN_DATA[i].style; _data->latex = KNOWN_DATA[i].latex; break; } i++; } if ( _data->family.isEmpty() ) { // let's try harder // simple heuristic kdDebug(30516) << "unknown font : " << n << endl; if ( name.find("times")!=-1 ) _data->family = FAMILY_DATA[Times]; else if ( name.find("helvetica")!=-1 ) _data->family = FAMILY_DATA[Helvetica]; else if ( name.find("courier")!=-1 ) _data->family = FAMILY_DATA[Courier]; else if ( name.find("symbol")!=-1 ) _data->family = FAMILY_DATA[Symbol]; else { // with Qt QFontDatabase fdb; QStringList list = fdb.families(); list = list.grep(name, false); if ( !list.isEmpty() ) { _data->family = list[0]; kdDebug(30516) << "in Qt database as " << list[0] << endl; } else { kdDebug(30516) << "really unknown font !" << endl; _data->family = name; } } bool italic = ( name.find("italic")!=-1 ); bool bold = ( name.find("bold")!=-1 ); _data->style = toStyle(bold, italic); _data->latex = false; } _dict->insert(name, _data); } // check if QFont already created if ( !_data->height.contains(_pointSize) ) { QFont font(_data->family, _pointSize, (isBold(_data->style) ? QFont::Bold : QFont::Normal), isItalic(_data->style)); QFontMetrics fm(font); _data->height.insert(_pointSize, fm.height()); } }