]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed a few bugs.
authorKarsten Ballüder <ballueder@usa.net>
Fri, 11 Jun 1999 09:21:49 +0000 (09:21 +0000)
committerKarsten Ballüder <ballueder@usa.net>
Fri, 11 Jun 1999 09:21:49 +0000 (09:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2758 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/richedit/wxllist.cpp

index 40f8b756a14830c7bc79be258c06f0c4b9864830..7ae280d6d8bdaaa2fa95bafacae97e811abe58e9 100644 (file)
@@ -1949,16 +1949,22 @@ wxLayoutList::LineBreak(void)
 
    m_CursorLine = m_CursorLine->Break(m_CursorPos.x, this);
    if(setFirst) // we were at beginning of first line
-      m_FirstLine = m_CursorLine->GetPreviousLine();
+      m_FirstLine = m_CursorLine;
+   wxASSERT(m_FirstLine);
    if(m_CursorPos.x != 0)
       m_CursorPos.y++;
    m_CursorPos.x = 0;
 
-   wxLayoutLine *prev = m_CursorLine->GetPreviousLine();
-   wxCHECK_MSG(prev, false, "just broke the line, where is the previous one?");
-
-   height += prev->GetHeight();
 
+   // The following code will produce a height which is guaranteed to
+   // be too high: old lineheight + the height of both new lines.
+   // We can probably drop the old line height and start with height = 
+   // 0. FIXME
+   wxLayoutLine *prev = m_CursorLine->GetPreviousLine();
+   if(prev)
+      height += prev->GetHeight();
+   height += m_CursorLine->GetHeight();
+   
    m_movedCursor = true;
 
    SetUpdateRect(position);
@@ -2156,15 +2162,24 @@ wxLayoutList::Layout(wxDC &dc, CoordType bottom, bool forceAll,
          // The following Layout() calls will update our
          // m_CurrentStyleInfo if needed.
          if(line == m_CursorLine)
+         {
             line->Layout(dc, this,
                          (wxPoint *)&m_CursorScreenPos,
                          (wxPoint *)&m_CursorSize,
                          &m_CursorStyleInfo,
                          m_CursorPos.x);
-         if(cpos && line->GetLineNumber() == cpos->y)
-            line->Layout(dc, this,
-                         cpos,
-                         csize, NULL, cpos->x);
+            // we cannot layout the line twice, so copy the coords:
+            if(cpos && line ->GetLineNumber() == cpos->y)
+            {
+               *cpos = m_CursorScreenPos;
+               *csize = m_CursorSize;
+            }
+         }
+         else
+            if(cpos && line->GetLineNumber() == cpos->y)
+               line->Layout(dc, this,
+                            cpos,
+                            csize, NULL, cpos->x);
          else
             line->Layout(dc, this);
          // little condition to speed up redrawing:
@@ -2238,11 +2253,7 @@ wxLayoutList::Draw(wxDC &dc,
          }
          line->Draw(dc, this, offset);
       }
-#if 0
-         else
-         line->Layout(dc, this);
-#endif
-         // little condition to speed up redrawing:
+      // little condition to speed up redrawing:
       if(bottom != -1 && line->GetPosition().y > bottom) break;
       line = line->GetNextLine();
    }