]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_hline.cpp
another segfault fix
[wxWidgets.git] / src / html / m_hline.cpp
index 5a581789721216c9f2e278d32d7f484d5e36bbc1..b9df229000f7798b7607e2f901bd9c69018b0075 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        mod_hline.cpp
+// Name:        m_hline.cpp
 // Purpose:     wxHtml module for horizontal line (HR tag)
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
 // Purpose:     wxHtml module for horizontal line (HR tag)
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
 
 
 #include "wx/defs.h"
 
 
 #include "wx/defs.h"
-#if wxUSE_HTML
+#if wxUSE_HTML && wxUSE_STREAMS
 #ifdef __BORDLANDC__
 #pragma hdrstop
 #endif
 
 #ifndef WXPRECOMP
 #ifdef __BORDLANDC__
 #pragma hdrstop
 #endif
 
 #ifndef WXPRECOMP
-#include "wx/wx.h"
+    #include "wx/brush.h"
+    #include "wx/pen.h"
+    #include "wx/dc.h"
 #endif
 
 #endif
 
-
-
 #include "wx/html/forcelnk.h"
 #include "wx/html/m_templ.h"
 
 #include "wx/html/htmlcell.h"
 
 #include "wx/html/forcelnk.h"
 #include "wx/html/m_templ.h"
 
 #include "wx/html/htmlcell.h"
 
-FORCE_LINK_ME(mod_hline)
+FORCE_LINK_ME(m_hline)
 
 
 //-----------------------------------------------------------------------------
 
 
 //-----------------------------------------------------------------------------
@@ -41,20 +41,24 @@ FORCE_LINK_ME(mod_hline)
 class wxHtmlLineCell : public wxHtmlCell
 {
     public:
 class wxHtmlLineCell : public wxHtmlCell
 {
     public:
-        wxHtmlLineCell(int size) : wxHtmlCell() {m_Height = size;}
+        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);
         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);}
+        void Layout(int w)
+            { m_Width = w; wxHtmlCell::Layout(w); }
+
+    private:
+        // Should we draw 3-D shading or not
+      bool m_HasShading;
 };
 
 
 };
 
 
-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))
 {
 {
-    wxBrush mybrush("BLACK", wxSOLID);
-    wxPen mypen("BLACK", 1, wxSOLID);
+    wxBrush mybrush(wxT("GREY"), (m_HasShading) ? wxTRANSPARENT : wxSOLID);
+    wxPen mypen(wxT("GREY"), 1, wxSOLID);
     dc.SetBrush(mybrush);
     dc.SetPen(mypen);
     dc.DrawRectangle(x + m_PosX, y + m_PosY, m_Width, m_Height);
     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);
 }
 
 
 }
 
 
@@ -71,20 +75,22 @@ TAG_HANDLER_BEGIN(HR, "HR")
     {
         wxHtmlContainerCell *c;
         int sz;
     {
         wxHtmlContainerCell *c;
         int sz;
-
-        m_WParser -> CloseContainer();
-        c = m_WParser -> OpenContainer();
-
-        c -> SetIndent(m_WParser -> GetCharHeight(), wxHTML_INDENT_VERTICAL);
-        c -> SetAlignHor(wxHTML_ALIGN_CENTER);
-        c -> SetAlign(tag);
-        c -> SetWidthFloat(tag);
-        if (tag.HasParam(wxT("SIZE")) && tag.ScanParam(wxT("SIZE"), wxT("%i"), &sz) == 1) {}
-        else sz = 1;
-        c -> InsertCell(new wxHtmlLineCell(sz));
-
-        m_WParser -> CloseContainer();
-        m_WParser -> OpenContainer();
+        bool HasShading;
+
+        m_WParser->CloseContainer();
+        c = m_WParser->OpenContainer();
+
+        c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_VERTICAL);
+        c->SetAlignHor(wxHTML_ALIGN_CENTER);
+        c->SetAlign(tag);
+        c->SetWidthFloat(tag);
+        sz = 1;
+        tag.GetParamAsInt(wxT("SIZE"), &sz);
+        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;
     }