]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_hline.cpp
Fix crash in wxArray::insert() overload taking iterator range.
[wxWidgets.git] / src / html / m_hline.cpp
index 87b4e384c546ff68295e11ad6a267eebfe98140e..c83704ad4cc7a438119b8e380395dca2d6942117 100644 (file)
@@ -1,26 +1,21 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        m_hline.cpp
+// Name:        src/html/m_hline.cpp
 // Purpose:     wxHtml module for horizontal line (HR tag)
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
 // Copyright:   (c) 1999 Vaclav Slavik
-// Licence:     wxWindows Licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "wx/wxprec.h"
 
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
 
-#include "wx/defs.h"
 #if wxUSE_HTML && wxUSE_STREAMS
-#ifdef __BORDLANDC__
-#pragma hdrstop
-#endif
 
-#ifndef WXPRECOMP
+#ifndef WX_PRECOMP
     #include "wx/brush.h"
     #include "wx/pen.h"
     #include "wx/dc.h"
@@ -41,20 +36,29 @@ FORCE_LINK_ME(m_hline)
 class wxHtmlLineCell : public wxHtmlCell
 {
     public:
-        wxHtmlLineCell(int size) : wxHtmlCell() {m_Height = size;}
-        void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2);
-        void Layout(int w) {m_Width = w; if (m_Next) m_Next->Layout(w);}
+        wxHtmlLineCell(int size, bool shading) : wxHtmlCell() {m_Height = size; m_HasShading = shading;}
+        void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2,
+                  wxHtmlRenderingInfo& info);
+        void Layout(int w)
+            { m_Width = w; wxHtmlCell::Layout(w); }
+
+    private:
+        // Should we draw 3-D shading or not
+      bool m_HasShading;
+
+      wxDECLARE_NO_COPY_CLASS(wxHtmlLineCell);
 };
 
 
-void wxHtmlLineCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2)
+void wxHtmlLineCell::Draw(wxDC& dc, int x, int y,
+                          int WXUNUSED(view_y1), int WXUNUSED(view_y2),
+                          wxHtmlRenderingInfo& WXUNUSED(info))
 {
-    wxBrush mybrush("BLACK", wxSOLID);
-    wxPen mypen("BLACK", 1, wxSOLID);
+    wxBrush mybrush(wxT("GREY"), (m_HasShading) ? wxBRUSHSTYLE_TRANSPARENT : wxBRUSHSTYLE_SOLID);
+    wxPen mypen(wxT("GREY"), 1, wxPENSTYLE_SOLID);
     dc.SetBrush(mybrush);
     dc.SetPen(mypen);
     dc.DrawRectangle(x + m_PosX, y + m_PosY, m_Width, m_Height);
-    wxHtmlCell::Draw(dc, x, y, view_y1, view_y2);
 }
 
 
@@ -66,11 +70,13 @@ void wxHtmlLineCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2)
 
 
 TAG_HANDLER_BEGIN(HR, "HR")
+    TAG_HANDLER_CONSTR(HR) { }
 
     TAG_HANDLER_PROC(tag)
     {
         wxHtmlContainerCell *c;
         int sz;
+        bool HasShading;
 
         m_WParser->CloseContainer();
         c = m_WParser->OpenContainer();
@@ -81,12 +87,13 @@ TAG_HANDLER_BEGIN(HR, "HR")
         c->SetWidthFloat(tag);
         sz = 1;
         tag.GetParamAsInt(wxT("SIZE"), &sz);
-        c->InsertCell(new wxHtmlLineCell((int)((double)sz * m_WParser->GetPixelScale())));
+        HasShading = !(tag.HasParam(wxT("NOSHADE")));
+        c->InsertCell(new wxHtmlLineCell((int)((double)sz * m_WParser->GetPixelScale()), HasShading));
 
         m_WParser->CloseContainer();
         m_WParser->OpenContainer();
 
-        return FALSE;
+        return false;
     }
 
 TAG_HANDLER_END(HR)