From: Vadim Zeitlin Date: Tue, 27 Dec 2011 01:21:26 +0000 (+0000) Subject: Add support for more CSS styles to SPAN tag in wxHtmlWindow. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/3e65f74e180f1252b1c03bf146b5dad4cc7bec68 Add support for more CSS styles to SPAN tag in wxHtmlWindow. Add limited support font-family, font-style and text-decoration. Closes #13170. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70120 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 90bd87fe22..c32ef0534c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -458,6 +458,7 @@ All (GUI): - Added wxDataViewItemAttr::SetBackgroundColour() and implemented it in generic wxDataViewCtrl (Andrew Xu). - Fix item alignment in icon view in the generic wxListCtrl. +- Support font-family/style, text-decoration in wxHtmlWindow (Blake Oleander). GTK: diff --git a/docs/doxygen/overviews/html.h b/docs/doxygen/overviews/html.h index 00320585d7..370001478c 100644 --- a/docs/doxygen/overviews/html.h +++ b/docs/doxygen/overviews/html.h @@ -581,8 +581,14 @@ UL wxHTML doesn't really have CSS support but it does support a few simple styles: you can use @c "text-align", @c "width", @c "vertical-align" and @c -"background" with all elements and for @c SPAN elements the @c "color", @c -"font-size" and @c "font-weight" are additionally recognized. +"background" with all elements and for @c SPAN elements a few other styles are +additionally recognized: + - @c color + - @c font-family + - @c font-size (only in point units) + - @c font-style (only "oblique", "italic" and "normal" values are supported) + - @c font-weight (only "bold" and "normal" values are supported) + - @c text-decoration (only "underline" value is supported) */ diff --git a/src/html/m_span.cpp b/src/html/m_span.cpp index 6df438311f..025593e19e 100644 --- a/src/html/m_span.cpp +++ b/src/html/m_span.cpp @@ -36,6 +36,9 @@ TAG_HANDLER_BEGIN(SPAN, "SPAN" ) wxColour oldclr = m_WParser->GetActualColor(); int oldsize = m_WParser->GetFontSize(); int oldbold = m_WParser->GetFontBold(); + int olditalic = m_WParser->GetFontItalic(); + int oldunderlined = m_WParser->GetFontUnderlined(); + wxString oldfontface = m_WParser->GetFontFace(); // Load any style parameters wxHtmlStyleParams styleParams(tag); @@ -92,22 +95,60 @@ TAG_HANDLER_BEGIN(SPAN, "SPAN" ) } } - ParseInner(tag); + str = styleParams.GetParam(wxS("font-style")); + if ( !str.empty() ) + { + // "oblique" and "italic" are more or less the same. + // "inherit" (using the parent font) is not supported. + if ( str == wxS("oblique") || str == wxS("italic") ) + { + m_WParser->SetFontItalic(true); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + } + else if ( str == wxS("normal") ) + { + m_WParser->SetFontItalic(false); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + } + } - if (oldbold != m_WParser->GetFontBold()) + str = styleParams.GetParam(wxS("text-decoration")); + if ( !str.empty() ) { - m_WParser->SetFontBold(oldbold); - m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + // Only underline is supported. + if ( str == wxS("underline") ) + { + m_WParser->SetFontUnderlined(true); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + } } - if (oldsize != m_WParser->GetFontSize()) + + str = styleParams.GetParam(wxS("font-family")); + if ( !str.empty() ) { - m_WParser->SetFontSize(oldsize); - m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + m_WParser->SetFontFace(str); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); } + + ParseInner(tag); + + m_WParser->SetFontSize(oldsize); + m_WParser->SetFontBold(oldbold); + m_WParser->SetFontUnderlined(oldunderlined); + m_WParser->SetFontFace(oldfontface); + m_WParser->SetFontItalic(olditalic); + m_WParser->GetContainer()->InsertCell( + new wxHtmlFontCell(m_WParser->CreateCurrentFont())); + if (oldclr != m_WParser->GetActualColor()) { m_WParser->SetActualColor(oldclr); - m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr)); + m_WParser->GetContainer()->InsertCell( + new wxHtmlColourCell(oldclr)); } return true;