]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlcell.cpp
set string length to 0 in AllocBeforeWrite() just to be tidy (replaces patch 1123226)
[wxWidgets.git] / src / html / htmlcell.cpp
index 5ea2d4b802b1a2aa721d619f9e28e1473e36317c..c8be065e51c8161a28c463f70e2f99115748a274 100644 (file)
@@ -902,52 +902,60 @@ void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2,
     dc.SetPen(*wxRED_PEN);
     dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
 #endif
     dc.SetPen(*wxRED_PEN);
     dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
 #endif
-    // container visible, draw it:
-    if ((y + m_PosY <= view_y2) && (y + m_PosY + m_Height > view_y1))
+            
+    int xlocal = x + m_PosX;
+    int ylocal = y + m_PosY;
+
+    if (m_UseBkColour)
     {
     {
-        if (m_UseBkColour)
-        {
-            wxBrush myb = wxBrush(m_BkColour, wxSOLID);
+        wxBrush myb = wxBrush(m_BkColour, wxSOLID);
 
 
-            int real_y1 = mMax(y + m_PosY, view_y1);
-            int real_y2 = mMin(y + m_PosY + m_Height - 1, view_y2);
+        int real_y1 = mMax(ylocal, view_y1);
+        int real_y2 = mMin(ylocal + m_Height - 1, view_y2);
 
 
-            dc.SetBrush(myb);
-            dc.SetPen(*wxTRANSPARENT_PEN);
-            dc.DrawRectangle(x + m_PosX, real_y1, m_Width, real_y2 - real_y1 + 1);
-        }
+        dc.SetBrush(myb);
+        dc.SetPen(*wxTRANSPARENT_PEN);
+        dc.DrawRectangle(xlocal, real_y1, m_Width, real_y2 - real_y1 + 1);
+    }
 
 
-        if (m_UseBorder)
-        {
-            wxPen mypen1(m_BorderColour1, 1, wxSOLID);
-            wxPen mypen2(m_BorderColour2, 1, wxSOLID);
-
-            dc.SetPen(mypen1);
-            dc.DrawLine(x + m_PosX, y + m_PosY, x + m_PosX, y + m_PosY + m_Height - 1);
-            dc.DrawLine(x + m_PosX, y + m_PosY, x + m_PosX + m_Width, y + m_PosY);
-            dc.SetPen(mypen2);
-            dc.DrawLine(x + m_PosX + m_Width - 1, y + m_PosY, x + m_PosX +  m_Width - 1, y + m_PosY + m_Height - 1);
-            dc.DrawLine(x + m_PosX, y + m_PosY + m_Height - 1, x + m_PosX + m_Width, y + m_PosY + m_Height - 1);
-        }
+    if (m_UseBorder)
+    {
+        wxPen mypen1(m_BorderColour1, 1, wxSOLID);
+        wxPen mypen2(m_BorderColour2, 1, wxSOLID);
+
+        dc.SetPen(mypen1);
+        dc.DrawLine(xlocal, ylocal, xlocal, ylocal + m_Height - 1);
+        dc.DrawLine(xlocal, ylocal, xlocal + m_Width, ylocal);
+        dc.SetPen(mypen2);
+        dc.DrawLine(xlocal + m_Width - 1, ylocal, xlocal +  m_Width - 1, ylocal + m_Height - 1);
+        dc.DrawLine(xlocal, ylocal + m_Height - 1, xlocal + m_Width, ylocal + m_Height - 1);
+    }
 
 
-        if (m_Cells)
+    if (m_Cells)
+    {
+        // draw container's contents:
+        for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext())
         {
         {
-            // draw container's contents:
-            for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext())
+            
+            // optimize drawing: don't render off-screen content:
+            if ((ylocal + cell->GetPosY() <= view_y2) &&
+                (ylocal + cell->GetPosY() + cell->GetHeight() > view_y1))
             {
             {
+                // the cell is visible, draw it:
                 UpdateRenderingStatePre(info, cell);
                 cell->Draw(dc,
                 UpdateRenderingStatePre(info, cell);
                 cell->Draw(dc,
-                           x + m_PosX, y + m_PosY, view_y1, view_y2,
+                           xlocal, ylocal, view_y1, view_y2,
                            info);
                 UpdateRenderingStatePost(info, cell);
             }
                            info);
                 UpdateRenderingStatePost(info, cell);
             }
+            else
+            {
+                // the cell is off-screen, proceed with font+color+etc.
+                // changes only:
+                cell->DrawInvisible(dc, xlocal, ylocal, info);
+            }
         }
     }
         }
     }
-    // container invisible, just proceed font+color changing:
-    else
-    {
-        DrawInvisible(dc, x, y, info);
-    }
 }
 
 
 }
 
 
@@ -1229,7 +1237,8 @@ void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom)
                     cont = (wxHtmlContainerCell*)c;
                     if ( IsEmptyContainer(cont) )
                     {
                     cont = (wxHtmlContainerCell*)c;
                     if ( IsEmptyContainer(cont) )
                     {
-                        cont->SetIndent(0, wxHTML_INDENT_VERTICAL);                                 }
+                        cont->SetIndent(0, wxHTML_INDENT_VERTICAL);
+                    }
                     else
                     {
                         cont->RemoveExtraSpacing(false, true);
                     else
                     {
                         cont->RemoveExtraSpacing(false, true);