]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextbuffer.cpp
update button style to include BS_MULTILINE when a multiline label is set
[wxWidgets.git] / src / richtext / richtextbuffer.cpp
index fd6a7c8423831c986e4326da0f9352c593d0c78f..b77bca81bfd2412846053d31e1170295d0848665 100644 (file)
@@ -1429,8 +1429,6 @@ wxString wxRichTextParagraphLayoutBox::GetTextForRange(const wxRichTextRange& ra
         wxRichTextObject* child = node->GetData();
         if (!child->GetRange().IsOutside(range))
         {
-//            if (lineCount > 0)
-//                text += wxT("\n");
             wxRichTextRange childRange = range;
             childRange.LimitTo(child->GetRange());
 
@@ -1438,7 +1436,7 @@ wxString wxRichTextParagraphLayoutBox::GetTextForRange(const wxRichTextRange& ra
 
             text += childText;
 
-            if (childRange.GetEnd() == child->GetRange().GetEnd())
+            if ((childRange.GetEnd() == child->GetRange().GetEnd()) && node->GetNext())
                 text += wxT("\n");
 
             lineCount ++;
@@ -3152,7 +3150,7 @@ bool wxRichTextParagraph::Layout(wxDC& dc, const wxRect& rect, int style)
     int lineSpacing = 0;
 
     // Let's assume line spacing of 10 is normal, 15 is 1.5, 20 is 2, etc.
-    if (attr.GetLineSpacing() > 10 && attr.GetFont().Ok())
+    if (attr.GetLineSpacing() != 10 && attr.GetFont().Ok())
     {
         dc.SetFont(attr.GetFont());
         lineSpacing = (ConvertTenthsMMToPixels(dc, dc.GetCharHeight()) * attr.GetLineSpacing())/10;
@@ -3500,7 +3498,7 @@ bool wxRichTextParagraph::GetRangeSize(const wxRichTextRange& range, wxSize& siz
                 rangeToUse.LimitTo(child->GetRange());
                 int childDescent = 0;
 
-                if (child->GetRangeSize(rangeToUse, childSize, childDescent, dc, flags, position))
+                if (child->GetRangeSize(rangeToUse, childSize, childDescent, dc, flags, wxPoint(position.x + sz.x, position.y)))
                 {
                     sz.y = wxMax(sz.y, childSize.y);
                     sz.x += childSize.x;
@@ -3545,7 +3543,7 @@ bool wxRichTextParagraph::GetRangeSize(const wxRichTextRange& range, wxSize& siz
 
                         wxSize childSize;
                         int childDescent = 0;
-                        if (child->GetRangeSize(rangeToUse, childSize, childDescent, dc, flags, position))
+                        if (child->GetRangeSize(rangeToUse, childSize, childDescent, dc, flags, wxPoint(position.x + sz.x, position.y)))
                         {
                             lineSize.y = wxMax(lineSize.y, childSize.y);
                             lineSize.x += childSize.x;
@@ -3921,9 +3919,11 @@ bool wxRichTextParagraph::FindWrapPosition(const wxRichTextRange& range, wxDC& d
         else
         {
             int spacePos = plainText.Find(wxT(' '), true);
-            if (spacePos != wxNOT_FOUND)
+            int tabPos = plainText.Find(wxT('\t'), true);
+            int pos = wxMax(spacePos, tabPos);
+            if (pos != wxNOT_FOUND)
             {
-                int positionsFromEndOfString = plainText.length() - spacePos - 1;
+                int positionsFromEndOfString = plainText.length() - pos - 1;
                 breakPosition = breakPosition - positionsFromEndOfString;
             }
         }
@@ -4329,19 +4329,20 @@ bool wxRichTextPlainText::DrawTabbedString(wxDC& dc, const wxTextAttrEx& attr, c
         dc.SetBrush(*wxBLACK_BRUSH);
         dc.SetPen(*wxBLACK_PEN);
         dc.SetTextForeground(*wxWHITE);
+        dc.SetBackgroundMode(wxTRANSPARENT);
     }
     else
     {
         dc.SetTextForeground(attr.GetTextColour());
-    }
 
-    if (attr.HasFlag(wxTEXT_ATTR_BACKGROUND_COLOUR) && attr.GetBackgroundColour().IsOk())
-    {
-        dc.SetBackgroundMode(wxSOLID);
-        dc.SetTextBackground(attr.GetBackgroundColour());
+        if (attr.HasFlag(wxTEXT_ATTR_BACKGROUND_COLOUR) && attr.GetBackgroundColour().IsOk())
+        {
+            dc.SetBackgroundMode(wxSOLID);
+            dc.SetTextBackground(attr.GetBackgroundColour());
+        }
+        else
+            dc.SetBackgroundMode(wxTRANSPARENT);
     }
-    else
-        dc.SetBackgroundMode(wxTRANSPARENT);
 
     while (hasTabs)
     {
@@ -5902,7 +5903,7 @@ public:
         wxRichTextBuffer::InitStandardHandlers();
         wxRichTextParagraph::InitDefaultTabs();
         return true;
-    };
+    }
     void OnExit()
     {
         wxRichTextBuffer::CleanUpHandlers();
@@ -5910,7 +5911,7 @@ public:
         wxRichTextParagraph::ClearDefaultTabs();
         wxRichTextCtrl::ClearAvailableFontNames();
         wxRichTextBuffer::SetRenderer(NULL);
-    };
+    }
 };
 
 IMPLEMENT_DYNAMIC_CLASS(wxRichTextModule, wxModule)
@@ -7899,7 +7900,7 @@ wxTextAttrEx wxTextAttrEx::CombineEx(const wxTextAttrEx& attr,
 
 IMPLEMENT_CLASS(wxRichTextFileHandler, wxObject)
 
-#if wxUSE_STREAMS
+#if wxUSE_FFILE && wxUSE_STREAMS
 bool wxRichTextFileHandler::LoadFile(wxRichTextBuffer *buffer, const wxString& filename)
 {
     wxFFileInputStream stream(filename);
@@ -7917,7 +7918,7 @@ bool wxRichTextFileHandler::SaveFile(wxRichTextBuffer *buffer, const wxString& f
 
     return false;
 }
-#endif // wxUSE_STREAMS
+#endif // wxUSE_FFILE && wxUSE_STREAMS
 
 /// Can we handle this filename (if using files)? By default, checks the extension.
 bool wxRichTextFileHandler::CanHandle(const wxString& filename) const
@@ -8172,16 +8173,33 @@ bool wxRichTextImageBlock::Load(wxImage& image)
 // Write data in hex to a stream
 bool wxRichTextImageBlock::WriteHex(wxOutputStream& stream)
 {
-    wxString hex;
-    int i;
-    for (i = 0; i < (int) m_dataSize; i++)
+    const int bufSize = 512;
+    char buf[bufSize+1];
+
+    int left = m_dataSize;
+    int n, i, j;
+    j = 0;
+    while (left > 0)
     {
-        hex = wxDecToHex(m_data[i]);
-        wxCharBuffer buf = hex.ToAscii();
+        if (left*2 > bufSize)
+        {
+            n = bufSize; left -= (bufSize/2);
+        }
+        else
+        {
+            n = left*2; left = 0;
+        }
 
-        stream.Write((const char*) buf, hex.length());
-    }
+        char* b = buf;
+        for (i = 0; i < (n/2); i++)
+        {
+            wxDecToHex(m_data[j], b, b+1);
+            b += 2; j ++;
+        }
 
+        buf[n] = 0;
+        stream.Write((const char*) buf, n);
+    }
     return true;
 }
 
@@ -8193,13 +8211,13 @@ bool wxRichTextImageBlock::ReadHex(wxInputStream& stream, int length, int imageT
     if (m_data)
         delete[] m_data;
 
-    wxString str(wxT("  "));
+    wxChar str[2];
     m_data = new unsigned char[dataSize];
     int i;
     for (i = 0; i < dataSize; i ++)
     {
-        str[0] = stream.GetC();
-        str[1] = stream.GetC();
+        str[0] = (char)stream.GetC();
+        str[1] = (char)stream.GetC();
 
         m_data[i] = (unsigned char)wxHexToDec(str);
     }