From d62c139ee0d0d7e9363392810329135a19c3cddb Mon Sep 17 00:00:00 2001 From: Nimetu Date: Tue, 12 Mar 2019 20:02:43 +0200 Subject: [PATCH] Changed: Parse html style attribute --HG-- branch : develop --- code/nel/include/nel/gui/group_html.h | 5 +++ code/nel/include/nel/gui/libwww.h | 8 ++++ code/nel/src/gui/group_html.cpp | 60 ++++++++++++++++++++------- code/nel/src/gui/libwww.cpp | 11 +++++ 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/code/nel/include/nel/gui/group_html.h b/code/nel/include/nel/gui/group_html.h index 7820cbd6a..8b296f114 100644 --- a/code/nel/include/nel/gui/group_html.h +++ b/code/nel/include/nel/gui/group_html.h @@ -105,6 +105,7 @@ namespace NLGUI Height=-1; MaxWidth=-1; MaxHeight=-1; + BackgroundColor=NLMISC::CRGBA::Black; } uint FontSize; uint FontWeight; @@ -119,6 +120,7 @@ namespace NLGUI sint32 Height; sint32 MaxWidth; sint32 MaxHeight; + NLMISC::CRGBA BackgroundColor; }; // ImageDownload system @@ -345,6 +347,9 @@ namespace NLGUI // Get Home URL virtual std::string home(); + // Clear style stack and restore default style + void resetCssStyle(); + // Parse style html tag TStyle parseStyle(const std::string &str_styles); diff --git a/code/nel/include/nel/gui/libwww.h b/code/nel/include/nel/gui/libwww.h index 9c6579f1f..112cae7d7 100644 --- a/code/nel/include/nel/gui/libwww.h +++ b/code/nel/include/nel/gui/libwww.h @@ -49,6 +49,14 @@ namespace NLGUI #undef HTML_ATTR #define HTML_ATTR(t,a) MY_HTML_##t##_##a + enum + { + HTML_ATTR(HTML,DIR) = 0, + HTML_ATTR(HTML,LANG), + HTML_ATTR(HTML,VERSION), + HTML_ATTR(HTML,STYLE), + }; + enum { HTML_ATTR(A,ACCESSKEY) = 0, diff --git a/code/nel/src/gui/group_html.cpp b/code/nel/src/gui/group_html.cpp index 92431a3aa..7b81ef746 100644 --- a/code/nel/src/gui/group_html.cpp +++ b/code/nel/src/gui/group_html.cpp @@ -1489,6 +1489,13 @@ namespace NLGUI // Paragraph ? switch(element_number) { + case HTML_HTML: + if (present[MY_HTML_HTML_STYLE] && value[MY_HTML_HTML_STYLE]) + getStyleParams(value[MY_HTML_HTML_STYLE], _StyleDefault); + + _Style = _StyleDefault; + setBackgroundColor(_Style.BackgroundColor); + break; case HTML_HEAD: _ReadingHeadTag = !_IgnoreHeadTag; _IgnoreHeadTag = true; @@ -1708,18 +1715,22 @@ namespace NLGUI break; case HTML_BODY: { - if (present[HTML_BODY_BGCOLOR] && value[HTML_BODY_BGCOLOR]) - { - CRGBA bgColor; - if (scanHTMLColor(value[HTML_BODY_BGCOLOR], bgColor)) - setBackgroundColor (bgColor); - } - + pushStyle(); + string style; if (present[HTML_BODY_STYLE] && value[HTML_BODY_STYLE]) style = value[HTML_BODY_STYLE]; - - + + if (!style.empty()) + getStyleParams(style, _Style); + + CRGBA bgColor = _Style.BackgroundColor; + if (present[HTML_BODY_BGCOLOR] && value[HTML_BODY_BGCOLOR]) + scanHTMLColor(value[HTML_BODY_BGCOLOR], bgColor); + + if (bgColor != _Style.BackgroundColor) + setBackgroundColor(bgColor); + if (!style.empty()) { TStyle styles = parseStyle(style); @@ -1743,10 +1754,6 @@ namespace NLGUI image = image.substr(4, image.size()-5); setBackground (image, scale, repeat); } - - // set default text style from - getStyleParams(style, _StyleDefault); - _Style = _StyleDefault; } } break; @@ -2737,6 +2744,9 @@ namespace NLGUI case HTML_HEAD: _ReadingHeadTag = false; break; + case HTML_BODY: + popStyle(); + break; case HTML_FONT: popStyle(); break; @@ -4915,9 +4925,7 @@ namespace NLGUI _IgnoreBaseUrlTag = false; // reset style - _StyleDefault = CStyleParams(); - _Style = _StyleDefault; - _StyleParams.clear(); + resetCssStyle(); // TR @@ -6252,6 +6260,18 @@ namespace NLGUI return uri.toString(); } + // *************************************************************************** + void CGroupHTML::resetCssStyle() + { + _StyleDefault = CStyleParams(); + _StyleDefault.TextColor = TextColor; + _StyleDefault.FontSize = TextFontSize; + _StyleDefault.BackgroundColor = BgColor; + + _Style = _StyleDefault; + _StyleParams.clear(); + } + // *************************************************************************** // CGroupHTML::CStyleParams style; // style.FontSize; // font-size: 10px; @@ -6485,6 +6505,14 @@ namespace NLGUI if (fromString(it->second, b)) style.GlobalColor = b; } + else + if (it->first == "background-color") + { + if (it->second == "inherit") + style.BackgroundColor = current.backgroundColor; + else + scanHTMLColor(it->second.c_str(), style.BackgroundColor); + } } } diff --git a/code/nel/src/gui/libwww.cpp b/code/nel/src/gui/libwww.cpp index f00a92749..bb32fd5b6 100644 --- a/code/nel/src/gui/libwww.cpp +++ b/code/nel/src/gui/libwww.cpp @@ -47,6 +47,15 @@ namespace NLGUI #undef HTML_ATTR #define HTML_ATTR(a,b) { (char*) #b } + HTAttr html_attr[] = + { + HTML_ATTR(HTML,DIR), + HTML_ATTR(HTML,LANG), + HTML_ATTR(HTML,VERSION), + HTML_ATTR(HTML,STYLE), + { 0 } + }; + HTAttr a_attr[] = { HTML_ATTR(A,ACCESSKEY), @@ -469,6 +478,8 @@ namespace NLGUI // Change the HTML DTD SGML_dtd *HTML_DTD = HTML_dtd (); + HTML_DTD->tags[HTML_HTML].attributes = html_attr; + HTML_DTD->tags[HTML_HTML].number_of_attributes = sizeof(html_attr) / sizeof(HTAttr) - 1; HTML_DTD->tags[HTML_TABLE].attributes = table_attr; HTML_DTD->tags[HTML_TABLE].number_of_attributes = sizeof(table_attr) / sizeof(HTAttr) - 1; HTML_DTD->tags[HTML_TR].attributes = tr_attr;