Changed: Keep track of style states in a single struct
--HG-- branch : develop
This commit is contained in:
parent
91fa4d3f5f
commit
d32877ddc9
2 changed files with 175 additions and 277 deletions
|
@ -505,78 +505,32 @@ namespace NLGUI
|
||||||
// IL mode
|
// IL mode
|
||||||
bool _LI;
|
bool _LI;
|
||||||
|
|
||||||
// Current text color
|
// Current active style
|
||||||
std::vector<NLMISC::CRGBA> _TextColor;
|
CStyleParams _Style;
|
||||||
inline const NLMISC::CRGBA &getTextColor() const
|
// Default style
|
||||||
|
CStyleParams _StyleDefault;
|
||||||
|
// Nested style stack
|
||||||
|
std::vector<CStyleParams> _StyleParams;
|
||||||
|
inline void pushStyle()
|
||||||
{
|
{
|
||||||
if (_TextColor.empty())
|
_StyleParams.push_back(_Style);
|
||||||
return TextColor;
|
}
|
||||||
return _TextColor.back();
|
inline void popStyle()
|
||||||
|
{
|
||||||
|
if (_StyleParams.empty())
|
||||||
|
_Style = _StyleDefault;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_Style = _StyleParams.back();
|
||||||
|
_StyleParams.pop_back();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Current global color flag
|
|
||||||
std::vector<bool> _GlobalColor;
|
|
||||||
inline bool getGlobalColor() const
|
|
||||||
{
|
|
||||||
if (_GlobalColor.empty())
|
|
||||||
return false;
|
|
||||||
return _GlobalColor.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Current font name
|
|
||||||
std::vector<std::string> _FontFamily;
|
|
||||||
inline const char* getFontFamily() const
|
|
||||||
{
|
|
||||||
if (_FontFamily.empty())
|
|
||||||
return "";
|
|
||||||
return _FontFamily.back().c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Current font size
|
|
||||||
std::vector<uint> _FontSize;
|
|
||||||
inline uint getFontSize() const
|
|
||||||
{
|
|
||||||
if (_FontSize.empty())
|
|
||||||
return TextFontSize;
|
|
||||||
return _FontSize.back();
|
|
||||||
}
|
|
||||||
inline uint getFontSizeSmaller() const
|
inline uint getFontSizeSmaller() const
|
||||||
{
|
{
|
||||||
if (getFontSize() < 5)
|
if (_Style.FontSize < 5)
|
||||||
return 3;
|
return 3;
|
||||||
return getFontSize()-2;
|
return _Style.FontSize-2;
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<uint> _FontWeight;
|
|
||||||
inline uint getFontWeight() const
|
|
||||||
{
|
|
||||||
if (_FontWeight.empty())
|
|
||||||
return 400;
|
|
||||||
return _FontWeight.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<bool> _FontOblique;
|
|
||||||
inline bool getFontOblique() const
|
|
||||||
{
|
|
||||||
if (_FontOblique.empty())
|
|
||||||
return false;
|
|
||||||
return _FontOblique.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<bool> _FontUnderlined;
|
|
||||||
inline bool getFontUnderlined() const
|
|
||||||
{
|
|
||||||
if (_FontUnderlined.empty())
|
|
||||||
return false;
|
|
||||||
return _FontUnderlined.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<bool> _FontStrikeThrough;
|
|
||||||
inline bool getFontStrikeThrough() const
|
|
||||||
{
|
|
||||||
if (_FontStrikeThrough.empty())
|
|
||||||
return false;
|
|
||||||
return _FontStrikeThrough.back();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Current link
|
// Current link
|
||||||
|
|
|
@ -1485,23 +1485,14 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
registerAnchorName(MY_HTML_A);
|
registerAnchorName(MY_HTML_A);
|
||||||
|
|
||||||
CStyleParams style;
|
pushStyle();
|
||||||
style.FontFamily = getFontFamily();
|
_Style.TextColor = LinkColor;
|
||||||
style.FontSize = getFontSize();
|
_Style.Underlined = true;
|
||||||
style.TextColor = LinkColor;
|
_Style.GlobalColor = LinkColorGlobalColor;
|
||||||
style.Underlined = true;
|
|
||||||
style.StrikeThrough = getFontStrikeThrough();
|
|
||||||
style.GlobalColor = LinkColorGlobalColor;
|
|
||||||
|
|
||||||
if (present[HTML_A_STYLE] && value[HTML_A_STYLE])
|
if (present[HTML_A_STYLE] && value[HTML_A_STYLE])
|
||||||
getStyleParams(value[HTML_A_STYLE], style);
|
getStyleParams(value[HTML_A_STYLE], _Style);
|
||||||
|
|
||||||
_FontFamily.push_back(style.FontFamily);
|
|
||||||
_FontSize.push_back(style.FontSize);
|
|
||||||
_TextColor.push_back(style.TextColor);
|
|
||||||
_FontUnderlined.push_back(style.Underlined);
|
|
||||||
_FontStrikeThrough.push_back(style.StrikeThrough);
|
|
||||||
_GlobalColor.push_back(style.GlobalColor);
|
|
||||||
_A.push_back(true);
|
_A.push_back(true);
|
||||||
_Link.push_back ("");
|
_Link.push_back ("");
|
||||||
_LinkTitle.push_back("");
|
_LinkTitle.push_back("");
|
||||||
|
@ -1625,30 +1616,19 @@ namespace NLGUI
|
||||||
break;
|
break;
|
||||||
case HTML_FONT:
|
case HTML_FONT:
|
||||||
{
|
{
|
||||||
bool found = false;
|
pushStyle();
|
||||||
if (present[HTML_FONT_COLOR] && value[HTML_FONT_COLOR])
|
if (present[HTML_FONT_COLOR] && value[HTML_FONT_COLOR])
|
||||||
{
|
{
|
||||||
CRGBA color;
|
CRGBA color;
|
||||||
if (scanHTMLColor(value[HTML_FONT_COLOR], color))
|
if (scanHTMLColor(value[HTML_FONT_COLOR], color))
|
||||||
{
|
_Style.TextColor = color;
|
||||||
_TextColor.push_back(color);
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
_TextColor.push_back(_TextColor.empty() ? CRGBA::White : _TextColor.back());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (present[HTML_FONT_SIZE] && value[HTML_FONT_SIZE])
|
if (present[HTML_FONT_SIZE] && value[HTML_FONT_SIZE])
|
||||||
{
|
{
|
||||||
uint fontsize;
|
uint fontsize;
|
||||||
fromString(value[HTML_FONT_SIZE], fontsize);
|
fromString(value[HTML_FONT_SIZE], fontsize);
|
||||||
_FontSize.push_back(fontsize);
|
_Style.FontSize = fontsize;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_FontSize.push_back(_FontSize.empty() ? TextFontSize : _FontSize.back());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1720,46 +1700,64 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H1:
|
case HTML_H1:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H1);
|
registerAnchorName(MY_HTML_H1);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H1FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H1Color);
|
_Style.FontSize = H1FontSize;
|
||||||
_GlobalColor.push_back(H1ColorGlobalColor);
|
_Style.TextColor = H1Color;
|
||||||
|
_Style.GlobalColor = H1ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H2:
|
case HTML_H2:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H2);
|
registerAnchorName(MY_HTML_H2);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H2FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H2Color);
|
_Style.FontSize = H2FontSize;
|
||||||
_GlobalColor.push_back(H2ColorGlobalColor);
|
_Style.TextColor = H2Color;
|
||||||
|
_Style.GlobalColor = H2ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H3:
|
case HTML_H3:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H3);
|
registerAnchorName(MY_HTML_H3);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H3FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H3Color);
|
_Style.FontSize = H3FontSize;
|
||||||
_GlobalColor.push_back(H3ColorGlobalColor);
|
_Style.TextColor = H3Color;
|
||||||
|
_Style.GlobalColor = H3ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H4:
|
case HTML_H4:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H4);
|
registerAnchorName(MY_HTML_H4);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H4FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H4Color);
|
_Style.FontSize = H4FontSize;
|
||||||
_GlobalColor.push_back(H4ColorGlobalColor);
|
_Style.TextColor = H4Color;
|
||||||
|
_Style.GlobalColor = H4ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H5:
|
case HTML_H5:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H5);
|
registerAnchorName(MY_HTML_H5);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H5FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H5Color);
|
_Style.FontSize = H5FontSize;
|
||||||
_GlobalColor.push_back(H5ColorGlobalColor);
|
_Style.TextColor = H5Color;
|
||||||
|
_Style.GlobalColor = H5ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_H6:
|
case HTML_H6:
|
||||||
|
{
|
||||||
registerAnchorName(MY_HTML_H6);
|
registerAnchorName(MY_HTML_H6);
|
||||||
newParagraph(PBeginSpace);
|
newParagraph(PBeginSpace);
|
||||||
_FontSize.push_back(H6FontSize);
|
pushStyle();
|
||||||
_TextColor.push_back(H6Color);
|
_Style.FontSize = H6FontSize;
|
||||||
_GlobalColor.push_back(H6ColorGlobalColor);
|
_Style.TextColor = H6Color;
|
||||||
|
_Style.GlobalColor = H6ColorGlobalColor;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_IMG:
|
case HTML_IMG:
|
||||||
{
|
{
|
||||||
|
@ -1857,15 +1855,15 @@ namespace NLGUI
|
||||||
if (present[MY_HTML_INPUT_TYPE] && value[MY_HTML_INPUT_TYPE])
|
if (present[MY_HTML_INPUT_TYPE] && value[MY_HTML_INPUT_TYPE])
|
||||||
{
|
{
|
||||||
// by default not inherited, font family defaults to system font
|
// by default not inherited, font family defaults to system font
|
||||||
CStyleParams style;
|
pushStyle();
|
||||||
style.TextColor = TextColor;
|
_Style.TextColor = TextColor;
|
||||||
style.FontSize = TextFontSize;
|
_Style.FontSize = TextFontSize;
|
||||||
style.FontWeight = FONT_WEIGHT_NORMAL;
|
_Style.FontWeight = FONT_WEIGHT_NORMAL;
|
||||||
style.FontOblique = false;
|
_Style.FontOblique = false;
|
||||||
|
|
||||||
// Global color flag
|
// Global color flag
|
||||||
if (present[MY_HTML_INPUT_GLOBAL_COLOR])
|
if (present[MY_HTML_INPUT_GLOBAL_COLOR])
|
||||||
style.GlobalColor = true;
|
_Style.GlobalColor = true;
|
||||||
|
|
||||||
// Tooltip
|
// Tooltip
|
||||||
const char *tooltip = NULL;
|
const char *tooltip = NULL;
|
||||||
|
@ -1873,13 +1871,7 @@ namespace NLGUI
|
||||||
tooltip = value[MY_HTML_INPUT_ALT];
|
tooltip = value[MY_HTML_INPUT_ALT];
|
||||||
|
|
||||||
if (present[MY_HTML_INPUT_STYLE] && value[MY_HTML_INPUT_STYLE])
|
if (present[MY_HTML_INPUT_STYLE] && value[MY_HTML_INPUT_STYLE])
|
||||||
getStyleParams(value[MY_HTML_INPUT_STYLE], style);
|
getStyleParams(value[MY_HTML_INPUT_STYLE], _Style);
|
||||||
|
|
||||||
_TextColor.push_back(style.TextColor);
|
|
||||||
_FontFamily.push_back(style.FontFamily);
|
|
||||||
_FontSize.push_back(style.FontSize);
|
|
||||||
_FontWeight.push_back(style.FontWeight);
|
|
||||||
_FontOblique.push_back(style.FontOblique);
|
|
||||||
|
|
||||||
string type = toLower(value[MY_HTML_INPUT_TYPE]);
|
string type = toLower(value[MY_HTML_INPUT_TYPE]);
|
||||||
if (type == "image")
|
if (type == "image")
|
||||||
|
@ -1899,7 +1891,7 @@ namespace NLGUI
|
||||||
|
|
||||||
// Add the ctrl button
|
// Add the ctrl button
|
||||||
addButton (CCtrlButton::PushButton, name, normal, pushed.empty()?normal:pushed, over,
|
addButton (CCtrlButton::PushButton, name, normal, pushed.empty()?normal:pushed, over,
|
||||||
"html_submit_form", param.c_str(), tooltip, style);
|
"html_submit_form", param.c_str(), tooltip, _Style);
|
||||||
}
|
}
|
||||||
if (type == "button" || type == "submit")
|
if (type == "button" || type == "submit")
|
||||||
{
|
{
|
||||||
|
@ -1954,7 +1946,7 @@ namespace NLGUI
|
||||||
if (!ctrlButton) ctrlButton = dynamic_cast<CCtrlTextButton*>(buttonGroup->getCtrl("b"));
|
if (!ctrlButton) ctrlButton = dynamic_cast<CCtrlTextButton*>(buttonGroup->getCtrl("b"));
|
||||||
if (ctrlButton)
|
if (ctrlButton)
|
||||||
{
|
{
|
||||||
ctrlButton->setModulateGlobalColorAll (style.GlobalColor);
|
ctrlButton->setModulateGlobalColorAll (_Style.GlobalColor);
|
||||||
|
|
||||||
// Translate the tooltip
|
// Translate the tooltip
|
||||||
if (tooltip)
|
if (tooltip)
|
||||||
|
@ -2037,7 +2029,7 @@ namespace NLGUI
|
||||||
checked = (present[MY_HTML_INPUT_CHECKED] && value[MY_HTML_INPUT_CHECKED]);
|
checked = (present[MY_HTML_INPUT_CHECKED] && value[MY_HTML_INPUT_CHECKED]);
|
||||||
|
|
||||||
// Add the ctrl button
|
// Add the ctrl button
|
||||||
CCtrlButton *checkbox = addButton (btnType, name, normal, pushed, over, "", "", tooltip, style);
|
CCtrlButton *checkbox = addButton (btnType, name, normal, pushed, over, "", "", tooltip, _Style);
|
||||||
if (checkbox)
|
if (checkbox)
|
||||||
{
|
{
|
||||||
if (btnType == CCtrlButton::RadioButton)
|
if (btnType == CCtrlButton::RadioButton)
|
||||||
|
@ -2091,11 +2083,7 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
popIfNotEmpty(_FontFamily);
|
popStyle();
|
||||||
popIfNotEmpty(_FontSize);
|
|
||||||
popIfNotEmpty(_TextColor);
|
|
||||||
popIfNotEmpty(_FontWeight);
|
|
||||||
popIfNotEmpty(_FontOblique);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2210,25 +2198,12 @@ namespace NLGUI
|
||||||
break;
|
break;
|
||||||
case HTML_PRE:
|
case HTML_PRE:
|
||||||
{
|
{
|
||||||
CStyleParams style;
|
pushStyle();
|
||||||
style.TextColor = getTextColor();
|
_Style.FontFamily = "monospace";
|
||||||
style.FontFamily = "monospace";
|
|
||||||
style.FontSize = getFontSize();
|
|
||||||
style.FontWeight = getFontWeight();
|
|
||||||
style.FontOblique = getFontOblique();
|
|
||||||
style.Underlined = getFontUnderlined();
|
|
||||||
style.StrikeThrough = getFontStrikeThrough();
|
|
||||||
|
|
||||||
if (present[HTML_PRE_STYLE] && value[HTML_PRE_STYLE])
|
if (present[HTML_PRE_STYLE] && value[HTML_PRE_STYLE])
|
||||||
getStyleParams(value[HTML_PRE_STYLE], style);
|
getStyleParams(value[HTML_PRE_STYLE], _Style);
|
||||||
|
|
||||||
_TextColor.push_back(style.TextColor);
|
|
||||||
_FontFamily.push_back(style.FontFamily);
|
|
||||||
_FontSize.push_back(style.FontSize);
|
|
||||||
_FontWeight.push_back(style.FontWeight);
|
|
||||||
_FontOblique.push_back(style.FontOblique);
|
|
||||||
_FontUnderlined.push_back(style.Underlined);
|
|
||||||
_FontStrikeThrough.push_back(style.StrikeThrough);
|
|
||||||
|
|
||||||
_PRE.push_back(true);
|
_PRE.push_back(true);
|
||||||
}
|
}
|
||||||
|
@ -2274,7 +2249,8 @@ namespace NLGUI
|
||||||
|
|
||||||
if (element_number == HTML_TH)
|
if (element_number == HTML_TH)
|
||||||
{
|
{
|
||||||
_FontWeight.push_back(FONT_WEIGHT_BOLD);
|
pushStyle();
|
||||||
|
_Style.FontWeight = FONT_WEIGHT_BOLD;
|
||||||
// center if not specified otherwise. TD/TH present/value arrays have same indices
|
// center if not specified otherwise. TD/TH present/value arrays have same indices
|
||||||
if (!(present[MY_HTML_TD_ALIGN] && value[MY_HTML_TD_ALIGN]))
|
if (!(present[MY_HTML_TD_ALIGN] && value[MY_HTML_TD_ALIGN]))
|
||||||
_CellParams.back().Align = CGroupCell::Center;
|
_CellParams.back().Align = CGroupCell::Center;
|
||||||
|
@ -2365,20 +2341,14 @@ namespace NLGUI
|
||||||
if (!(_Forms.empty()))
|
if (!(_Forms.empty()))
|
||||||
{
|
{
|
||||||
// not inherited by default, font family defaults to system font
|
// not inherited by default, font family defaults to system font
|
||||||
CStyleParams style;
|
pushStyle();
|
||||||
style.TextColor = TextColor;
|
_Style.TextColor = TextColor;
|
||||||
style.FontWeight = FONT_WEIGHT_NORMAL;
|
_Style.FontWeight = FONT_WEIGHT_NORMAL;
|
||||||
style.FontOblique = false;
|
_Style.FontOblique = false;
|
||||||
style.FontSize = TextFontSize;
|
_Style.FontSize = TextFontSize;
|
||||||
|
|
||||||
if (present[MY_HTML_TEXTAREA_STYLE] && value[MY_HTML_TEXTAREA_STYLE])
|
if (present[MY_HTML_TEXTAREA_STYLE] && value[MY_HTML_TEXTAREA_STYLE])
|
||||||
getStyleParams(value[MY_HTML_TEXTAREA_STYLE], style);
|
getStyleParams(value[MY_HTML_TEXTAREA_STYLE], _Style);
|
||||||
|
|
||||||
_TextColor.push_back(style.TextColor);
|
|
||||||
_FontFamily.push_back(style.FontFamily);
|
|
||||||
_FontSize.push_back(style.FontSize);
|
|
||||||
_FontWeight.push_back(style.FontWeight);
|
|
||||||
_FontOblique.push_back(style.FontOblique);
|
|
||||||
|
|
||||||
// read general property
|
// read general property
|
||||||
string templateName;
|
string templateName;
|
||||||
|
@ -2460,43 +2430,41 @@ namespace NLGUI
|
||||||
break;
|
break;
|
||||||
case HTML_SPAN:
|
case HTML_SPAN:
|
||||||
{
|
{
|
||||||
CStyleParams style;
|
pushStyle();
|
||||||
style.TextColor = getTextColor();
|
|
||||||
style.FontFamily = getFontFamily();
|
|
||||||
style.FontSize = getFontSize();
|
|
||||||
style.FontWeight = getFontWeight();
|
|
||||||
style.FontOblique = getFontOblique();
|
|
||||||
style.Underlined = getFontUnderlined();
|
|
||||||
style.StrikeThrough = getFontStrikeThrough();
|
|
||||||
style.GlobalColor = getGlobalColor();
|
|
||||||
|
|
||||||
if (present[MY_HTML_SPAN_STYLE] && value[MY_HTML_SPAN_STYLE])
|
if (present[MY_HTML_SPAN_STYLE] && value[MY_HTML_SPAN_STYLE])
|
||||||
getStyleParams(value[MY_HTML_SPAN_STYLE], style);
|
getStyleParams(value[MY_HTML_SPAN_STYLE], _Style);
|
||||||
|
|
||||||
_TextColor.push_back(style.TextColor);
|
|
||||||
_FontFamily.push_back(style.FontFamily);
|
|
||||||
_FontSize.push_back(style.FontSize);
|
|
||||||
_FontWeight.push_back(style.FontWeight);
|
|
||||||
_FontOblique.push_back(style.FontOblique);
|
|
||||||
_FontUnderlined.push_back(style.Underlined);
|
|
||||||
_FontStrikeThrough.push_back(style.StrikeThrough);
|
|
||||||
_GlobalColor.push_back(style.GlobalColor);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_DEL:
|
case HTML_DEL:
|
||||||
_FontStrikeThrough.push_back(true);
|
{
|
||||||
|
pushStyle();
|
||||||
|
_Style.StrikeThrough = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_U:
|
case HTML_U:
|
||||||
_FontUnderlined.push_back(true);
|
{
|
||||||
|
pushStyle();
|
||||||
|
_Style.Underlined = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_EM:
|
case HTML_EM:
|
||||||
_FontOblique.push_back(true);
|
{
|
||||||
|
pushStyle();
|
||||||
|
_Style.FontOblique = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_STRONG:
|
case HTML_STRONG:
|
||||||
_FontWeight.push_back(FONT_WEIGHT_BOLD);
|
{
|
||||||
|
pushStyle();
|
||||||
|
_Style.FontWeight = FONT_WEIGHT_BOLD;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_SMALL:
|
case HTML_SMALL:
|
||||||
_FontSize.push_back(getFontSizeSmaller());
|
{
|
||||||
|
pushStyle();
|
||||||
|
_Style.FontSize = getFontSizeSmaller();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_STYLE:
|
case HTML_STYLE:
|
||||||
case HTML_SCRIPT:
|
case HTML_SCRIPT:
|
||||||
|
@ -2521,7 +2489,8 @@ namespace NLGUI
|
||||||
if (!_DL.back().DT)
|
if (!_DL.back().DT)
|
||||||
{
|
{
|
||||||
_DL.back().DT = true;
|
_DL.back().DT = true;
|
||||||
_FontWeight.push_back(FONT_WEIGHT_BOLD);
|
pushStyle();
|
||||||
|
_Style.FontWeight = FONT_WEIGHT_BOLD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_LI)
|
if (!_LI)
|
||||||
|
@ -2542,7 +2511,7 @@ namespace NLGUI
|
||||||
if (_DL.back().DT)
|
if (_DL.back().DT)
|
||||||
{
|
{
|
||||||
_DL.back().DT = false;
|
_DL.back().DT = false;
|
||||||
popIfNotEmpty (_FontWeight);
|
popStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_DL.back().DD)
|
if (!_DL.back().DD)
|
||||||
|
@ -2633,16 +2602,10 @@ namespace NLGUI
|
||||||
_ReadingHeadTag = false;
|
_ReadingHeadTag = false;
|
||||||
break;
|
break;
|
||||||
case HTML_FONT:
|
case HTML_FONT:
|
||||||
popIfNotEmpty (_TextColor);
|
popStyle();
|
||||||
popIfNotEmpty (_FontSize);
|
|
||||||
break;
|
break;
|
||||||
case HTML_A:
|
case HTML_A:
|
||||||
popIfNotEmpty (_FontFamily);
|
popStyle();
|
||||||
popIfNotEmpty (_FontSize);
|
|
||||||
popIfNotEmpty (_TextColor);
|
|
||||||
popIfNotEmpty (_FontUnderlined);
|
|
||||||
popIfNotEmpty (_FontStrikeThrough);
|
|
||||||
popIfNotEmpty (_GlobalColor);
|
|
||||||
popIfNotEmpty (_A);
|
popIfNotEmpty (_A);
|
||||||
popIfNotEmpty (_Link);
|
popIfNotEmpty (_Link);
|
||||||
popIfNotEmpty (_LinkTitle);
|
popIfNotEmpty (_LinkTitle);
|
||||||
|
@ -2654,22 +2617,14 @@ namespace NLGUI
|
||||||
case HTML_H4:
|
case HTML_H4:
|
||||||
case HTML_H5:
|
case HTML_H5:
|
||||||
case HTML_H6:
|
case HTML_H6:
|
||||||
popIfNotEmpty (_FontSize);
|
popStyle();
|
||||||
popIfNotEmpty (_TextColor);
|
|
||||||
popIfNotEmpty (_GlobalColor);
|
|
||||||
endParagraph();
|
endParagraph();
|
||||||
break;
|
break;
|
||||||
case HTML_P:
|
case HTML_P:
|
||||||
endParagraph();
|
endParagraph();
|
||||||
break;
|
break;
|
||||||
case HTML_PRE:
|
case HTML_PRE:
|
||||||
popIfNotEmpty (_FontFamily);
|
popStyle();
|
||||||
popIfNotEmpty (_FontSize);
|
|
||||||
popIfNotEmpty (_FontWeight);
|
|
||||||
popIfNotEmpty (_FontOblique);
|
|
||||||
popIfNotEmpty (_TextColor);
|
|
||||||
popIfNotEmpty (_FontUnderlined);
|
|
||||||
popIfNotEmpty (_FontStrikeThrough);
|
|
||||||
popIfNotEmpty (_PRE);
|
popIfNotEmpty (_PRE);
|
||||||
break;
|
break;
|
||||||
case HTML_DIV:
|
case HTML_DIV:
|
||||||
|
@ -2692,7 +2647,7 @@ namespace NLGUI
|
||||||
// Add a cell
|
// Add a cell
|
||||||
break;
|
break;
|
||||||
case HTML_TH:
|
case HTML_TH:
|
||||||
popIfNotEmpty (_FontWeight);
|
popStyle();
|
||||||
// no break;
|
// no break;
|
||||||
case HTML_TD:
|
case HTML_TD:
|
||||||
popIfNotEmpty (_CellParams);
|
popIfNotEmpty (_CellParams);
|
||||||
|
@ -2717,11 +2672,7 @@ namespace NLGUI
|
||||||
_Forms.back().Entries.push_back (entry);
|
_Forms.back().Entries.push_back (entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
popIfNotEmpty (_FontFamily);
|
popStyle();
|
||||||
popIfNotEmpty (_FontSize);
|
|
||||||
popIfNotEmpty (_FontWeight);
|
|
||||||
popIfNotEmpty (_FontOblique);
|
|
||||||
popIfNotEmpty (_TextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
popIfNotEmpty (_PRE);
|
popIfNotEmpty (_PRE);
|
||||||
|
@ -2843,7 +2794,7 @@ namespace NLGUI
|
||||||
// unclosed DT
|
// unclosed DT
|
||||||
if (_DL.back().DT)
|
if (_DL.back().DT)
|
||||||
{
|
{
|
||||||
popIfNotEmpty (_FontWeight);
|
popStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
// unclosed DD
|
// unclosed DD
|
||||||
|
@ -2859,7 +2810,7 @@ namespace NLGUI
|
||||||
if (!_DL.empty())
|
if (!_DL.empty())
|
||||||
{
|
{
|
||||||
_DL.back().DT = false;
|
_DL.back().DT = false;
|
||||||
popIfNotEmpty (_FontWeight);
|
popStyle();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_DD:
|
case HTML_DD:
|
||||||
|
@ -2874,29 +2825,22 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HTML_SPAN:
|
case HTML_SPAN:
|
||||||
popIfNotEmpty (_FontFamily);
|
popStyle();
|
||||||
popIfNotEmpty (_FontSize);
|
|
||||||
popIfNotEmpty (_FontWeight);
|
|
||||||
popIfNotEmpty (_FontOblique);
|
|
||||||
popIfNotEmpty (_TextColor);
|
|
||||||
popIfNotEmpty (_FontUnderlined);
|
|
||||||
popIfNotEmpty (_FontStrikeThrough);
|
|
||||||
popIfNotEmpty (_GlobalColor);
|
|
||||||
break;
|
break;
|
||||||
case HTML_DEL:
|
case HTML_DEL:
|
||||||
popIfNotEmpty (_FontStrikeThrough);
|
popStyle();
|
||||||
break;
|
break;
|
||||||
case HTML_U:
|
case HTML_U:
|
||||||
popIfNotEmpty (_FontUnderlined);
|
popStyle();
|
||||||
break;
|
break;
|
||||||
case HTML_EM:
|
case HTML_EM:
|
||||||
popIfNotEmpty (_FontOblique);
|
popStyle();
|
||||||
break;
|
break;
|
||||||
case HTML_STRONG:
|
case HTML_STRONG:
|
||||||
popIfNotEmpty (_FontWeight);
|
popStyle();
|
||||||
break;
|
break;
|
||||||
case HTML_SMALL:
|
case HTML_SMALL:
|
||||||
popIfNotEmpty (_FontSize);
|
popStyle();
|
||||||
break;
|
break;
|
||||||
case HTML_STYLE:
|
case HTML_STYLE:
|
||||||
case HTML_SCRIPT:
|
case HTML_SCRIPT:
|
||||||
|
@ -4325,7 +4269,7 @@ namespace NLGUI
|
||||||
|
|
||||||
// Text added ?
|
// Text added ?
|
||||||
bool added = false;
|
bool added = false;
|
||||||
bool embolden = getFontWeight() >= FONT_WEIGHT_BOLD;
|
bool embolden = _Style.FontWeight >= FONT_WEIGHT_BOLD;
|
||||||
|
|
||||||
// Number of child in this paragraph
|
// Number of child in this paragraph
|
||||||
if (_CurrentViewLink)
|
if (_CurrentViewLink)
|
||||||
|
@ -4333,15 +4277,15 @@ namespace NLGUI
|
||||||
bool skipLine = !_CurrentViewLink->getText().empty() && *(_CurrentViewLink->getText().rbegin()) == (ucchar) '\n';
|
bool skipLine = !_CurrentViewLink->getText().empty() && *(_CurrentViewLink->getText().rbegin()) == (ucchar) '\n';
|
||||||
// Compatible with current parameters ?
|
// Compatible with current parameters ?
|
||||||
if (!skipLine &&
|
if (!skipLine &&
|
||||||
(getTextColor() == _CurrentViewLink->getColor()) &&
|
(_Style.TextColor == _CurrentViewLink->getColor()) &&
|
||||||
(getFontFamily() == _CurrentViewLink->getFontName()) &&
|
(_Style.FontFamily == _CurrentViewLink->getFontName()) &&
|
||||||
(getFontSize() == (uint)_CurrentViewLink->getFontSize()) &&
|
(_Style.FontSize == (uint)_CurrentViewLink->getFontSize()) &&
|
||||||
(getFontUnderlined() == _CurrentViewLink->getUnderlined()) &&
|
(_Style.Underlined == _CurrentViewLink->getUnderlined()) &&
|
||||||
(getFontStrikeThrough() == _CurrentViewLink->getStrikeThrough()) &&
|
(_Style.StrikeThrough == _CurrentViewLink->getStrikeThrough()) &&
|
||||||
(embolden == _CurrentViewLink->getEmbolden()) &&
|
(embolden == _CurrentViewLink->getEmbolden()) &&
|
||||||
(getFontOblique() == _CurrentViewLink->getOblique()) &&
|
(_Style.FontOblique == _CurrentViewLink->getOblique()) &&
|
||||||
(getLink() == _CurrentViewLink->Link) &&
|
(getLink() == _CurrentViewLink->Link) &&
|
||||||
(getGlobalColor() == _CurrentViewLink->getModulateGlobalColor()))
|
(_Style.GlobalColor == _CurrentViewLink->getModulateGlobalColor()))
|
||||||
{
|
{
|
||||||
// Concat the text
|
// Concat the text
|
||||||
_CurrentViewLink->setText(_CurrentViewLink->getText()+tmpStr);
|
_CurrentViewLink->setText(_CurrentViewLink->getText()+tmpStr);
|
||||||
|
@ -4401,16 +4345,16 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newLink->setText(tmpStr);
|
newLink->setText(tmpStr);
|
||||||
newLink->setColor(getTextColor());
|
newLink->setColor(_Style.TextColor);
|
||||||
newLink->setFontName(getFontFamily());
|
newLink->setFontName(_Style.FontFamily);
|
||||||
newLink->setFontSize(getFontSize());
|
newLink->setFontSize(_Style.FontSize);
|
||||||
newLink->setEmbolden(embolden);
|
newLink->setEmbolden(embolden);
|
||||||
newLink->setOblique(getFontOblique());
|
newLink->setOblique(_Style.FontOblique);
|
||||||
newLink->setUnderlined(getFontUnderlined());
|
newLink->setUnderlined(_Style.Underlined);
|
||||||
newLink->setStrikeThrough(getFontStrikeThrough());
|
newLink->setStrikeThrough(_Style.StrikeThrough);
|
||||||
newLink->setMultiLineSpace((uint)((float)getFontSize()*LineSpaceFontFactor));
|
newLink->setMultiLineSpace((uint)((float)(_Style.FontSize)*LineSpaceFontFactor));
|
||||||
newLink->setMultiLine(true);
|
newLink->setMultiLine(true);
|
||||||
newLink->setModulateGlobalColor(getGlobalColor());
|
newLink->setModulateGlobalColor(_Style.GlobalColor);
|
||||||
// newLink->setLineAtBottom (true);
|
// newLink->setLineAtBottom (true);
|
||||||
|
|
||||||
registerAnchor(newLink);
|
registerAnchor(newLink);
|
||||||
|
@ -4517,15 +4461,15 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
// Not added ?
|
// Not added ?
|
||||||
std::vector<std::pair<std::string,std::string> > templateParams;
|
std::vector<std::pair<std::string,std::string> > templateParams;
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("w", toString (cols*getFontSize())));
|
templateParams.push_back (std::pair<std::string,std::string> ("w", toString (cols*_Style.FontSize)));
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("id", name));
|
templateParams.push_back (std::pair<std::string,std::string> ("id", name));
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("prompt", ""));
|
templateParams.push_back (std::pair<std::string,std::string> ("prompt", ""));
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("multiline", multiLine?"true":"false"));
|
templateParams.push_back (std::pair<std::string,std::string> ("multiline", multiLine?"true":"false"));
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("fontsize", toString (getFontSize())));
|
templateParams.push_back (std::pair<std::string,std::string> ("fontsize", toString (_Style.FontSize)));
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("color", getTextColor().toString()));
|
templateParams.push_back (std::pair<std::string,std::string> ("color", _Style.TextColor.toString()));
|
||||||
if (getFontWeight() >= FONT_WEIGHT_BOLD)
|
if (_Style.FontWeight >= FONT_WEIGHT_BOLD)
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("fontweight", "bold"));
|
templateParams.push_back (std::pair<std::string,std::string> ("fontweight", "bold"));
|
||||||
if (getFontOblique())
|
if (_Style.FontOblique)
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("fontstyle", "oblique"));
|
templateParams.push_back (std::pair<std::string,std::string> ("fontstyle", "oblique"));
|
||||||
if (multiLine)
|
if (multiLine)
|
||||||
templateParams.push_back (std::pair<std::string,std::string> ("multi_min_line", toString(rows)));
|
templateParams.push_back (std::pair<std::string,std::string> ("multi_min_line", toString(rows)));
|
||||||
|
@ -4767,13 +4711,6 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
_Paragraph = NULL;
|
_Paragraph = NULL;
|
||||||
_PRE.clear();
|
_PRE.clear();
|
||||||
_TextColor.clear();
|
|
||||||
_GlobalColor.clear();
|
|
||||||
_FontSize.clear();
|
|
||||||
_FontWeight.clear();
|
|
||||||
_FontOblique.clear();
|
|
||||||
_FontUnderlined.clear();
|
|
||||||
_FontStrikeThrough.clear();
|
|
||||||
_Indent.clear();
|
_Indent.clear();
|
||||||
_LI = false;
|
_LI = false;
|
||||||
_UL.clear();
|
_UL.clear();
|
||||||
|
@ -4797,6 +4734,11 @@ namespace NLGUI
|
||||||
_IgnoreHeadTag = false;
|
_IgnoreHeadTag = false;
|
||||||
_IgnoreBaseUrlTag = false;
|
_IgnoreBaseUrlTag = false;
|
||||||
|
|
||||||
|
// reset style
|
||||||
|
_StyleDefault = CStyleParams();
|
||||||
|
_Style = _StyleDefault;
|
||||||
|
_StyleParams.clear();
|
||||||
|
|
||||||
// TR
|
// TR
|
||||||
|
|
||||||
paragraphChange ();
|
paragraphChange ();
|
||||||
|
@ -6118,6 +6060,8 @@ namespace NLGUI
|
||||||
// style.StrikeThrough; // text-decoration: line-through; text-decoration-line: line-through;
|
// style.StrikeThrough; // text-decoration: line-through; text-decoration-line: line-through;
|
||||||
void CGroupHTML::getStyleParams(const std::string &styleString, CStyleParams &style, bool inherit)
|
void CGroupHTML::getStyleParams(const std::string &styleString, CStyleParams &style, bool inherit)
|
||||||
{
|
{
|
||||||
|
const CStyleParams current = _Style;
|
||||||
|
|
||||||
float tmpf;
|
float tmpf;
|
||||||
TStyle styles = parseStyle(styleString);
|
TStyle styles = parseStyle(styleString);
|
||||||
TStyle::iterator it;
|
TStyle::iterator it;
|
||||||
|
@ -6126,7 +6070,7 @@ namespace NLGUI
|
||||||
if (it->first == "font-size")
|
if (it->first == "font-size")
|
||||||
{
|
{
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
style.FontSize = getFontSize();
|
style.FontSize = current.FontSize;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float tmp;
|
float tmp;
|
||||||
|
@ -6140,7 +6084,7 @@ namespace NLGUI
|
||||||
if (it->first == "font-style")
|
if (it->first == "font-style")
|
||||||
{
|
{
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
style.FontOblique = getFontOblique();
|
style.FontOblique = current.FontOblique;
|
||||||
else
|
else
|
||||||
if (it->second == "italic" || it->second == "oblique")
|
if (it->second == "italic" || it->second == "oblique")
|
||||||
style.FontOblique = true;
|
style.FontOblique = true;
|
||||||
|
@ -6149,7 +6093,7 @@ namespace NLGUI
|
||||||
if (it->first == "font-family")
|
if (it->first == "font-family")
|
||||||
{
|
{
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
style.FontFamily = getFontFamily();
|
style.FontFamily = current.FontFamily;
|
||||||
else
|
else
|
||||||
if (it->second == "monospace")
|
if (it->second == "monospace")
|
||||||
style.FontFamily = "monospace";
|
style.FontFamily = "monospace";
|
||||||
|
@ -6162,7 +6106,7 @@ namespace NLGUI
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight
|
// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight
|
||||||
uint weight = 400;
|
uint weight = 400;
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
weight = getFontWeight();
|
weight = current.FontWeight;
|
||||||
else
|
else
|
||||||
if (it->second == "normal")
|
if (it->second == "normal")
|
||||||
weight = 400;
|
weight = 400;
|
||||||
|
@ -6173,7 +6117,7 @@ namespace NLGUI
|
||||||
if (it->second == "lighter")
|
if (it->second == "lighter")
|
||||||
{
|
{
|
||||||
const uint lighter[] = {100, 100, 100, 100, 100, 400, 400, 700, 700};
|
const uint lighter[] = {100, 100, 100, 100, 100, 400, 400, 700, 700};
|
||||||
uint index = getFontWeight() / 100 - 1;
|
uint index = current.FontWeight / 100 - 1;
|
||||||
clamp(index, 1u, 9u);
|
clamp(index, 1u, 9u);
|
||||||
weight = lighter[index-1];
|
weight = lighter[index-1];
|
||||||
}
|
}
|
||||||
|
@ -6181,7 +6125,7 @@ namespace NLGUI
|
||||||
if (it->second == "bolder")
|
if (it->second == "bolder")
|
||||||
{
|
{
|
||||||
const uint bolder[] = {400, 400, 400, 700, 700, 900, 900, 900, 900};
|
const uint bolder[] = {400, 400, 400, 700, 700, 900, 900, 900, 900};
|
||||||
uint index = getFontWeight() / 100 + 1;
|
uint index = current.FontWeight / 100 + 1;
|
||||||
clamp(index, 1u, 9u);
|
clamp(index, 1u, 9u);
|
||||||
weight = bolder[index-1];
|
weight = bolder[index-1];
|
||||||
}
|
}
|
||||||
|
@ -6197,7 +6141,7 @@ namespace NLGUI
|
||||||
else
|
else
|
||||||
if (it->first == "color")
|
if (it->first == "color")
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
style.TextColor = getTextColor();
|
style.TextColor = current.TextColor;
|
||||||
else
|
else
|
||||||
scanHTMLColor(it->second.c_str(), style.TextColor);
|
scanHTMLColor(it->second.c_str(), style.TextColor);
|
||||||
else
|
else
|
||||||
|
@ -6224,7 +6168,7 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
bool b;
|
bool b;
|
||||||
if (it->second == "inherit")
|
if (it->second == "inherit")
|
||||||
style.GlobalColor = getGlobalColor();
|
style.GlobalColor = current.GlobalColor;
|
||||||
else
|
else
|
||||||
if (fromString(it->second, b))
|
if (fromString(it->second, b))
|
||||||
style.GlobalColor = b;
|
style.GlobalColor = b;
|
||||||
|
@ -6232,8 +6176,8 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
if (inherit)
|
if (inherit)
|
||||||
{
|
{
|
||||||
style.Underlined = getFontUnderlined() || style.Underlined;
|
style.Underlined = current.Underlined || style.Underlined;
|
||||||
style.StrikeThrough = getFontStrikeThrough() || style.StrikeThrough;
|
style.StrikeThrough = current.StrikeThrough || style.StrikeThrough;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue