diff --git a/docs/changes.txt b/docs/changes.txt index 52e2f71b57..1e45b1e7c7 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -1,4 +1,4 @@ -------------------------------------------------------------------------------- +------------------------------------------------------------------------------- wxWidgets Change Log ------------------------------------------------------------------------------- @@ -427,10 +427,14 @@ All (GUI): Borders around property grid are now native for consistency. - Added wxXmlResource::LoadObjectRecursively(). - Added wxColour::Set/GetRGB() and Set/GetRGBA() methods (Marcel Haß). +- wxRTC: added wxRICHTEXT_HANDLER_USE_CSS flag for HTML handler to use CSS + where possible. +- wxRTC: corrected centring and right-justification spacing. GTK: - wxRadioBox constructor uses default consistent with other ports now. +- Corrected themed border display. MSW: @@ -442,6 +446,9 @@ MSW: - Allow customizing wxStandardPaths logic for program directory determination. - Use time in wxDateTime <-> SYSTEMTIME conversion (troelsk). - Setting colours for wxSpinCtrl now works. +- Worked around child window and caret positioning bug (in Windows) when using + wxBORDER_THEME in a container window. +- Suppressed spurious character event for decimal key in numeric keypad. i18n: diff --git a/include/wx/richtext/richtexthtml.h b/include/wx/richtext/richtexthtml.h index dee3f7091f..86cb17af69 100644 --- a/include/wx/richtext/richtexthtml.h +++ b/include/wx/richtext/richtexthtml.h @@ -18,6 +18,9 @@ #include "wx/richtext/richtextbuffer.h" +// Use CSS styles where applicable, otherwise use non-CSS workarounds +#define wxRICHTEXT_HANDLER_USE_CSS 0x1000 + /*! * wxRichTextHTMLHandler */ diff --git a/interface/wx/richtext/richtexthtml.h b/interface/wx/richtext/richtexthtml.h index fba16366be..95b89bc1c5 100644 --- a/interface/wx/richtext/richtexthtml.h +++ b/interface/wx/richtext/richtexthtml.h @@ -49,7 +49,8 @@ - wxRICHTEXT_HANDLER_NO_HEADER_FOOTER Don't include header and footer tags (HTML, HEAD, BODY), so that the HTML can be used as part of a larger document. - + - wxRICHTEXT_HANDLER_USE_CSS + Use CSS where possible, otherwise use workarounds that will show in wxHtmlWindow. @library{wxrichtext} @category{richtext} diff --git a/src/richtext/richtexthtml.cpp b/src/richtext/richtexthtml.cpp index 95f6c4754d..6079da35c5 100644 --- a/src/richtext/richtexthtml.cpp +++ b/src/richtext/richtexthtml.cpp @@ -101,33 +101,33 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& #else wxTextOutputStream str(stream, wxEOL_NATIVE); #endif - + wxTextAttr currentParaStyle = buffer->GetAttributes(); wxTextAttr currentCharStyle = buffer->GetAttributes(); - + if ((GetFlags() & wxRICHTEXT_HANDLER_NO_HEADER_FOOTER) == 0) str << wxT("
\n"); - + OutputFont(currentParaStyle, str); - + m_font = false; m_inTable = false; - + m_indents.Clear(); m_listTypes.Clear(); - + wxRichTextObjectList::compatibility_iterator node = buffer->GetChildren().GetFirst(); while (node) { wxRichTextParagraph* para = wxDynamicCast(node->GetData(), wxRichTextParagraph); wxASSERT (para != NULL); - + if (para) { wxTextAttr paraStyle(para->GetCombinedAttributes()); - + BeginParagraphFormatting(currentParaStyle, paraStyle, str); - + wxRichTextObjectList::compatibility_iterator node2 = para->GetChildren().GetFirst(); while (node2) { @@ -137,41 +137,41 @@ bool wxRichTextHTMLHandler::DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& { wxTextAttr charStyle(para->GetCombinedAttributes(obj->GetAttributes())); BeginCharacterFormatting(currentCharStyle, charStyle, paraStyle, str); - + wxString text = textObj->GetText(); - + if (charStyle.HasTextEffects() && (charStyle.GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)) text.MakeUpper(); - + wxString toReplace = wxRichTextLineBreakChar; text.Replace(toReplace, wxT("0.0)) + { + styleStr += wxString::Format(wxT("margin-left: %.2fmm; "), indentLeftMM); + } + float indentRightMM = thisStyle.GetRightIndent()/10.0; + if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) && thisStyle.HasRightIndent() && (indentRightMM > 0.0)) + { + styleStr += wxString::Format(wxT("margin-right: %.2fmm; "), indentRightMM); + } + // First line indentation + float firstLineIndentMM = - thisStyle.GetLeftSubIndent() / 10.0; + if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) && (firstLineIndentMM > 0.0)) + { + styleStr += wxString::Format(wxT("text-indent: %.2fmm; "), firstLineIndentMM); + } + + if (!styleStr.IsEmpty()) + str << wxT(" style=\"") << styleStr << wxT("\""); str << wxT(">"); - // Use a table - int indentTenthsMM = thisStyle.GetLeftIndent() + thisStyle.GetLeftSubIndent(); // TODO: convert to pixels - int indentPixels = indentTenthsMM/4; - str << wxString::Format(wxT("
"), indentPixels);
+ int indentPixels = indentLeftMM*10/4;
+
+ if ((GetFlags() & wxRICHTEXT_HANDLER_USE_CSS) == 0)
+ {
+ // Use a table to do indenting if we don't have CSS
+ str << wxString::Format(wxT("
|