void PHISHtmlGeneric::richTextLayouted() const { _out+=_indent+"<div class=\"phi_"+QByteArray::number( PHI::RICH_TEXT )+"\"" +id()+title()+startStyle()+colorStyle()+outlineColorStyle()+fontStyle() +alignmentStyle()+effectStyle()+"\">\n"; _out+=_it->valueData()+'\n'; _out+=_indent+"</div>\n"; }
void PHISHtmlGeneric::richText() const { //return createGraphicsImage( GTRichText ); _out+=_indent+"<div class=\"phi_"+QByteArray::number( PHI::TEXT )+"\"" +id()+title()+startStyle()+colorStyle()+outlineColorStyle()+fontStyle() +alignmentStyle()+effectStyle()+"\">\n"; _out+=_it->valueData()+'\n'; _out+=_indent+"</div>\n"; }
void PHISHtmlGeneric::label() const { _out+=_indent+"<div "+id()+startStyle()+effectStyle()+"\">\n"; _out+=_indent+"\t<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" " +"id=\""+_it->id()+"_phitbl\"><tr><td style=\""+alignmentStyle() +colorStyle()+outlineColorStyle()+fontStyle()+heightStyle(); _out+="overflow:visible;white-space:nowrap;\" onmouseover=\"this.style.cursor='default';\">"; //" onmouseout=\"this.style.cursor='auto';\">"; _out+=_it->valueData(); _out+="</td></tr></table>\n"+_indent+"</div>\n"; }
void PHISHtmlWebKit532::button() const { static QByteArray type=QByteArray::fromRawData( "-webkit-appearance:button;", 26 ); _out+=_indent+"<input type=\"button\" class=\"phibuttontext\""+name() +title()+disabled()+value()+accessKey()+tabIndex()+onClickUrl() +startStyle( adjustButtonSize() )+colorStyle(); if ( _isMacOSX ) { if ( _it->height()>35. ) _out+=type; QByteArray font=fontStyle(); if ( font.isNull() ) { QFont f=_p->font(); font.reserve( 200 ); font+="font-family:'"+f.family().toUtf8(); if ( !f.lastResortFamily().isEmpty() ) font+="','"+f.lastResortFamily().toUtf8(); font+="';"; if ( f.pointSize() > -1 ) font+="font-size:"+QByteArray::number( f.pointSize()+1 )+"pt;"; } _out+=font; } else _out+=fontStyle(); _out+=effectStyle()+_endtag; }
void PHISHtmlWebKit532::imageButton() const { _out+=_indent+"<button type=\"button\" class=\"phibuttontext\"" +name()+disabled()+title()+accessKey()+tabIndex() +onClickUrl()+startStyle( adjustButtonSize() )+effectStyle(); _out+="padding:0px;-webkit-appearance:button;\">\n"; QByteArray url; if ( _it->imageId().startsWith( QLatin1String( "phi" ) ) ) url="/phi.phis?phiimg="+_it->imageIdData()+"&phitmp=1"; else url="/phi.phis?phiimg="+_it->imageIdData(); QByteArray style=" style=\"position:relative;vertical-align:middle;"; _out+='\t'; imageSource( url, style, _it->id()+"_phiimg", _it->toolTipData() ); _out+=_indent+"\t<span style=\""+colorStyle()+fontStyle() +"\">"+_it->valueData()+"</span>\n"; _out+=_indent+"</button>\n"; }
void PHISHtmlWebKit532::selectBox() const { QByteArray font=fontStyle(); if ( font.isNull() && _isMacOSX ) { QFont f=_p->font(); font.reserve( 200 ); font+="font-family:'"+f.family().toUtf8(); if ( !f.lastResortFamily().isEmpty() ) font+="','"+f.lastResortFamily().toUtf8(); font+="';"; if ( f.pointSize() > -1 ) font+="font-size:"+QByteArray::number( f.pointSize()+1 )+"pt;"; } _out+=_indent+"<select class=\"phitext\""; _out+=name()+title()+disabled()+accessKey()+tabIndex() +startStyle( adjustSelectSize() )+effectStyle() +font+colorStyle()+"\">\n"; _out+=selectOptions(); _out+=_indent+"</select>\n"; }
void serializeBaseStyle() { PagePopupClient::addString("baseStyle: {", m_buffer); addProperty("backgroundColor", m_backgroundColor.serialized(), m_buffer); addProperty("color", m_foregroundColor.serialized(), m_buffer); addProperty("textTransform", String(textTransformToString(m_textTransform)), m_buffer); addProperty("fontSize", fontSize(), m_buffer); addProperty("fontStyle", String(fontStyleToString(fontStyle())), m_buffer); addProperty("fontVariant", String(fontVariantToString(fontVariant())), m_buffer); PagePopupClient::addString("fontFamily: [", m_buffer); for (const FontFamily* f = &fontFamily(); f; f = f->next()) { addJavaScriptString(f->family().string(), m_buffer); if (f->next()) PagePopupClient::addString(",", m_buffer); } PagePopupClient::addString("]", m_buffer); PagePopupClient::addString("},\n", m_buffer); }
void PHISHtmlGeneric::menuLink() const { _out+=_indent+"<div "+id()+title()+onClickUrl()+startStyle()+effectStyle()+"\">\n"; _out+=_indent+"\t<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" " +"id=\""+_it->id()+"_phitbl\"><tr><td style=\""+alignmentStyle() +colorStyle()+outlineColorStyle()+fontStyle()+heightStyle() +"overflow:visible;white-space:nowrap;\""; if ( _it->rolloverTextColor().isValid() || _it->rolloverBackgroundColor().isValid() ) { _out+=" onmouseover=\"this.style.cursor='default';"; if ( _it->rolloverTextColor().isValid() ) _out+="this.style.color='"+_it->rolloverTextColor().name().toLatin1()+"';"; if ( _it->rolloverBackgroundColor().isValid() ) _out+="this.style.backgroundColor='"+_it->rolloverBackgroundColor().name().toLatin1()+"';"; _out+='"'; QColor tc=_it->color().isValid() ? _it->color() : _p->palette().color( QPalette::WindowText ); _out+=" onmouseout=\"this.style.color='"+tc.name().toLatin1()+"';"; if ( _it->outlineColor().isValid() ) _out+="this.style.backgroundColor='"+_it->outlineColor().name().toLatin1()+"';"; _out+='"'; } _out+='>'+_it->valueData(); _out+="</td></tr></table>\n"+_indent+"</div>\n"; }
QVector<OsmAnd::TextRasterizer_P::LinePaint> OsmAnd::TextRasterizer_P::evaluatePaints( const QVector<QStringRef>& lineRefs, const Style& style) const { // Prepare default paint SkPaint paint = _defaultPaint; paint.setTextSize(style.size); paint.setColor(style.color.toSkColor()); // Transform text style to font style const SkFontStyle fontStyle( style.bold ? SkFontStyle::kBold_Weight : SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, style.italic ? SkFontStyle::kItalic_Slant : SkFontStyle::kUpright_Slant); const auto pText = lineRefs.first().string()->constData(); QVector<LinePaint> linePaints; linePaints.reserve(lineRefs.count()); for (const auto& lineRef : constOf(lineRefs)) { LinePaint linePaint; linePaint.line = lineRef; TextPaint* pTextPaint = nullptr; const auto pLine = lineRef.constData(); const auto pEnd = pLine + lineRef.size(); auto pNextCharacter = pLine; while (pNextCharacter != pEnd) { const auto pCharacter = pNextCharacter; const auto position = pNextCharacter - pText; const auto characterUCS4 = SkUTF16_NextUnichar(reinterpret_cast<const uint16_t**>(&pNextCharacter)); // First of all check previous font if it contains this character auto font = pTextPaint ? pTextPaint->paint.getTypeface() : nullptr; if (font) { SkPaint paint; paint.setTextEncoding(SkPaint::kUTF32_TextEncoding); paint.setTypeface(font); if (!paint.containsText(&characterUCS4, sizeof(uint32_t))) font = nullptr; #if OSMAND_LOG_CHARACTERS_FONT else { SkString fontName; font->getFamilyName(&fontName); LogPrintf(LogSeverityLevel::Warning, "UCS4 character 0x%08x (%u) has been found in '%s' font (reused)", characterUCS4, characterUCS4, fontName.c_str()); } #endif // OSMAND_LOG_CHARACTERS_FONT } if (!font) { font = owner->fontFinder->findFontForCharacterUCS4(characterUCS4, fontStyle); #if OSMAND_LOG_CHARACTERS_WITHOUT_FONT if (!font) { LogPrintf(LogSeverityLevel::Warning, "UCS4 character 0x%08x (%u) has not been found in any font", characterUCS4, characterUCS4); } #endif // OSMAND_LOG_CHARACTERS_WITHOUT_FONT #if OSMAND_LOG_CHARACTERS_FONT if (font) { SkString fontName; font->getFamilyName(&fontName); LogPrintf(LogSeverityLevel::Warning, "UCS4 character 0x%08x (%u) has been found in '%s' font", characterUCS4, characterUCS4, fontName.c_str()); } #endif // OSMAND_LOG_CHARACTERS_FONT } if (pTextPaint == nullptr || pTextPaint->paint.getTypeface() != font) { linePaint.textPaints.push_back(qMove(TextPaint())); pTextPaint = &linePaint.textPaints.last(); pTextPaint->text = QStringRef(lineRef.string(), position, 1); pTextPaint->paint = paint; pTextPaint->paint.setTypeface(font); SkPaint::FontMetrics metrics; pTextPaint->height = paint.getFontMetrics(&metrics); linePaint.maxFontHeight = qMax(linePaint.maxFontHeight, pTextPaint->height); linePaint.minFontHeight = qMin(linePaint.minFontHeight, pTextPaint->height); linePaint.maxFontLineSpacing = qMax(linePaint.maxFontLineSpacing, metrics.fLeading); linePaint.minFontLineSpacing = qMin(linePaint.minFontLineSpacing, metrics.fLeading); linePaint.maxFontTop = qMax(linePaint.maxFontTop, -metrics.fTop); linePaint.minFontTop = qMin(linePaint.minFontTop, -metrics.fTop); linePaint.maxFontBottom = qMax(linePaint.maxFontBottom, metrics.fBottom); linePaint.minFontBottom = qMin(linePaint.minFontBottom, metrics.fBottom); if (style.bold && (!font || (font && font->fontStyle().weight() <= SkFontStyle::kNormal_Weight))) pTextPaint->paint.setFakeBoldText(true); } else { pTextPaint->text = QStringRef(lineRef.string(), pTextPaint->text.position(), pTextPaint->text.size() + 1); } } linePaints.push_back(qMove(linePaint)); } return linePaints; }